Edu-API MVP - Candidate Final

Edu-API Specification

Candidate Final
Spec Version 1.0
Candidate Final
Document Version: 9
Date Issued: July 27 2022
Status: This document is for review and adoption by the 1EdTech membership.
This version: https://www.imsglobal.org/spec/eduapi/v1p0/
Latest version: https://www.imsglobal.org/spec/eduapi/latest/
Errata: https://www.imsglobal.org/spec/eduapi/v1p0/errata/

IPR and Distribution Notice

Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the specification set forth in this document, and to provide supporting documentation.

1EdTech takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on 1EdTech's procedures with respect to rights in 1EdTech specifications can be found at the 1EdTech Intellectual Property Rights webpage: http://www.imsglobal.org/ipr/imsipr_policyFinal.pdf .

Use of this specification to develop products or services is governed by the license with 1EdTech found on the 1EdTech website: http://www.imsglobal.org/speclicense.html.

Permission is granted to all parties to use excerpts from this document as needed in producing requests for proposals.

The limited permissions granted above are perpetual and will not be revoked by 1EdTech or its successors or assigns.

THIS SPECIFICATION IS BEING OFFERED WITHOUT ANY WARRANTY WHATSOEVER, AND IN PARTICULAR, ANY WARRANTY OF NONINFRINGEMENT IS EXPRESSLY DISCLAIMED. ANY USE OF THIS SPECIFICATION SHALL BE MADE ENTIRELY AT THE IMPLEMENTER'S OWN RISK, AND NEITHER THE CONSORTIUM, NOR ANY OF ITS MEMBERS OR SUBMITTERS, SHALL HAVE ANY LIABILITY WHATSOEVER TO ANY IMPLEMENTER OR THIRD PARTY FOR ANY DAMAGES OF ANY NATURE WHATSOEVER, DIRECTLY OR INDIRECTLY, ARISING FROM THE USE OF THIS SPECIFICATION.

Public contributions, comments and questions can be posted here: http://www.imsglobal.org/forums/ims-glc-public-forums-and-resources .

© 2024 1EdTech™ Consortium, Inc. All Rights Reserved.

Trademark information: http://www.imsglobal.org/copyright.html

Abstract

1EdTech Edu-API is a technical specification that describes a structured set of vocabulary that assists institutions in exchanging education related information. This data can be used to present information to students, instructors, advisers, and administrators in order to drive effective decision making and promote learner success

1. Introduction

This Edu-API specification defines the data model and describes the services that are enabled by v1.0 of the Edu-API specification.

1.1 Status of this document

This document is a draft for the Candidate Final release, meaning the technical specification will also be in Candidate Final status. 1EdTech members are currently working towards successful implementations of the defined specification.

1EdTech strongly encourages its members and the community to provide feedback to continue the evolution and improvement of the OneRoster standard. To join the 1EdTech developer and conformance certification community focused on OneRoster and the other related 1EdTech standards please visit the 1EdTech EduERP alliance online here: https://www.imsglobal.org/lis/alliance.html

1.2 Audiences

The target readers for this document are:

  • Business Leaders - the people who are responsible for identifying the business need for Edu-API data interoperability.
  • Solution & Integration Architects - the people who are responsible for design of the systems exchanging Edu-API data.
  • Product & Integration Developers - people who will be doing the coding to add this functionality to the various systems.

1.3 Design Goals and Rationale

Edu-API is designed to address key provisioning/rostering use cases from the Student Information System (SIS) to consumers in a Higher Education context. Common consumers of Edu-API SIS data include Learning Management System (LMS) and other educational or administrative applications or solutions. The Edu-API core specification uses a REST binding with JSON data structures to achieve technical interoperability.

This includes the defining and provisioning of:

  • Courses and other educational entities, including Course collections, sometimes referred to as Programs;
  • Class sections, or other instantiations of education offerings, scheduled or unscheduled;
  • Education components, i.e. exams or other enrollable activities related to an education offering;
  • Persons, especially in the context of a relationship to an education or education offering, i.e., students and instructors;
  • Enrollments or other associations with an education offering.

1.4 Document Set

Here are the set of documents that make up the Edu-API v1p0 specification:

Note: The REST binding doc, Pub/Sub Binding doc, conformance guide, and implementation guide URLs are not yet live. These are the patterns that will be used for publishing.

1.4.1 Edu-API OpenAPI Files

The Open API Specification (OAS) defines a standard, programming language-agnostic interface description for HTTP APIs, which allows both humans and computers to discover and understand the capabilities of a service without requiring access to source code, additional documentation, or inspection of network traffic. When properly defined via OpenAPI, a consumer can understand and interact with the remote service with a minimal amount of implementation logic. Similar to what interface descriptions have done for lower-level programming, the OpenAPI Specification removes guesswork in calling a service.

1.4.2 Edu-API JSON Schema Files

This specification includes JSON Schema files for every class in the data model and every payload in the API.

2. Conformance

As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

The key words MAY, MUST, MUST NOT, OPTIONAL, RECOMMENDED, REQUIRED, SHALL, SHALL NOT, SHOULD, and SHOULD NOT in this document are to be interpreted as described in [RFC2119].

An implementation of this specification that fails to implement a MUST/REQUIRED/SHALL requirement or fails to abide by a MUST NOT/SHALL NOT prohibition is considered nonconformant. SHOULD/SHOULD NOT/RECOMMENDED statements constitute a best practice. Ignoring a best practice does not violate conformance but a decision to disregard such guidance should be carefully considered. MAY/OPTIONAL statements indicate that implementers are entirely free to choose whether or not to implement the option.

3. Key Concepts

The Edu-API document set makes liberal usage of the concepts and terminology described below.

3.1 Terminology

Below is a list of terms and acronyms that are used in the Edu-API document set.

Term Definition
GUID A Globally Unique Identifier
iPaaS Integration Platform as a Service is a system that standardizes
how applications are integrated into a ecosystem
JSON JavaScript Object Notation
LIS 1EdTech Learning Information Services: This is the legacy specification used to
support higher ed interoperability
LMS Learning Management System: A system that provides the framework and user
experience to handle the teaching and learning process
LTI 1EdTech Learning Tools Interoperability Standard. This is a specification that supports
integrations between learning platforms and learning tools via contextualized OIDC
based single sign on
OR 1EdTech OneRoster standard: This is a specification that deals with rostering and
other processes in the K12 Sector
REST Representational State Transfer
SIS Student Information System: The system that stores and tracks all student
information, including grades, attendance records, and more. The SIS is the most
common Edu-API Provider.
UUID Universally Unique Identifier
Pub/Sub AKA Publish/Subscribe:

3.2 Providers and Consumers

Like OneRoster, Edu-API describes the two participants in Edu-API data exchanges as providers and consumers:

  • Edu-API Providers are systems, e.g. a Student information system (SIS), that makes information available to other systems in the ecosystem.

  • Edu-API Consumers are systems, e.g. a Learning Management Systems (LMS), that make use of that information to facilitate teaching and learning or other important activities.

3.3 Education and Education Templates

Edu-API defines different formats of Educations that may be offered throughout the world. In order to facilitate this the specification uses the concept of an Education as a general template for building out academic programs. Edu-API accomplishes this by the use of the following general structures:

  • Education Templates - In the context of Edu-API an Education Template is any kind of canonical non-instantiated learning units that have a structured relationship, e.g. a course,
  • Education Offerings - An instantiation of an Educational Template object. Once instantiated, an education becomes enrollable and contains information about the educational units as they contribute to a defined learning pathway.

The Edu-API specification defines 3 types of educations that can be used as either templates or offerings. Those are:

  • Collection - A grouping of educational items that together contribute to a defined learning pathway,
  • Course - A unit of teaching that typically lasts one academic session. For example, a school runs its introductory level English course every term with four scheduled instances (represented by course offerings) and shared curriculum,
  • Component - Educational units that can be used to represent parts of a course. For example a physics course as described in a course catalog might include a lecture and a lab. In this scenario, the lecture and lab would both be represented in the Edu-API model as components.

3.4 Edu-API exchange methods

3.4.1 Synchronous

The primary exchange method defined in the Edu-API MVP is a synchronous, REST API data exchange. with JSON Payloads In that model, the Edu-API provider makes available a set of Edu-API REST endpoints for consumers to access their data. Examples and conventions mentioned in this document are assuming the REST implementation.

3.4.2 Asynchronous

There is also an asynchronous binding of the Edu-API specification being developed by the Edu-API community using a publish/subscribe methodology. This method will make use of the same JSON payload definitions as the synchronous service. There will be a separate set of service binding documents that describe this.

While this work is being done in parallel to the synchronous REST service, it is currently not considered critical path to moving to Edu-API v1p0 final.

3.4.3 Relationship to OneRoster and LIS

OneRoster is a 1EdTech standard that supports interoperability needs in the K12 space. LIS is the 1EdTech legacy standard that supports interoperability in the Higher Ed Space.

Edu-API was designed as the spiritual successor to LIS and as OneRoster for Higher Education. The goal was supersede LIS with more modern usage patterns and build on the well adopted norms developed through OneRoster development cycles.

3.5 Conceptual Model

This conceptual model describes Edu-API concepts and the relationship between those concepts. The data model described in this document is the normative reference for the classes and properties that are used to implement Edu-API.

The conceptual model is targeted for all 1.2 Audiences, while the data model is targeted for Solution Architects and Product Developers.

The box surrounding the Education Offering is intended to signify that the offering is bound to an academic session as it's method of instantiation. This concept does not always hold true, but it is a common use scenario. Common outliers are programs in the field of competency based education (CBE).

EduApi Concept Model
Figure 1 Diagram show the major conceptual components of Edu-API

3.6 Edu-API Information Model

The logical data model shows how the entities in Edu-API's data model are related.

Note
@@@TBD to draw a better diagram

3.7 "Primary" & "Other"

In many places where there are a multitude of possible values for a given attribute, Edu-API has adopted a "primary" and "other" approach instead of solely using an unordered list, e.g. the person class has the properties 'primaryEmail' and 'otherEmail'. This allows a sentiment of importance or ranking to be communicated. It also serves consuming systems who only need 1 value. Edu-API does not describe the methodology as to how "primary" is designated, that determination is out of scope of the specification.

4. Alignment with 1EdTech Frameworks

4.1 Security Framework

The Edu-API specification aligns with the 1EdTech Security Framework document. For security, all REST implementations MUST support OAuth 2.0 client credentials grant. More details are available in the service model descriptions.

4.2 Localization Frameworks

1EdTech is working on a framework definition that defines patterns for specifications to provide multilinguality as part of the data exchange. While Edu-API is used internationally, the Edu-API project group decided that at the time of publishing the first version of this specification it would not make use of the patterns described in that document.

4.3 Privacy Frameworks

The 1EdTech Privacy framework defines a methodology for institutions and systems to work together to enable protections on sensitive data when context requires it. Edu-API has annotated (@TBD) it's data models and service models based on the precepts defined in that document. The supported control mechanisms are ... (@TBD)

4.4 Asynchronous Binding Framework

A key use case raised during the development cycle for Edu-API was support for publish subscribe and other asynchronous service bindings. Edu-API this aligns with the 1EdTech Asynchronous binding via the Publish/Subscribe method.

@TBD more details

5. Edu-API Use cases

Edu-API's model is robust and flexible allowing for many use scenarios. This list is ever evolving and development of the Edu-API standard is ongoing. For a up to date list of the use scenarios that the Edu-API project group has discussed please review [link to full use case catalog](www. exampleusecases.eduapi.com).

Below is the primary set of use cases that the Edu-API workgroup has vetted for inclusion in the first release of Edu-API. This list will continue to evolve over time to include more use cases as raised by the Edu-API community.

N.B.: The scope of use cases covered in the Edu-API v1.0 specification is restricted to registration/rostering use cases. Grade passback and resource allocation which are 2 services covered in OneRoster are left to a subsequent version.

ID Use Case Name
1 Roster Provisioning
2 Role Based access
3 Staff Provisioning by Org
4 Retrieve Class Schedule - Student
5 Retrieve Roster - Course Offering
6 Program Based Enrollment
7 Content Provisioning
8 Billing
9 Educational program definition
10 Scheduling
11 Grade Passback

5.1 Roster Provisioning

Description: Institutions implement many systems for use by their educators and administrative staff. They want to be able to make data available to all systems to enable enrollment and registration.

Actors:

  • Edu-API Provider: Student Information System or other Identity Providers.
  • Edu-API Consumers: Learning Management Systems or other learning applications.

How Edu-API Helps: Edu-API defines REST API endpoints that enable the exchange of bulk data between systems for the provisioning of Persons, Organizations, Academic Sessions, and Educations. Edu-API Also defines the relationships between those entities in the form of affiliations to an organization and enrollment in an educational offering.

Common Choreography

  • Initial or Bulk Load
    • The consumer makes a series of 'get all' requests for all resources needed
  • Delta or True up
    • The consumer will call the 'get all' resources as defined in the load choreography using a filter on the dateLastModifiedproperty to indicate they are looking for items that have changed since their last sync.

5.2 Role Based access

Description

A systems administer at the institution needs to enable access to various systems they manage based on functional needs. They may need to give students access to view their courses and teachers the ability to add content or update course offering details.

Actors

  • Edu-API Provider: Student Information System or other Identity Providers.
  • Edu-API Consumers: Learning Management Systems or other learning applications.

How Edu-API Helps: Edu-API describes the relationships between a person and an organization by linking a person to a role in that organizations context. This allows an institution to assign a person multiple roles in multiple contexts. For example a person might be a student in a masters program but be a teacher's assistant in an undergraduate program. Edu-API allows this to be modeled. Syncing Edu-API data also allows systems to describe how over time describe the person as transitioning through roles. In doing so, Edu-API allows a system to tell it's partner that person A can access their system B as role X.

5.3 Staff Provisioning by Org

Description: It is often necessary for educational systems to exchange information in order to allocate all staff. In the educational context this might include the exchange of information about teachers, teachers aides, department administrators, etc. for a specific organization.

Actors

  • Edu-API Provider: Student Information System or other Identity Providers.
  • Edu-API Consumers: Learning Management Systems or other learning applications.

How Edu-API Helps:As previously described, Edu-API defines the relationships between a person and an organization by assigning a person an Edu-API Role in that organizations context. It also allows an institution to assign a person multiple roles. It also allows the system to describe how over time describe the person as transitioning through roles. In doing so, Edu-API allows a system to tell it's partner that person A can access their system B as role X. As a subset of role based access, Edu-API enables systems to give educations and other institutional staff access to the appropriate roles to allow them to set up their educational offerings, manage their rosters, Facilitate access for staff.

5.4 Retrieve Class Schedule - Student

Description

Systems such as student advising systems or early notification systems need to have access to a students entire class schedule.

Actors

  • Edu-API Provider: Student Information System or other Identity Providers.
  • Edu-API Consumers: Student advising systems and billing systems

How Edu-API Helps:Edu-API has endpoints for retrieving all courses for a student: /students/{studentId}/courseOfferings allows a system to retrieve all of the course offerings that a specific person with a role of 'student' and a specific ID is enrolled in. There are similar endpoints for 'collections' and 'components'

5.5 Retrieve Roster - Course Offering

Description

LMS and learning applications often need to query the identity system for the entire roster for a course offering. This can be important as enrollments change over time.

Actors

  • Edu-API Provider: Student Information System or other Identity Providers.
  • Edu-API Consumers: Learning Management Systems or other learning applications.

How Edu-API Helps:Edu-API defines endpoints that allow you to retrieve an entire roster for a offering with a specified ID, /courseOfferings/{courseOfferingId}/students. There are also similar endpoints for other educational offerings and staff.

5.6 Program Based Enrollment

Descriptions

Systems have the need to enroll students and staff on offerings based on the educational program.

Actors

  • Edu-API Provider: Student Information System or other Identity Providers.
  • Edu-API Consumers: Learning Management Systems or other learning applications.

How Edu-API Helps:Edu-API has endpoints to retrieve enrollments based on the education type. A system can read /collectionOfferings with a filter of collectionType='program'. This same pattern works for other types of educations on other endpoints.

5.7 Content Provisioning

Not in scope for Edu-API v1p0

5.8 Billing

Not in scope for Edu-API v1p0

5.9 Educational program definition

Description:Educational systems need a standardized and programmatic way to describe educational programs for exchange between systems.

Actors

  • Edu-API Provider: Student Information System or other Identity Providers.
  • Edu-API Consumers: Learning Management Systems or other learning applications.

How Edu-API Helps:Edu-API allows a system to read all the information about an educational program via the combination of calls for get(all) on collectionsOfferings,courseOfferings, and componentOfferings. The Edu-API data model allows those educations to be defined in a hierarchical and recursive way so that hierarchies can be defined within the Edu-API data

5.10 Scheduling

Not in scope for Edu-API v1p0

5.11 Grade Passback

Not in scope for Edu-API v1p0

6. Getting Started

6.1 Where can I get help?

If you have questions or need help with implementing Edu-API, here are some available resources:

6.2 1EdTech TrustEd Apps Directory

The 1EdTech TrustEd Apps Directory is the official listing of products that have passed 1EdTech conformance certification testing. Products that are listed in this directory are guaranteed to meet the 1EdTech standards for which they have passed testing. If you experience an integration issue with a product listed here, 1EdTech will work with the supplier to resolve the problem. If a product is NOT listed here it has either not passed 1EdTech testing or its certification has expired.

6.3 New to Edu-API

If you are new to Edu-API, please start here.

Note
@@@TBD

6.4 Migrating from LIS

If you are migrating from 1EdTech Learning Information Services (LIS), please start here.

Note
@@@TBD

6.4.1 Migrating from OneRoster 1.1

If you are migrating from the 1.1 version of OneRoster, please start here.

Note
@@@TBD

6.4.2 Migrating from OneRoster 1.2

If you are migrating from the 1.2 version of OneRoster, please start here.

Note
@@@TBD

7. Extending and Profiling

This standard can be extended in three ways:

  • Extend the Data Model with new classes and new properties to existing extensible classes
  • Extend the Extensible Enumerated Vocabularies in the Data Model.
  • Extend the API with new endpoints and new responses to existing endpoints

Extensions SHOULD be presented to the Edu-API project group for review and socialization.

Extensions MUST NOT be required.

Extensions WILL NOT be tested during conformance testing.

This standard can also be profiled. In general, profiling is used to:

  • Refine which endpoints are used and which operations are supported for each endpoint
  • Refine the data models by increasing the constraints on the base definitions

7.1 Extending the Data Model

It is recognized that implementers may wish to extend the specification. The preferred mechanism for doing this is for implementers to use an extension space within the Edu-API data model, and then set their parsers to read those extension attributes. Extensions are ONLY permitted using the 'metadata' attribute within the 'Base' class

7.2 Extending Enumerated Vocabularies

Edu-API includes the ability to extend some of the enumerated vocabularies. Each proprietary term must start with the characters 'ext:'.

7.3 Extending the API

The definition of new operations should follow the same format as described in this document. The new operations should be defined using a new interface type. Every operation must result in the return of a status code that describes the final state of the request on the target end system.

7.4 Profiles

Profiling is the process by which an 1EdTech specification is tailored to meet the requirements of a specific community: the community could be a reflection of a market sector, a geographic location, etc. An example of such a community is the Norwegian K-12/Schools for whom a profile of the 1EdTech OneRoster 1.2 specification has been created. The process of profiling starts with the corresponding base specification and defines a set of new constraints to make the subsequent modified specification better fit the requirements of the target community. Once the profile has been defined, the next step is to create the corresponding Conformance Test Systems and Certification process for that profile: these will be modified versions of the equivalents created for the base specification. It is recommended that profiling is undertaken within 1EdTech so that the 1EdTech model driven specification tools can be used.

A profile is the product produced by the process of specification Profiling. A Profile of an 1EdTech specification consists of a set of new constraints. In general an 1EdTech specification enables a wide range education and learning workflows, processes and practices. A profile is designed to establish and impose best practices for the target community. A profile MUST only increase constraints i.e. it MUST NOT relax constraints in the base specification. For example the multiplicity of a property in the data model MAY be changed from [1..] (required and permitting many) to [1..1] (required and only one) but MUST NOT become [0..] (optional and permitting many). The most common profiling changes include more strict data typing, changes to enumerations, vocabulary changes, prohibition of endpoints and creation of new endpoints. A profile could make use of the extension capabilties to extend the specification to support new features. The key objective of a rofile is to remove, wherever possible, interoperability uncertainty e.g. by removing optionality.

It is strongly recommended that a profile of this standard is undertaken either by, or with the close support, of 1EdTech. However, no matter who is responsible for creating the profile artefacts (documents, schemas, etc.), it is strongly recommended that 1EdTech specification tools are used. This will ensure that the artefacts are consistent with the base specifications and that useful support documentation is automatically produced e.g. creation of a document that summarizes the differences between the base specification and the profile.

A. Data Models

A.1 Edu-API Abstract Educations Model

The Edu-API community and project group understands that the instructional landscape is complex and ever changing. In order to facilitate the continued evolution and to account for specifics and idiosyncrasies that were not discussed, we've defined a set of abstract classes that can be instantiated to define educational types that we do not define explicitly.

A.1.1 Education

A description of an abstract education.

Property Type Description Multiplicity
sourcedId GUID The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD). [1]
recordLanguage LanguageCode The primary language used in the described entity. [1]
title LanguageTypedString A set of titles for the associated entity with a designated language for each entry. [1..*]
description LanguageTypedString A set of descriptions of the associated entity with a designated language for each entry. [1..*]
primaryCode IdentifierEntry The primary human readable identifier for the entity. This will often take the form of a human readable code as defined by the institution or region [1]
otherCodes IdentifierEntry Any number of additional human readable codes/identifiers for the entity being described [0..*]
organization OrganizationGUIDRef A reference to an Edu-API Organization. [1]
organizationCode String A business code used to system might use to reference an organization [0..1]
level EducationLevelEnum Enumeration The educational level that the entity is for. This is represented by an extensible enumerated vocabulary and commonly varies by institution and region. [1]
creditType CreditTypeEnum Enumeration Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary. [1]
gradingScheme LanguageTypedString A human readable string that describes the system that is used to evaluate performance within the collection. This can be represented in many ways and is mostly institutional specific. The most common systems are the A-F scheme and the 4.0 based GPA scaling system. [1]
teachingLanguage LanguageCode The main language used to relay the content of the offering. [0..1]
recordStatus RecordStatusTypeEnum The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so. [1]
dateLastModified DateTimeZ A timestamp describing when this record was last modified. [0..1]
extensions educationExtensions A container for extension objects. [0..1]

A.1.2 EducationOffering

A description of an abstract educational offering.

Property Type Description Multiplicity
sourcedId GUID The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD). [1]
offeringType EducationOfferingTypeEnum Enumeration The type of education being offered. This is based on an enumerated vocabulary. [1]
recordLanguage LanguageCode The primary language used in the described entity. [1]
title LanguageTypedString A set of titles for the associated entity with a designated language for each entry. [1..*]
description LanguageTypedString A set of descriptions of the associated entity with a designated language for each entry. [1..*]
primaryCode IdentifierEntry The primary human readable identifier for the entity. This will often take the form of a human readable code as defined by the institution or region [1]
otherCodes IdentifierEntry Human readable codes/identifiers for the entity being described [0..*]
locations Location A container for describing where the entity takes place. This could be as a description or as a geo location [0..*]
organization OrganizationGUIDRef A reference to an Edu-API Organization. [1]
academicSession AcademicSessionGUIDRef A reference to an Edu-API Academic Session [1]
organizationCode String A business code used to system might use to reference an organization [0..1]
academicSessionCode String A business code that a system might use to reference an academic session. [0..1]
offeringFormat OfferingFormatEnum Enumeration The modality by which the entity is delivered. This is represented by an extensible enumerated vocabulary [1]
paceOfStudy Percentage The tempo that the course is taught at as a percentage of a normal course. [0..1]
registrationStatus RegistrationStatusEnum The status of the entity indicating whether it is open for enrollment for teachers and students. This is represented by an extensible enumerated vocabulary. [1]
startDate DateZ The start date of the associated event. [1]
endDate DateZ The end date of the associated event. [1]
teachingLanguage LanguageCode The main language used to relay the content of the offering. [0..1]
maxNumberStudents Integer The maximum number of students allowed to enroll for this offering [0..1]
minNumberStudents Integer The minimum number of students allowed to enroll for this offering [0..1]
enrolledNumberStudents Integer The number of students that have already enrolled for this offering [0..1]
pendingNumberStudents Integer The number of students that have a pending enrollment request for this offering [0..1]
roleEnablement RoleEnablement An array to store associated dates for a course offering. Specifically, additional important date and time offsets surrounding when specific roles may be associated with the course offering before or after the official start and end dates. These dates are meant to be considered additional metadata about the course offering and applied independent of the startDate and endDate. They are not intended to be used to as replacements. [0..*]
recordStatus RecordStatusTypeEnum The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so. [1]
dateLastModified DateTimeZ A timestamp describing when this record was last modified. [0..1]
synchronicity SynchronicityEnum Enumeration An indicator of whether instructor and learner must both be present at the same time [0..1]
extensions educationOfferingExtensions A container for extension objects. [0..1]

A.2 Education Templates

A.2.1 CollectionTemplate

A grouping of educational units. In the context of Edu-API an education is any kind of canonical or non-instantiated learning units that have a structured relationship, e.g. a course. When grouped, these educational units can be used to define such concepts as programs of study.

Property Type Description Multiplicity
collectionType CollectionTypeEnum Enumeration A representation of what the entity defines. It is based on an extensible enumerated vocabulary. [1]
parent CollectionTemplateGUIDRef A reference to a parent EducationCollection (if present). [0..*]
sourcedId GUID The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD). [1]
recordLanguage LanguageCode The primary language used in the described entity. [1]
title LanguageTypedString A set of titles for the associated entity with a designated language for each entry. [1..*]
description LanguageTypedString A set of descriptions of the associated entity with a designated language for each entry. [1..*]
primaryCode IdentifierEntry The primary human readable identifier for the entity. This will often take the form of a human readable code as defined by the institution or region [1]
otherCodes IdentifierEntry Any number of additional human readable codes/identifiers for the entity being described [0..*]
organization OrganizationGUIDRef A reference to an Edu-API Organization. [1]
organizationCode String A business code used to system might use to reference an organization [0..1]
level EducationLevelEnum Enumeration The educational level that the entity is for. This is represented by an extensible enumerated vocabulary and commonly varies by institution and region. [1]
creditType CreditTypeEnum Enumeration Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary. [1]
gradingScheme LanguageTypedString A human readable string that describes the system that is used to evaluate performance within the collection. This can be represented in many ways and is mostly institutional specific. The most common systems are the A-F scheme and the 4.0 based GPA scaling system. [1]
teachingLanguage LanguageCode The main language used to relay the content of the offering. [0..1]
recordStatus RecordStatusTypeEnum The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so. [1]
dateLastModified DateTimeZ A timestamp describing when this record was last modified. [0..1]
extensions educationExtensions A container for extension objects. [0..1]

A.2.2 CourseTemplate

A time independent description of a learning experience, such that it may appear in a catalog.

Property Type Description Multiplicity
courseType CourseTypeEnum Enumeration A representation of what the entity defines. It is based on an extensible enumerated vocabulary. [1]
parent CollectionTemplateGUIDRef A reference to the parent EducationCollection. [0..*]
sourcedId GUID The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD). [1]
recordLanguage LanguageCode The primary language used in the described entity. [1]
title LanguageTypedString A set of titles for the associated entity with a designated language for each entry. [1..*]
description LanguageTypedString A set of descriptions of the associated entity with a designated language for each entry. [1..*]
primaryCode IdentifierEntry The primary human readable identifier for the entity. This will often take the form of a human readable code as defined by the institution or region [1]
otherCodes IdentifierEntry Any number of additional human readable codes/identifiers for the entity being described [0..*]
organization OrganizationGUIDRef A reference to an Edu-API Organization. [1]
organizationCode String A business code used to system might use to reference an organization [0..1]
level EducationLevelEnum Enumeration The educational level that the entity is for. This is represented by an extensible enumerated vocabulary and commonly varies by institution and region. [1]
creditType CreditTypeEnum Enumeration Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary. [1]
gradingScheme LanguageTypedString A human readable string that describes the system that is used to evaluate performance within the collection. This can be represented in many ways and is mostly institutional specific. The most common systems are the A-F scheme and the 4.0 based GPA scaling system. [1]
teachingLanguage LanguageCode The main language used to relay the content of the offering. [0..1]
recordStatus RecordStatusTypeEnum The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so. [1]
dateLastModified DateTimeZ A timestamp describing when this record was last modified. [0..1]
extensions educationExtensions A container for extension objects. [0..1]

A.2.3 ComponentTemplate

A subsection of a Course or Class. It may be a lesson unit within a Class or it may be a separately enrolled unit with a Course. For example, Biology 101 may consist of a Lecture component and a Lab component.

Property Type Description Multiplicity
componentType ComponentTypeEnum Enumeration A representation of what the entity defines. It is based on an extensible enumerated vocabulary. [1]
parent CourseTemplateGUIDRef A reference to the parent Course. [0..*]
sourcedId GUID The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD). [1]
recordLanguage LanguageCode The primary language used in the described entity. [1]
title LanguageTypedString A set of titles for the associated entity with a designated language for each entry. [1..*]
description LanguageTypedString A set of descriptions of the associated entity with a designated language for each entry. [1..*]
primaryCode IdentifierEntry The primary human readable identifier for the entity. This will often take the form of a human readable code as defined by the institution or region [1]
otherCodes IdentifierEntry Any number of additional human readable codes/identifiers for the entity being described [0..*]
organization OrganizationGUIDRef A reference to an Edu-API Organization. [1]
organizationCode String A business code used to system might use to reference an organization [0..1]
level EducationLevelEnum Enumeration The educational level that the entity is for. This is represented by an extensible enumerated vocabulary and commonly varies by institution and region. [1]
creditType CreditTypeEnum Enumeration Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary. [1]
gradingScheme LanguageTypedString A human readable string that describes the system that is used to evaluate performance within the collection. This can be represented in many ways and is mostly institutional specific. The most common systems are the A-F scheme and the 4.0 based GPA scaling system. [1]
teachingLanguage LanguageCode The main language used to relay the content of the offering. [0..1]
recordStatus RecordStatusTypeEnum The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so. [1]
dateLastModified DateTimeZ A timestamp describing when this record was last modified. [0..1]
extensions educationExtensions A container for extension objects. [0..1]

A.3 Education Offerings

A.3.1 CollectionOffering

A collection of courses or other learning units, used to group them into a coherent whole for enrollment, administrative, or other purposes. A Program is one example of a Course Collection.

Property Type Description Multiplicity
offeringType CollectionTypeEnum Enumeration A representation of what the entity defines. It is based on an extensible enumerated vocabulary. [1]
collection CollectionTemplateGUIDRef A reference to the collectionTemplate. [1]
parent CollectionOfferingGUIDRef A reference to parent collectionOffering (if present). [0..*]
sourcedId GUID The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD). [1]
recordLanguage LanguageCode The primary language used in the described entity. [1]
title LanguageTypedString A set of titles for the associated entity with a designated language for each entry. [1..*]
description LanguageTypedString A set of descriptions of the associated entity with a designated language for each entry. [1..*]
primaryCode IdentifierEntry The primary human readable identifier for the entity. This will often take the form of a human readable code as defined by the institution or region [1]
otherCodes IdentifierEntry Human readable codes/identifiers for the entity being described [0..*]
locations Location A container for describing where the entity takes place. This could be as a description or as a geo location [0..*]
organization OrganizationGUIDRef A reference to an Edu-API Organization. [1]
academicSession AcademicSessionGUIDRef A reference to an Edu-API Academic Session [1]
organizationCode String A business code used to system might use to reference an organization [0..1]
academicSessionCode String A business code that a system might use to reference an academic session. [0..1]
offeringFormat OfferingFormatEnum Enumeration The modality by which the entity is delivered. This is represented by an extensible enumerated vocabulary [1]
paceOfStudy Percentage The tempo that the course is taught at as a percentage of a normal course. [0..1]
registrationStatus RegistrationStatusEnum The status of the entity indicating whether it is open for enrollment for teachers and students. This is represented by an extensible enumerated vocabulary. [1]
startDate DateZ The start date of the associated event. [1]
endDate DateZ The end date of the associated event. [1]
teachingLanguage LanguageCode The main language used to relay the content of the offering. [0..1]
maxNumberStudents Integer The maximum number of students allowed to enroll for this offering [0..1]
minNumberStudents Integer The minimum number of students allowed to enroll for this offering [0..1]
enrolledNumberStudents Integer The number of students that have already enrolled for this offering [0..1]
pendingNumberStudents Integer The number of students that have a pending enrollment request for this offering [0..1]
roleEnablement RoleEnablement An array to store associated dates for a course offering. Specifically, additional important date and time offsets surrounding when specific roles may be associated with the course offering before or after the official start and end dates. These dates are meant to be considered additional metadata about the course offering and applied independent of the startDate and endDate. They are not intended to be used to as replacements. [0..*]
recordStatus RecordStatusTypeEnum The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so. [1]
dateLastModified DateTimeZ A timestamp describing when this record was last modified. [0..1]
synchronicity SynchronicityEnum Enumeration An indicator of whether instructor and learner must both be present at the same time [0..1]
extensions educationOfferingExtensions A container for extension objects. [0..1]

A.3.2 CourseOffering

Relates a course to one or more delivery scenarios.

Property Type Description Multiplicity
offeringType CourseTypeEnum Enumeration A representation of what the entity defines. It is based on an extensible enumerated vocabulary. [1]
course CourseTemplateGUIDRef A reference to the courseTemplate. [1]
parent CollectionOfferingGUIDRef A reference to the parent collectionOffering. [0..*]
sourcedId GUID The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD). [1]
recordLanguage LanguageCode The primary language used in the described entity. [1]
title LanguageTypedString A set of titles for the associated entity with a designated language for each entry. [1..*]
description LanguageTypedString A set of descriptions of the associated entity with a designated language for each entry. [1..*]
primaryCode IdentifierEntry The primary human readable identifier for the entity. This will often take the form of a human readable code as defined by the institution or region [1]
otherCodes IdentifierEntry Human readable codes/identifiers for the entity being described [0..*]
locations Location A container for describing where the entity takes place. This could be as a description or as a geo location [0..*]
organization OrganizationGUIDRef A reference to an Edu-API Organization. [1]
academicSession AcademicSessionGUIDRef A reference to an Edu-API Academic Session [1]
organizationCode String A business code used to system might use to reference an organization [0..1]
academicSessionCode String A business code that a system might use to reference an academic session. [0..1]
offeringFormat OfferingFormatEnum Enumeration The modality by which the entity is delivered. This is represented by an extensible enumerated vocabulary [1]
paceOfStudy Percentage The tempo that the course is taught at as a percentage of a normal course. [0..1]
registrationStatus RegistrationStatusEnum The status of the entity indicating whether it is open for enrollment for teachers and students. This is represented by an extensible enumerated vocabulary. [1]
startDate DateZ The start date of the associated event. [1]
endDate DateZ The end date of the associated event. [1]
teachingLanguage LanguageCode The main language used to relay the content of the offering. [0..1]
maxNumberStudents Integer The maximum number of students allowed to enroll for this offering [0..1]
minNumberStudents Integer The minimum number of students allowed to enroll for this offering [0..1]
enrolledNumberStudents Integer The number of students that have already enrolled for this offering [0..1]
pendingNumberStudents Integer The number of students that have a pending enrollment request for this offering [0..1]
roleEnablement RoleEnablement An array to store associated dates for a course offering. Specifically, additional important date and time offsets surrounding when specific roles may be associated with the course offering before or after the official start and end dates. These dates are meant to be considered additional metadata about the course offering and applied independent of the startDate and endDate. They are not intended to be used to as replacements. [0..*]
recordStatus RecordStatusTypeEnum The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so. [1]
dateLastModified DateTimeZ A timestamp describing when this record was last modified. [0..1]
synchronicity SynchronicityEnum Enumeration An indicator of whether instructor and learner must both be present at the same time [0..1]
extensions educationOfferingExtensions A container for extension objects. [0..1]

A.3.3 ComponentOffering

A subsection of a courseOffering. It may be a lesson or separately enrollable unit within a courseOffering. For example, Biology 101 may consist of a Lecture component offering and a Lab component offering

Property Type Description Multiplicity
offeringType ComponentTypeEnum Enumeration A representation of what the entity defines. It is based on an extensible enumerated vocabulary. [1]
component ComponentTemplateGUIDRef A reference to the componentTemplate. [1]
parent CourseOfferingGUIDRef A reference to the parent courseOffering. [0..*]
sourcedId GUID The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD). [1]
recordLanguage LanguageCode The primary language used in the described entity. [1]
title LanguageTypedString A set of titles for the associated entity with a designated language for each entry. [1..*]
description LanguageTypedString A set of descriptions of the associated entity with a designated language for each entry. [1..*]
primaryCode IdentifierEntry The primary human readable identifier for the entity. This will often take the form of a human readable code as defined by the institution or region [1]
otherCodes IdentifierEntry Human readable codes/identifiers for the entity being described [0..*]
locations Location A container for describing where the entity takes place. This could be as a description or as a geo location [0..*]
organization OrganizationGUIDRef A reference to an Edu-API Organization. [1]
academicSession AcademicSessionGUIDRef A reference to an Edu-API Academic Session [1]
organizationCode String A business code used to system might use to reference an organization [0..1]
academicSessionCode String A business code that a system might use to reference an academic session. [0..1]
offeringFormat OfferingFormatEnum Enumeration The modality by which the entity is delivered. This is represented by an extensible enumerated vocabulary [1]
paceOfStudy Percentage The tempo that the course is taught at as a percentage of a normal course. [0..1]
registrationStatus RegistrationStatusEnum The status of the entity indicating whether it is open for enrollment for teachers and students. This is represented by an extensible enumerated vocabulary. [1]
startDate DateZ The start date of the associated event. [1]
endDate DateZ The end date of the associated event. [1]
teachingLanguage LanguageCode The main language used to relay the content of the offering. [0..1]
maxNumberStudents Integer The maximum number of students allowed to enroll for this offering [0..1]
minNumberStudents Integer The minimum number of students allowed to enroll for this offering [0..1]
enrolledNumberStudents Integer The number of students that have already enrolled for this offering [0..1]
pendingNumberStudents Integer The number of students that have a pending enrollment request for this offering [0..1]
roleEnablement RoleEnablement An array to store associated dates for a course offering. Specifically, additional important date and time offsets surrounding when specific roles may be associated with the course offering before or after the official start and end dates. These dates are meant to be considered additional metadata about the course offering and applied independent of the startDate and endDate. They are not intended to be used to as replacements. [0..*]
recordStatus RecordStatusTypeEnum The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so. [1]
dateLastModified DateTimeZ A timestamp describing when this record was last modified. [0..1]
synchronicity SynchronicityEnum Enumeration An indicator of whether instructor and learner must both be present at the same time [0..1]
extensions educationOfferingExtensions A container for extension objects. [0..1]

A.4 Person & Roles

A.4.1 Person

A Person represents a human being, alive or deceased, real or imaginary.

Property Type Description Multiplicity
sourcedId GUID The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD). [1]
otherIdentifiers IdentifierEntry A list of additional identifiers for the described entity. [0..*]
recordLanguage LanguageCode The primary language used in the described entity. [1]
legalName PersonName A legal name. [0..1]
formattedName NFCString the long form formatted name, this will often be dependent on region or system requirements. [0..1]
otherNames PersonNameEntry A list of other names for this person. [0..*]
gender GenderEnum Enumeration The gender of the individual. It is based on an extensible enumerated vocabulary. [0..1]
pronouns LanguageTypedString Pronoun(s) by which this person is referenced. Examples (in the case of English) include 'she/her/hers', 'he/him/his', 'they/them/theirs', 'ze/hir/hir', 'xe/xir', or a statement that the person's name should be used instead of any pronoun. [0..*]
languagesSpoken LanguageCode The list of languages that this person speaks. [0..*]
dateOfBirth Date The date of birth. [0..1]
placeOfBirth String The place of birth. Commonly a city or municipality. [0..1]
countryOfBirth String The country of birth. [0..1]
isDeceased Boolean Used to identify if the person being described is alive or dead. If this property is absent or set to false but the dateOfDeath property is set, then the consuming system should interpret that as the person being deceased. [0..1]
dateOfDeath Date The date of death. The presence of this property means that the person being described is known to be deceased. In scenarios where this conflicts with the isDeceased flag, this property takes precedence and consuming systems should interpret that as the person being deceased. [0..1]
primaryEmail OptionallyTypedEmail The primary email address of a subject. [0..1]
otherEmails TypedEmail Additional email addresses of a subject. [0..*]
primaryPhone OptionallyTypedPhone A primary (preferred) phone number. In contexts where only one phone number is specified, the term phone is an alias for this term. [0..1]
otherPhones TypedPhone A list of other phone numbers [0..*]
primaryAddress OptionallyTypedAddress The primary address. [0..1]
otherAddresses TypedAddress A list of other addresses. [0..*]
agents Agents A container used that define relationships between an Edu-API person and other Edu-API Persons who can represent or act on behalf of them. This includes a way to describe the type of relationship between the two people. E.g. Parents or Guardians often serve as the agent for a student. [0..*]
dateLastModified DateTimeZ A timestamp describing when this record was last modified. [0..1]
recordStatus RecordStatusTypeEnum The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so. [1]
extensions personExtensions A container for extension objects. [0..1]

A.4.2 PersonName

The set of parts that are used to define an Edu-API persons name, this design attempts to account for international naming needs.

Property Type Description Multiplicity
familyName String Family name. In the western world, often referred to as the 'last name' of a person. [0..1]
givenName String Given name. In the western world, often referred to as the 'first name' of a person. [0..1]
additionalName String Additional name. Includes what is often referred to as 'middle name' in the western world. [0..1]
patronymicName String Patronymic name. [0..1]
honorificPrefix String Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr'). [0..1]
honorificSuffix String Honorific suffix(es) following a person's name (e.g. 'M.D, PhD'). [0..1]
familyNamePrefix String Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer'). [0..1]

A.4.3 Agents

A container with the set of Edu-API persons that can act on behalf of the person in question. This includes description of the type of relationship exists and the context it is applicable in.

Property Type Description Multiplicity
agentType AgentTypeEnum Enumeration A description of the relationship between the agent and the person the are an agent for. This is based on an extensible enumerated vocabulary. [1]
person PersonGUIDRef A reference to an Edu-API person. This represents the person acting in an agency capacity. [1]
description LanguageTypedString A set of descriptions of the associated entity with a designated language for each entry. [0..*]
domain String The context within which the person can act as an agent in. [0..1]

A.5 Contact Details & Location

A.5.1 Location

A container for describing the location an entity takes place at.

Property Type Description Multiplicity
identifier Identifier An identifier. [0..1]
description LanguageTypedString A set of descriptions of the associated entity with a designated language for each entry. [0..*]
geoLocation GeoCoordinates The identification of the geographic location entity using a set of longitude and latitude coordinates. [0..1]

A.5.2 GeoCoordinates

The geographic coordinates of a location.

Property Type Description Multiplicity
latitude Float The latitude of the location [WGS-84]. [1]
longitude Float The longitude of the location [WGS-84]. [1]

A.5.3 Address

Property Type Description Multiplicity
addressCountry String A country. [0..1]
addressCountryCode CountryCode A country code. The value must be a ISO 3166-1 alpha-2 country code [ISO3166-1]. [0..1]
addressRegion String A region within the country. [0..1]
addressLocality String A locality within the region. [0..1]
streetAddress String A street address within the locality. [0..1]
postOfficeBoxNumber String A post office box number for PO box addresses. [0..1]
postalCode String A postal code. [0..1]
geo GeoCoordinates The geographic coordinates of the location. [0..1]

A.5.4 TypedAddress

A typed address.

Property Type Description Multiplicity
addressType AddressTypeEnum Enumeration The type of address. This is based on an extensible enumerated vocabulary. [1]
addressCountry String A country. [0..1]
addressCountryCode CountryCode A country code. The value must be a ISO 3166-1 alpha-2 country code [ISO3166-1]. [0..1]
addressRegion String A region within the country. [0..1]
addressLocality String A locality within the region. [0..1]
streetAddress String A street address within the locality. [0..1]
postOfficeBoxNumber String A post office box number for PO box addresses. [0..1]
postalCode String A postal code. [0..1]
geo GeoCoordinates The geographic coordinates of the location. [0..1]

A.5.5 OptionallyTypedAddress

A optionally typed address.

Property Type Description Multiplicity
addressType AddressTypeEnum Enumeration The type of address. This is based on an extensible enumerated vocabulary. [0..1]
addressCountry String A country. [0..1]
addressCountryCode CountryCode A country code. The value must be a ISO 3166-1 alpha-2 country code [ISO3166-1]. [0..1]
addressRegion String A region within the country. [0..1]
addressLocality String A locality within the region. [0..1]
streetAddress String A street address within the locality. [0..1]
postOfficeBoxNumber String A post office box number for PO box addresses. [0..1]
postalCode String A postal code. [0..1]
geo GeoCoordinates The geographic coordinates of the location. [0..1]

A.5.6 TypedPhone

A typed phone number.

Property Type Description Multiplicity
phoneType PhoneTypeEnum Enumeration The type of phone number. This is based on an extensible enumerated vocabulary. [1]
phone PhoneNumber A phone number. [1]

A.5.7 OptionallyTypedPhone

An optionally typed phone number.

Property Type Description Multiplicity
phoneType PhoneTypeEnum Enumeration The type of address. This is based on an extensible enumerated vocabulary. [0..1]
phone PhoneNumber A phone number. [1]

A.5.8 TypedEmail

A typed email address.

Property Type Description Multiplicity
emailType EmailTypeEnum Enumeration The type of email address. This is based on an extensible enumerated vocabulary. [1]
email EmailAddress An email address. [1]

A.5.9 OptionallyTypedEmail

An optionally typed email address.

Property Type Description Multiplicity
emailType EmailTypeEnum Enumeration The type of email address. [0..1]
email EmailAddress An email address. [1]

A.5.10 educationOfferingExtensions

Extension properties related to education offerings

Property Type Description Multiplicity
This class can be extended with additional properties.

A.5.11 educationExtensions

Extension properties related to education templates

Property Type Description Multiplicity
This class can be extended with additional properties.

A.5.12 enrollmentExtensions

Extension properties related to enrollments

Property Type Description Multiplicity
This class can be extended with additional properties.

A.5.13 personExtensions

Extension properties related to Edu-API persons

Property Type Description Multiplicity
This class can be extended with additional properties.

A.5.14 affiliationExtensions

Extension properties related to affiliations

Property Type Description Multiplicity
This class can be extended with additional properties.

A.5.15 organizationExtensions

Extension properties related to education organizations

Property Type Description Multiplicity
This class can be extended with additional properties.

A.5.16 academicSessionExtensions

Extension properties related to education academic sessions

Property Type Description Multiplicity
This class can be extended with additional properties.

A.6 Organizations

A.6.1 Organization

An administrative unit, it can be a division or subdivision of an institution or the institution itself. Examples: College of Arts and Letters, English Department.

Property Type Description Multiplicity
sourcedId GUID The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD). [1]
recordLanguage LanguageCode The primary language used in the described entity. [1]
primaryCode IdentifierEntry The primary human readable identifier for the entity. This will often take the form of a human readable code as defined by the institution or region [0..1]
otherCodes IdentifierEntry Human readable codes/identifiers for the entity being described [0..*]
name LanguageTypedString A name for the associated entity with a designated language for each entry. [1..*]
description LanguageTypedString A set of descriptions of the associated entity with a designated language for each entry. [0..*]
organizationType String The type of Organization. [1]
parent OrganizationGUIDRef A reference to a parent organization. [0..1]
children OrganizationGUIDRef References to child organizations. [0..*]
primaryAddress OptionallyTypedAddress The primary address. [0..1]
otherAddresses TypedAddress A list of other addresses. [0..*]
dateLastModified DateTimeZ A timestamp describing when this record was last modified. [0..1]
recordStatus RecordStatusTypeEnum The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so. [1]
extensions organizationExtensions A container for extension objects. [0..1]

A.7 Academic Sessions

A.7.1 AcademicSession

A calendar period during which a school or institution schedules classes, offerings, or other units of learning for availability.

Property Type Description Multiplicity
sourcedId GUID The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD). [1]
recordLanguage LanguageCode The primary language used in the described entity. [1]
primaryCode IdentifierEntry The primary human readable identifier for the entity. This will often take the form of a human readable code as defined by the institution or region [0..1]
otherCodes IdentifierEntry Human readable codes/identifiers for the entity being described [0..*]
sessionType AcademicSessionTypeEnum Enumeration The type of academic session. This is based upon an enumerated vocabulary. [0..1]
title LanguageTypedString A set of titles for the associated entity with a designated language for each entry. [0..*]
startDate DateTimeZ The start date of the associated event. [0..1]
endDate DateTimeZ The end date of the associated event. [0..1]
parent AcademicSessionGUIDRef A reference to another Edu-API Academic Session that serves as a parent AcademicSession. [0..1]
children AcademicSessionGUIDRef A reference to another Edu-API Academic Session that serves as a Child AcademicSessions. [0..*]
recordStatus RecordStatusTypeEnum The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so. [1]
dateLastModified DateTimeZ A timestamp describing when this record was last modified. [0..1]
extensions academicSessionExtensions A container for extension objects. [0..1]

A.7.2 IdentifierEntry

A container to transmit additional needed identifiers

Property Type Description Multiplicity
identifier Identifier An identifier. [1]
identifierType IdentifierTypeEnum Enumeration The identifier type. [1]

A.8 Affiliation

A.8.1 Affiliation

A container that describes an Edu-API persons relationships to organizations; including their role(s) and the time frames those roles are in place.

Property Type Description Multiplicity
sourcedId GUID The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD). [1]
person PersonGUIDRef A reference to an Edu-API Person. [1]
organization OrganizationGUIDRef A reference to an Edu-API Organization. [1]
role RoleTypeEnum Enumeration The role of the associated person in the given context. [1]
startDate DateTimeZ The start date of the associated event. [0..1]
endDate DateTimeZ The end date of the associated event. [0..1]
affiliationStatus AffiliationStatusEnum Enumeration The status of the person's affiliation with the organization. This is based upon an enumerated vocabulary [1]
recordStatus RecordStatusTypeEnum The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so. [1]
dateLastModified DateTimeZ A timestamp describing when this record was last modified. [0..1]
extensions affiliationExtensions A container for extension objects. [0..*]

A.9 Enrollment

A.9.1 Enrollment

The contextualized joining of a person and a CourseOffering, CollectionOffering or ComponentOffering.

Property Type Description Multiplicity
sourcedId GUID The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD). [1]
recordLanguage LanguageCode The primary language used in the described entity. [1]
isActive Boolean Used to identify if the enrollment described in this entity is currently active or inactive. A value of true indicates that the enrollment is active, a value of false indicates the enrollment is inactive. To be used in conjunction with enrollmentStatus when more details about the enrollment state are required. See the best practices guide for guidance on how to use these properties in tandem. [1]
enrollmentStatus EnrollmentStatusEnum Enumeration The status of this enrollment. [1]
person PersonGUIDRef A reference to an Edu-API Person. [1]
role RoleTypeEnum Enumeration The role of the associated person in the given context. [1]
startDate DateTimeZ The start date of the associated event. [0..1]
endDate DateTimeZ The end date of the associated event. [0..1]
educationOffering EducationOfferingGUIDRef A reference to an Edu-API offering entity. This is the instantiated Education the person is being enrolled on. [1]
offeringType EducationOfferingTypeEnum Enumeration The type of education being offered. This is based on an enumerated vocabulary. [1]
recordStatus RecordStatusTypeEnum The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so. [1]
dateLastModified DateTimeZ A timestamp describing when this record was last modified. [0..1]
extensions enrollmentExtensions A container for extension objects. [0..1]

A.9.2 RoleEnablement

An array to store associated dates for a entity. Specifically, additional important date and time offsets surrounding when specific roles may be associated with the course offering before or after the official start and end dates. These dates are meant to be considered additional metadata about the course offering and applied independent of the startDate and endDate. They are not intended to be used to as replacements.

Property Type Description Multiplicity
role RoleTypeEnum Enumeration The role of the associated person in the given context. [1]
startDate DateTimeZ The start date of the associated event. [0..1]
endDate DateTimeZ The end date of the associated event. [0..1]

A.10 Enumerations

Below is the set of enumerated vocabularies in the Edu-API specifications. Systems are not required to support all options within the value sets. Suppliers and institutions should consult their partners to determine which values are supported. Edu-API defines 2 styles of enumerations:

  • Enum: a standard enumeration with a fixed vocabulary
  • EnumExt: an enumeration with an extensible vocabulary. The pattern for extending an EnumExt is to precede the new vocabulary term with the string 'ext:'. For example, if you were adding the term 'post graduate' to the vocabulary for educationLevelEnum you would call it 'ext:postGraduate'

A.10.1 EducationOfferingTypeEnum Enumeration

The set of permitted values for educationOfferingType.

Term Description
collection A collection of courses or other learning units, used to group them into a coherent whole for enrollment, administrative, or other purposes. A Program is one example of a Course Collection.
course Relates a course to one or more delivery scenarios.
component A subsection of a courseOffering. It may be a lesson or separately enrollable unit within a courseOffering. For example, Biology 101 may consist of a Lecture component offering and a Lab component offering
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.2 AffiliationStatusEnum Enumeration

The set of permitted values for affiliationStatus.

Term Description
active The affiliation is active.
inactive The affiliation is inactive.
auditing The affiliation is under audit.
withdrawn The affiliation has been withdrawn.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.3 AgentTypeEnum Enumeration

The set of permitted values for agentType.

Term Description
parent Mother or father of the user.
guardian Guardian of the user and NOT the Mother or Father. May also be a Relative.
emergencyContact Any person designated as a contact in case of emergencies.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.4 AddressTypeEnum Enumeration

The set of permitted values for addressType.

Term Description
visitingAddress A visiting address.
mailingAddress A mailing address.
permanentAddress A permanent address.
deliveryAddress A delivery address.
billingAddress A billing address.
homeAddress A home address.
workAddress A work address.
formerAddress A former (previous) address.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.5 PhoneTypeEnum Enumeration

The set of permitted values for phoneType.

Term Description
homePhone A home phone number.
workPhone A work phone number.
icePhone A phone number to use in case of emergency.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.6 EmailTypeEnum Enumeration

The set of permitted values for emailType.

Term Description
homeEmail A home email address.
workEmail A work email address.
iceEmail An email address to use in case of emergency.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.7 EducationLevelEnum Enumeration

The set of permitted values for edcucationLevel.

Term Description
graduate A course of study that takes place after the award of an undergraduate academic degree.
undergraduate A course of study that awards a bachelor's or equivelant degree.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.8 CreditTypeEnum Enumeration

The set of permitted values for creditType.

Term Description
credit The course of study awards credit towards a designated achievement or degree.
nonCredit The course of study does not award credit towards a designated achievement or degree.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.9 CollectionTypeEnum Enumeration

The set of permitted values for collectionType.

Term Description
program An organized and defined set of learning activities that enable a student to develop knowledge. A program typically leads to a degree or some other type of accreditation.
generalEducation A grouping of educational units or coursework that represent an general education.
requiredCollection A grouping of educational units or coursework that identifies the contained contents as being needed for completion.
electiveCollection A grouping of educational units or coursework taken at the students discretion.
capstoneCollection The apogee or completion of a students coursework
majorCollection A grouping of educational units or coursework that upon completion award a Major in that line of study
minorCollection A grouping of educational units or coursework that upon completion award a Minor in that line of study
programSpecialization A grouping of educational units or coursework that
nonDegreeCollection A set of educational units that do not contribute towards a degree.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.10 CourseTypeEnum Enumeration

The set of permitted values for courseType.

Term Description
standard A normal or general type of course
honors An education that offers a deeper, or more complex comparable learning than experiences typically found at institutions of higher education
research A course that is focused on investigation of a specific topic.
independentStudy A course undertaken by an individual student with little to no supervision.
practicum A course that is designed to give students supervised practical application of a previously or concurrently studied field or theory.
internship A course that offers real world work experience in a professional setting.
studyAbroad A course undertaken in a foreign country
capstone The culminating and usually integrative experience of an educational program
clinical A nursing course that includes clinical experience
correspondence A course of study in which student and teachers communicate by mail.
fieldExperience A course that provides an opportunity to apply knowledge gained in the classroom with supervised practice in the field
seminar A small, discussion-based course.
thesis A independent research course in which you conduct your thesis research with guidance.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.11 ComponentTypeEnum Enumeration

The set of permitted values for componentType.

Term Description
individualizedInstruction tbd
integratedLectureLab A component that combines a lecture and a lab into one offering.
laboratory A component portion that takes place in a laboratory.
lecture A component talk to an audience.
practicum A component that is designed to give students supervised practical application of a previously or concurrently studied field or theory.
recitation A component that provides time for the application of conceptual knowledge and extension of instruction that occurs in lecture through problem-solving or discussion.
research A component that is focused on investigation of a specific topic.
seminar A small, discussion-based component.
independentStudy A component undertaken by an individual student with little to no supervision
fieldExperience A component that provides an opportunity to apply knowledge gained in the classroom with supervised practice in the field
exam A component that is used to represent students who are taking an exam.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.12 OfferingFormatEnum Enumeration

The set of permitted values for offeringFormat.

Term Description
online The offering is given completely in an online/internet based mode.
blended The offering has a combination of online and in person instruction.
onGround The offering is given completely in person in a physical space.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.13 RegistrationStatusEnum Enumeration

The set of permitted values for registrationStatus.

Term Description
open Registration is open and accepting new requests.
closed Registration is closed and no longer accepting new requests.
pending Registration has been requested but that request is still pending.
waitlist The offering is full and the person has been put on a waitlist for registration.

A.10.14 EnrollmentStatusEnum Enumeration

The set of permitted values for enrollmentStatus.

Term Description
onLeave The person has an excused absence from the education.
withdrawn The person has made a decision to leave the education prior to completion.
accepted The person has been offered a place in the education.
pending The person has requested admission to an education but that request has not yet been processed.
cancelled The person has turned down the offered seat before the education stats.
registered The person has been accepted into an education and has selected offerings to enroll on.
revoked The organization has withdrawn a registration for a person.
Interruption The person is taking a short break from their education.
finished The person has passed examination and no more activities are expected.
withdrawnFailing The person has made a decision to leave the education prior to completion but after the completion of the add drop period while having a currently failing grade. Withdrawn will often result in a record in a students official transcript.
withdrawnPassing The person has made a decision to leave the education prior to completion but after the completion of the add drop period while having a currently passing grade. Withdrawn will often result in a record in a students official transcript.
dropped The person has left the education within the allotted add/drop period. This will often not result in a record on the students official transcript.
suspended The organization has paused the persons seat in the education.
enrolled The person has accepted the seat and has been activated in the education.
declined Following review, the organization did not offer a seat in the education to the person.
deferred A person has been offered a spot in an education but has chosen to delay their start date. A person with a deferred enrollment will be issued a new enrollment at the time of their actual start.
onHold The organization has placed a block on the person's enrollment based on procedural requirements. e.g. They have not completed the required prerequisite material.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.15 IdentifierTypeEnum Enumeration

Note
TBD - split into subgroups per entity type
Term Description
systemId Identifier assigned to an entity in context of a specific system.
productId Identifier assigned to a specific product.
userName the name of a user.
accountId Identifier assigned to a specific account.
emailAddress An email address.
nationalIdentityNumber Identifier assigned by the governement of the person. e.g. a social security number in the USA
isbn International Standard Book Number that serve as product identifiers for Books.
issn International Standard Book Number that serve as product identifiers for periodicals.
lisSourcedId An entities sourcedId in Learning Information System (LIS) data exchanges.
oneRosterSourcedId An entities sourcedId in OneRoster(OR) data exchanges.
sisSourcedId Student Information System Identifier.
ltiContextId Identifier for an entity in the context of an Learning Tools Interoperability(LTI) Launch.
ltiDeploymentId Identifier for a specific Learning Tools Interoperability(LTI) deployment of a tool.
ltiToolId Identifier of a tool in an Learning Tools Interoperability(LTI) integration.
ltiPlatformId Identifier of a platform in an Learning Tools Interoperability(LTI) integration.
ltiUserId Identifier of a user in an Learning Tools Interoperability(LTI) integration.
identifier Generic Identifier.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.16 PersonNameTypeEnum Enumeration

The set of permitted values for name types.

Term Description
legalName A legal name.
preferredName A preferred (lived) name.
phoneticName Phonetic pronunciation instructions for a name. Provided values MUST be valid to the syntax of the International Phonetic Alphabet [IPA].
aliasName A fictitious name, pseudonym or alias.
formerName A formerly used name. Includes birth name.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.17 GenderEnum Enumeration

The gender of this person. Other values than those defined may be given to capture the gender identity of this Person.

Term Description
male The male gender.
female The female gender.
unspecified The gender is unknown or unspecified.
other Another gender identity.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.18 RoleTypeEnum Enumeration

The set of permitted values for roleType.

Term Description
member A person belonging to the group in reference.
chair A person who presides/leads over a group.
staff An employee of the organization.
student A person who is studying at an organization.
administrator A person who oversees management of some aspect in an organization.
aide Someone who provides appropriate aid to the person but NOT also one of the other roles.
guardian Guardian of the user and NOT the Mother or Father. May also be a Relative.
parent Mother or father of the user.
proctor A person who oversees a student examination.
relative A relative of the user and NOT the Mother or Father. May also be the Guardian.
teacher A Teacher at organization e.g. School. May be used for enrollment.
advisor A person who offers students information pertaining to their degree, courses of study, and university regulations.
teachingAssistant A person who teaches or supports an educational offering but is not the instructor of record.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.19 AcademicSessionTypeEnum Enumeration

The set of permitted values used to describe the temporal boundaries of an education.

Term Description
gradingPeriod Denotes a period over which some grade/result is to be awarded.
semester Denotes the school year.
schoolYear Denotes a semester period. There are typically two semesters per schoolYear.
term Denotes a term period. Typically there are three terms per schoolYear.
studyPeriod Denotes a subdivision of an academic term.
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.10.20 RecordStatusTypeEnum Enumeration

The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.

Term Description
active The record is present and actively used in the system.
deleted The record has been, or will immediately be, removed from the upstream system; downstream systems can also remove this record as it won't be used again.
inactive The record is present, but not actively used in the system (it should not be removed, but also not used).

A.10.21 SynchronicityEnum Enumeration

The set of permitted values used to describe whether an education offering is taught in person, online, or via a hybrid, combined approach.

Term Description
hybrid
asynchronous
synchronous
This enumeration can be extended with new, proprietary terms. The new terms must start with the substring 'ext:'.

A.11 Primitive Types

The primitive types in this section are shared by all 1EdTech specifications.

Type Description
Boolean A boolean, expressed as true or false
Date An [ISO8601] calendar date using the syntax YYYY-MM-DD.
DateTime An [ISO8601] time using the syntax YYYY-MM-DDThh:mm:ss.
Float
Integer
Language A language code [BCP47].
Namespace A namespace data type for defining data from a context other than that as the default for the data model. This is used for importing other data models.
NonNegativeInteger
NormalizedString A String conforming to the normalizedString definition in [XMLSCHEMA-2].
PositiveInteger
String Character strings.

A.12 Derived Types

The derived types in this section are shared by all 1EdTech specifications.

Type Description
AcademicSessionGUIDRef A reference to an AcademicSession object that has an allocated sourcedId (GUID).
BaseTerm A term in an enumeration which serves as a common term for all other entries in this enumeration, and as such is less specific. The lexical constraints are the same as for Term.
CollectionOfferingGUIDRef A reference to an EducationCollectionOffering object that has an allocated sourcedId (GUID).
CollectionTemplateGUIDRef A reference to an EducationCollection object that has an allocated sourcedId (GUID).
ComponentTemplateGUIDRef A reference to an EducationComponent object that has an allocated sourcedId (GUID).
CountryCode A two-digit ISO 3166-1 alpha-2 country code [ISO3166-1].
CourseOfferingGUIDRef A reference to a CourseOffering object that has an allocated sourcedId (GUID).
CourseTemplateGUIDRef A reference to a Course object that has an allocated sourcedId (GUID).
DateTimeZ A DateTime with the trailing timezone specifier included, e.g. 2021-09-07T02:09:59+02:00
DateZ A Date with the trailing timezone specifier included, e.g. 2021-09-07T02:09:59+02:00
EducationOfferingGUIDRef A reference to a EducationCollectionOffering, CourseOffering or EducationComponentOffering object that has an allocated sourcedId (GUID).
EmailAddress A NormalizedString representing an email address.
GUID The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.
GUIDRef The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.
Identifier A NormalizedString that functions as an identifier.
LanguageCode A language code [BCP47].
NFCString A NormalizedString further normalized using Unicode Normalization Form C [UAX15].
OrganizationGUIDRef A reference to an Organization object that has an allocated sourcedId (GUID).
Percentage A percentage expression without fractions. One, two or three digits followed by the '%' character.
PersonGUIDRef A reference to a Person object that has an allocated sourcedId (GUID).
PhoneNumber A NormalizedString representing a phone number.
Reference An Identifier that functions as a reference to another entity by means of spelling out the identifier of the referenced entity.
Term A term in an enumeration. The lexical constraints are the same as for Token.
UUID An Identifier with the lexical restrictions of a UUID [RFC4122]
UUIDRef A Reference using a UUID.

A.13 GUID References

Set of classes that allow references to Edu-API Objects via their GUIDs

A.13.1 PersonNameEntry

Property Type Description Multiplicity
nameType PersonNameTypeEnum Enumeration The type of name described in this entry. [1]
familyName String Family name. In the western world, often referred to as the 'last name' of a person. [0..1]
givenName String Given name. In the western world, often referred to as the 'first name' of a person. [0..1]
additionalName String Additional name. Includes what is often referred to as 'middle name' in the western world. [0..1]
patronymicName String Patronymic name. [0..1]
honorificPrefix String Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr'). [0..1]
honorificSuffix String Honorific suffix(es) following a person's name (e.g. 'M.D, PhD'). [0..1]
familyNamePrefix String Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer'). [0..1]

A.14 Language

A.14.1 LanguageTypedString

A String with an associated language code.

Property Type Description Multiplicity
recordLanguage LanguageCode The primary language used in the described entity. [1]
value String [1]

A.15 Service Definitions

A.15.1 Imsx_StatusInfo

This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.

Property Type Description Multiplicity
imsx_codeMajor Imsx_CodeMajor Enumeration The code major value (from the corresponding enumerated vocabulary). [1]
imsx_severity Imsx_Severity Enumeration The severity value (from the corresponding enumerated vocabulary). [1]
imsx_description String A human readable description supplied by the entity creating the status code information. [0..1]
imsx_codeMinor Imsx_CodeMinor The set of reported code minor status codes. [0..1]

A.15.2 Imsx_CodeMajor Enumeration

This is the set of primary status report values i.e. the major code assigned to the status block. This is used in conjunction with the 'Severity' structure in the status object.

Term Description
failure Denotes that the transaction request has failed. The detailed reason will be reported in the accompanying 'codeMinor' fields.
processing Denotes that the request is being processed at the destination or there has been a local transmission failure. This value is used in asynchronous services.
success Denotes that the request has been successfully completed. If the associated 'severity' value is 'warning' then the request has been partially successful i.e. best effort by the service provider. Other parts of the status information may provide more insight into a partial success response.
unsupported Denotes that the service provider does not support the requested operation. This is the required default response for an unsupported operation by an implementation.

A.15.3 Imsx_Severity Enumeration

This is the context for the status report values. This is used in conjunction with the 'CodeMajor' structure in the status object.

Term Description
error A catastrophic error has occurred in processing the request and so the request was not completed (the Service Provider may not even have received the request).
status The request has been completed and a response was received from the Service Provider.
warning The request has only been partially completed. For an asynchronous service a further response should be expected.

A.15.4 Imsx_CodeMinor

This is the container for the set of code minor status codes reported in the responses from the Service Provider.

Property Type Description Multiplicity
imsx_codeMinorField Imsx_CodeMinorField Each reported code minor status code. [1..*]

A.15.5 Imsx_CodeMinorField

This is the container for a single code minor status code.

Property Type Description Multiplicity
imsx_codeMinorFieldName NormalizedString This should contain the identity of the system that has produced the code minor status code report. [1]
imsx_codeMinorFieldValue Imsx_CodeMinorFieldValue Enumeration The code minor status code (this is a value from the corresponding enumerated vocabulary). [1]

A.15.6 Imsx_CodeMinorFieldValue Enumeration

This is the set of codeMinor status codes that are used to provide further insight into the completion status of the end-to-end transaction i.e. this should be used to provide more information than would be supplied by an HTTP code.

Term Description
forbidden This is used to indicate that the server can be reached and process the request but refuses to take any further action. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '403'.
fullsuccess The request has been fully and successfully implemented by the service provider. For a REST binding this will have an HTTP code of '200' for a successful search request.
internal_server_error This should be used only if there is catastrophic error and there is not a more appropriate code. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '500'.
invalid_data This error condition may occur if a JSON request/response body contains well-formed (i.e. syntactically correct), but semantically erroneous, JSON instructions. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and a HTTP code of '422'.
invalid_query_parameter An invalid data query parameter field was supplied and the query could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '400'.
misdirected_request This is used to indicate that the request was made with a protocol that is not supported by the server. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '421'.
not_acceptable This is used to indicate that the server cannot provide a response with a Content-Type that matches any of the content types in the request Accept header. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '406'.
not_allowed This is used to indicate that the server does not allow the HTTP method. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '405'.
not_found This is used to indicate that the server did not find the resource. This would be accompanied by the 'codeMajor/severity' values of 'failure/status' and for a REST binding a HTTP code of '404'.
not_modified This is used to indicate that the server did not modify the resource. This would be accompanied by the 'codeMajor/severity' values of 'success/status' and for a REST binding a HTTP code of '304'.
server_busy The server is receiving too many requests. Retry at a later time. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '429'.
unauthorizedrequest The request was not correctly authorised. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '401'.
unknown Any other error occurred. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code corresponding to the error.

B. Service Models

B.1 Edu-API REST Service Model

Below are definitions of the REST endpoints available in Edu-API. Edu-API defines endpoints for each first class object that allow consumers to retrieve all or one of said object.

B.1.1 EducationManagement

Operations relating to the Abstract Education Resources

B.1.1.1 getEducationTemplates

Read all education templates for an institution

Request

GET /ims/eduapi/base/v1p0/educationTemplates?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Education[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.2 getEducationTemplatesById

Read a collection template with a specific id

Request

GET /ims/eduapi/base/v1p0/educationTemplates/{id}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the Education Required
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Education Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
404 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.3 getEducationOfferings

Read all education templates for an institution

Request

GET /ims/eduapi/base/v1p0/educationOfferings?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json EducationOffering[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.4 getEducationsOfferingById

Read a collection template with a specific id

Request

GET /ims/eduapi/base/v1p0/educationsOfferings/{id}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the Education Required
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json EducationOffering Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
404 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.5 getAllCollectionTemplates

Read all collection templates for an institution

Request

GET /ims/eduapi/base/v1p0/collectionTemplates?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json CollectionTemplate[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.6 getCollectionTemplateById

Read a collection template with a specific id

Request

GET /ims/eduapi/base/v1p0/collectionTemplates/{id}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the CollectionTemplate Required
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json CollectionTemplate Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
404 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.7 getAllCourseTemplates

Read all course templates for an institution

Request

GET /ims/eduapi/base/v1p0/courseTemplates?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json CourseTemplate[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.8 getCourseTemplateById

Read a course template with a specific id

Request

GET /ims/eduapi/base/v1p0/courseTemplates/{id}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the CourseTemplate Required
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json CourseTemplate Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
404 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.9 getAllComponentTemplates

Read all component templates for an institution

Request

GET /ims/eduapi/base/v1p0/componentTemplates?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json ComponentTemplate[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.10 getComponentTemplateById

Read a component with a specific id

Request

GET /ims/eduapi/base/v1p0/componentTemplates/{id}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the ComponentTemplate Required
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json ComponentTemplate Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
404 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.11 getAllCollectionOfferings

Read all collectionOfferings for an institution

Request

GET /ims/eduapi/base/v1p0/collectionOfferings?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json CollectionOffering[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.12 getCollectionOfferingById

Read collectionOffering with a specific Id

Request

GET /ims/eduapi/base/v1p0/collectionOfferings/{id}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the CollectionOffering Required
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json CollectionOffering Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
404 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.13 getAllCourseOfferings

Read all courseOfferings for an institution

Request

GET /ims/eduapi/base/v1p0/courseOfferings?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json CourseOffering[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.14 getCourseOfferingById

Read courseOffering with a specific Id

Request

GET /ims/eduapi/base/v1p0/courseOfferings/{id}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the CourseOffering Required
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json CourseOffering Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
404 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.15 getAllComponentOfferings

Read all ComponentOfferings for an institution

Request

GET /ims/eduapi/base/v1p0/componentOfferings?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json ComponentOffering[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.16 getComponentOfferingById

Read ComponentOffering with a specific Id

Request

GET /ims/eduapi/base/v1p0/componentOfferings/{id}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the ComponentOffering Required
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json ComponentOffering Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
404 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.17 getAllComponentOfferingsBySession

Read all ComponentOfferings in a specified academic session

Request

GET /ims/eduapi/base/v1p0/academicSessions/{id}/componentOfferings?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the AcademicSession Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json ComponentOffering[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.18 getAllCourseOfferingsBySession

Read all CourseOfferings in a specified academic session

Request

GET /ims/eduapi/base/v1p0/academicSessions/{id}/courseOfferings?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the AcademicSession Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json CourseOffering[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.19 getAllCollectionOfferingsBySession

Read all CollectionOfferings in a specified academic session

Request

GET /ims/eduapi/base/v1p0/academicSessions/{id}/collectionOfferings?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the AcademicSession Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json CollectionOffering[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.20 getCollectionOfferingsForStudent

Read all collectionOfferings for a student

Request

GET /ims/eduapi/base/v1p0/students/{id}/collectionOfferings?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the Person representing the student Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json CollectionOffering[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.21 getCollectionOfferingsForStaff

Read all collectionOfferings for a staff member

Request

GET /ims/eduapi/base/v1p0/staff/{id}/collectionOfferings?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the Person representing the staff member Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json CollectionOffering[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.22 getComponentOfferingsForStudent

Read all componentOfferings for a student

Request

GET /ims/eduapi/base/v1p0/students/{id}/componentOfferings?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the Person representing the student Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json ComponentOffering[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.1.23 getComponentOfferingsForStaff

Read all componentOfferings for a staff member

Request

GET /ims/eduapi/base/v1p0/staff/{id}/componentOfferings?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the Person representing the staff member Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json ComponentOffering[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required

B.1.2 AcademicSessionManagement

Operations relating to AcademicSessions

B.1.2.1 getAllAcademicSessions

Read all AcademicSessions for an institution

Request

GET /ims/eduapi/base/v1p0/academicSessions?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json AcademicSession[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.2.2 getAcademicSessionById

Read an AcademicSession with a specific id

Request

GET /ims/eduapi/base/v1p0/academicSessions/{id}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the AcademicSession Required
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json AcademicSession Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
404 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required

B.1.3 OrganizationManagement

Operations relating to Organizations

B.1.3.1 getAllOrganizations

Read all Organizations for an institution

Request

GET /ims/eduapi/base/v1p0/organizations?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Organization[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.3.2 getOrganizationById

Read Organization with a specific Id

Request

GET /ims/eduapi/base/v1p0/organizations/{id}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the Organization Required
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Organization Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
404 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.3.3 getOrganizationsForStaff

Read all organizations associated with a staff member

Request

GET /ims/eduapi/base/v1p0/staff/{id}/organizations?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the Person representing the staff member Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Organization[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.3.4 getOrganizationsForStudent

Read all organizations associated with a student

Request

GET /ims/eduapi/base/v1p0/students/{id}/organizations?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the Person representing the student Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Organization[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required

B.1.4 PersonManagement

Operations relating to Persons

B.1.4.1 getAllPersons

Read all Persons for an institution

Request

GET /ims/eduapi/base/v1p0/persons?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Person[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.4.2 getPersonById

Read Person with a specific id

Request

GET /ims/eduapi/base/v1p0/persons/{id}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the Person Required
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Person Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
404 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.4.3 getAllStaff

Read all persons with role of staff

Request

GET /ims/eduapi/base/v1p0/staff?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Person[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.4.4 getAllStudents

Read all persons with a role of student

Request

GET /ims/eduapi/base/v1p0/students?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Person[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.4.5 getAllStudentsForCollectionOffering

Read all students for a collectionOffering

Request

GET /ims/eduapi/base/v1p0/collectionOfferings/{id}/students?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the CollectionOffering Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Person[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.4.6 getAllStaffForCollectionOffering

Read all staff for a collectionOffering

Request

GET /ims/eduapi/base/v1p0/collectionOfferings/{id}/staff?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the CollectionOffering Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Person[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.4.7 getAllStudentsForCourseOffering

Read all students for a courseOffering

Request

GET /ims/eduapi/base/v1p0/courseOfferings/{id}/students?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the CourseOffering Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Person[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.4.8 getAllStaffForCourseOffering

Read all staff for a courseOffering

Request

GET /ims/eduapi/base/v1p0/courseOfferings/{id}/staff?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the CourseOffering Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Person[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.4.9 getAllStaffForOrganization

Read all staff members of an org

Request

GET /ims/eduapi/base/v1p0/organizations/{id}/staff?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the organization Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Person[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.4.10 getAllStudentsForOrganization

Read all students of an organization

Request

GET /ims/eduapi/base/v1p0/organizations/{id}/students?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the Organization Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Person[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.4.11 getAllStudentsForComponentOffering

Read all students for a componentOffering

Request

GET /ims/eduapi/base/v1p0/componentOfferings/{id}/students?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the ComponentOffering Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Person[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.4.12 getAllStaffForComponentOffering

Read all students for a componentOffering

Request

GET /ims/eduapi/base/v1p0/componentOfferings/{id}/staff?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the ComponentOffering Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Person[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required

B.1.5 EnrollmentManagement

Operations relating to Enrollments

B.1.5.1 getAllEnrollments

Read all Enrollments for an institution

Request

GET /ims/eduapi/base/v1p0/enrollments?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Enrollment[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.5.2 getEnrollmentById

Read Enrollment with a specific id

Request

GET /ims/eduapi/base/v1p0/enrollments/{id}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the Enrollment Required
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Enrollment Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
404 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.5.3 getAllEnrollmentsForCourseOffering

Read all enrollments for a courseOffering

Request

GET /ims/eduapi/base/v1p0/courseOfferings/{id}/enrollments?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the CourseOffering Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Enrollment[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.5.4 getAllEnrollmentsForCollectionOffering

Read all enrollments for a courseOffering

Request

GET /ims/eduapi/base/v1p0/collectionOfferings/{id}/enrollments?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the CourseOffering Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Enrollment[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.5.5 getAllEnrollmentsForComponentOffering

Read all enrollments for a courseOffering

Request

GET /ims/eduapi/base/v1p0/componentOfferings/{id}/enrollments?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the CourseOffering Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Enrollment[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.5.6 getAllEnrollmentsBySession

Read all enrollments in a specified academic session

Request

GET /ims/eduapi/base/v1p0/academicSessions/{id}/enrollments?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the AcademicSession Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Enrollment[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
404 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required

B.1.6 AffiliationManagement

Operations relating to Affiliations

B.1.6.1 getAllAffiliations

Read all affiliations for an institution

Request

GET /ims/eduapi/base/v1p0/affiliations?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}

Request header, path, and query parameters
Parameter Parameter Type Description Required
limit
(query)
PositiveInteger Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100. Optional
offset
(query)
NonNegativeInteger Specifices the number of the first record to be supplied in the segmented response message. Default: 0. Optional
sort
(query)
String Specifies that the collection should be sorted on the given data field value. The form of ordering is implementation dependent if the 'orderBy' attribute is not used. Optional
orderBy
(query)
String Specifies whether the collection should be ordered ascending (asc) or descending (desc). Optional
filter
(query)
String Specifies that the returned collection should be filtered using the supplied criteria. Optional
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Affiliation[] Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required
B.1.6.2 getAffiliationById

Read Affiliation with a specific id

Request

GET /ims/eduapi/base/v1p0/affiliations/{id}

Request header, path, and query parameters
Parameter Parameter Type Description Required
id
(path)
GUIDRef The sourcedId of the Affiliation Required
Responses
Allowed response codes and content types
Status Code Content-Type Header Content Type Content Description Content Required
200 application/json Affiliation Required
400 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server cannot or will not process the request due to something that is perceived to be a client error. Required
401 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the request has not been applied because it lacks valid authentication credentials for the target resource. Required
403 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the server understood the request but refuses to fulfill it. The exact reason SHOULD be explained in the response payload. Required
404 application/json Imsx_StatusInfo As defined in [rfc9110], indicating that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Required
422 application/json Imsx_StatusInfo As defined in [rfc9110], used when the server cannot validate an incoming entity. Required
429 application/json Imsx_StatusInfo As defined in [rfc6585], indicating that the user has sent too many requests in a given amount of time ('rate limiting'). Required
500 application/json Imsx_StatusInfo As defined in [rfc9110]. Implementations SHOULD avoid using this error code - use only if there is catastrophic error and there is not a more appropriate code. Required
DEFAULT application/json Imsx_StatusInfo The request was invalid or cannot be served. The exact error SHOULD be explained in the response payload. Required

Below are definitions of the endpoints available in Edu-API. Edu-API defines endpoints for each first class object that allow consumers to retrieve all or one of said object.

All of the paths MUST also contain, as the base of the path, excluding the host name, the string: /ims/eduapi/base/v1p0.

Edu-API Security & Privacy

The Edu-API specification aligns with the 1EdTech Security Framework and the 1EdTech Privacy Framework documents. For security, all REST implementations MUST support OAuth 2.0 client credentials grant. You can read about this further in the 1EdTech Security Framework Document

The Edu-API project group has chosen the "Information segregation via scopes" methodology as our methodology for maintaining data privacy regarding privacy for storage and exchange. You can read about this further in the 1EdTech Privacy Framework Document

The Edu-API MVP defines 2 scopes:

  • http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly;
  • http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly.privacy.

The operations that are controlled via each scope are further defined in the OpenAPI definitions below.

Edu-API Status Response Codes

In the set of service operations defined in this document and the corresponding OpenAPI definitions, the Edu-API community has defined a set of response codes for specific states that MUST be used. The group however recognize that other API states occur, and in that scenario systems SHOULD use other error codes in alignment with the semantics defined in [rfc9110].

C. Examples

C.1 JSON Payload Examples

Below is a set of JSON payload examples for all the 1st class entities in the Edu-API Data model.

C.1.1 Person Example

{
  "sourcedId": "----AB_",
  "otherIdentifiers": [
    {
      "identifier": "C_FA5BC_-",
      "identifierType": "systemId"
    },
    {
      "identifier": "2B6F-",
      "identifierType": "productId"
    }
  ],
  "recordLanguage": "hr-HR",
  "legalName": {
    "familyName": "...string...",
    "givenName": "...string...",
    "additionalName": "...string...",
    "patronymicName": "...string...",
    "honorificPrefix": "...string...",
    "honorificSuffix": "...string...",
    "familyNamePrefix": "...string..."
  },
  "formattedName": null,
  "otherNames": [
    {
      "nameType": "legalName",
      "familyName": "...string...",
      "givenName": "...string...",
      "additionalName": "...string...",
      "patronymicName": "...string...",
      "honorificPrefix": "...string...",
      "honorificSuffix": "...string...",
      "familyNamePrefix": "...string..."
    },
    {
      "nameType": "preferredName",
      "familyName": "...string...",
      "givenName": "...string...",
      "additionalName": "...string...",
      "patronymicName": "...string...",
      "honorificPrefix": "...string...",
      "honorificSuffix": "...string...",
      "familyNamePrefix": "...string..."
    }
  ],
  "gender": "male",
  "pronouns": [
    {
      "recordLanguage": "he-Hebr-IL",
      "value": "...string..."
    },
    {
      "recordLanguage": "ks",
      "value": "...string..."
    }
  ],
  "languagesSpoken": [
    "ca-ES",
    "ti-ER"
  ],
  "dateOfBirth": "2024-11-21",
  "placeOfBirth": "...string...",
  "countryOfBirth": "...string...",
  "isDeceased": true,
  "dateOfDeath": "2024-11-21",
  "primaryEmail": {
    "emailType": "homeEmail",
    "email": "kkviekk@example.org"
  },
  "otherEmails": [
    {
      "emailType": "homeEmail",
      "email": "irbddry@example.org"
    },
    {
      "emailType": "workEmail",
      "email": "licrb@example.org"
    }
  ],
  "primaryPhone": {
    "phoneType": "homePhone",
    "phone": "644824696"
  },
  "otherPhones": [
    {
      "phoneType": "homePhone",
      "phone": "51554"
    },
    {
      "phoneType": "workPhone",
      "phone": "386165"
    }
  ],
  "primaryAddress": {
    "addressType": "visitingAddress",
    "addressCountry": "...string...",
    "addressCountryCode": "001",
    "addressRegion": "...string...",
    "addressLocality": "...string...",
    "streetAddress": "...string...",
    "postOfficeBoxNumber": "...string...",
    "postalCode": "...string...",
    "geo": {
      "latitude": 0.5174463,
      "longitude": 0.15964925
    }
  },
  "otherAddresses": [
    {
      "addressType": "visitingAddress",
      "addressCountry": "...string...",
      "addressCountryCode": "GG",
      "addressRegion": "...string...",
      "addressLocality": "...string...",
      "streetAddress": "...string...",
      "postOfficeBoxNumber": "...string...",
      "postalCode": "...string...",
      "geo": {
        "latitude": 0.39984542,
        "longitude": 0.4658355
      }
    },
    {
      "addressType": "mailingAddress",
      "addressCountry": "...string...",
      "addressCountryCode": "MO",
      "addressRegion": "...string...",
      "addressLocality": "...string...",
      "streetAddress": "...string...",
      "postOfficeBoxNumber": "...string...",
      "postalCode": "...string...",
      "geo": {
        "latitude": 0.857381,
        "longitude": 0.5448523
      }
    }
  ],
  "agents": [
    {
      "agentType": "parent",
      "person": "E7F2-",
      "description": [
        {
          "recordLanguage": "sv-Latn-SE",
          "value": "...string..."
        },
        {
          "recordLanguage": "en-VI",
          "value": "...string..."
        }
      ],
      "domain": "...string..."
    },
    {
      "agentType": "guardian",
      "person": "_-1_47",
      "description": [
        {
          "recordLanguage": "ru-BY",
          "value": "...string..."
        },
        {
          "recordLanguage": "ce",
          "value": "...string..."
        }
      ],
      "domain": "...string..."
    }
  ],
  "dateLastModified": "2024-11-21T05:11:44+02:00",
  "recordStatus": "active"
}

C.1.2 Orgnaization Example

{
  "sourcedId": "---51_",
  "recordLanguage": "et-Latn-EE",
  "primaryCode": {
    "identifier": "AA-312FE",
    "identifierType": "systemId"
  },
  "otherCodes": [
    {
      "identifier": "-_A_-2_",
      "identifierType": "systemId"
    },
    {
      "identifier": "_D-74",
      "identifierType": "productId"
    }
  ],
  "name": [
    {
      "recordLanguage": "en-PG",
      "value": "...string..."
    },
    {
      "recordLanguage": "guz",
      "value": "...string..."
    }
  ],
  "description": [
    {
      "recordLanguage": "ro-Latn-RO",
      "value": "...string..."
    },
    {
      "recordLanguage": "mua",
      "value": "...string..."
    }
  ],
  "organizationType": "...string...",
  "parent": "4EA--4-",
  "children": [
    "DA31-",
    "E1--7B"
  ],
  "primaryAddress": {
    "addressType": "visitingAddress",
    "addressCountry": "...string...",
    "addressCountryCode": "BA",
    "addressRegion": "...string...",
    "addressLocality": "...string...",
    "streetAddress": "...string...",
    "postOfficeBoxNumber": "...string...",
    "postalCode": "...string...",
    "geo": {
      "latitude": 0.77342343,
      "longitude": 0.128932
    }
  },
  "otherAddresses": [
    {
      "addressType": "visitingAddress",
      "addressCountry": "...string...",
      "addressCountryCode": "XK",
      "addressRegion": "...string...",
      "addressLocality": "...string...",
      "streetAddress": "...string...",
      "postOfficeBoxNumber": "...string...",
      "postalCode": "...string...",
      "geo": {
        "latitude": 0.6639711,
        "longitude": 0.36506993
      }
    },
    {
      "addressType": "mailingAddress",
      "addressCountry": "...string...",
      "addressCountryCode": "AR",
      "addressRegion": "...string...",
      "addressLocality": "...string...",
      "streetAddress": "...string...",
      "postOfficeBoxNumber": "...string...",
      "postalCode": "...string...",
      "geo": {
        "latitude": 0.7742001,
        "longitude": 0.19998872
      }
    }
  ],
  "dateLastModified": "2024-11-21T05:11:44+02:00",
  "recordStatus": "active"
}

C.1.3 Academic Session Example

{
  "sourcedId": "-5-_F",
  "recordLanguage": "ku-Latn-TR",
  "primaryCode": {
    "identifier": "D2-2_1_95",
    "identifierType": "systemId"
  },
  "otherCodes": [
    {
      "identifier": "-FB_46_",
      "identifierType": "systemId"
    },
    {
      "identifier": "-_--B-FF",
      "identifierType": "productId"
    }
  ],
  "sessionType": "gradingPeriod",
  "title": [
    {
      "recordLanguage": "fr-CH",
      "value": "...string..."
    },
    {
      "recordLanguage": "he",
      "value": "...string..."
    }
  ],
  "startDate": "2024-11-21T05:11:44+02:00",
  "endDate": "2024-11-21T05:11:44+02:00",
  "parent": "4F-_E7E",
  "children": [
    "F-3-3399",
    "2__75E"
  ],
  "recordStatus": "active",
  "dateLastModified": "2024-11-21T05:11:44+02:00"
}

C.1.4 Enrollment Example

{
  "sourcedId": "-D---6_-D",
  "recordLanguage": "om",
  "isActive": true,
  "enrollmentStatus": "onLeave",
  "person": "_-2B-B",
  "role": "member",
  "startDate": "2024-11-21T05:11:44+02:00",
  "endDate": "2024-11-21T05:11:44+02:00",
  "educationOffering": "_-6--8",
  "offeringType": "collection",
  "recordStatus": "active",
  "dateLastModified": "2024-11-21T05:11:44+02:00"
}

C.1.5 Affilliation Example

{
  "sourcedId": "-6_8---",
  "person": "-AAA9_B",
  "organization": "BB_-1",
  "role": "member",
  "startDate": "2024-11-21T05:11:44+02:00",
  "endDate": "2024-11-21T05:11:44+02:00",
  "affiliationStatus": "active",
  "recordStatus": "active",
  "dateLastModified": "2024-11-21T05:11:44+02:00"
}

C.1.6 Template Example: Course Template

{
  "courseType": "standard",
  "parent": [
    "-_-_E5EEC",
    "--6---_-"
  ],
  "sourcedId": "__F2-D4",
  "recordLanguage": "en-SG",
  "title": [
    {
      "recordLanguage": "gl",
      "value": "...string..."
    },
    {
      "recordLanguage": "es-CU",
      "value": "...string..."
    }
  ],
  "description": [
    {
      "recordLanguage": "seh-MZ",
      "value": "...string..."
    },
    {
      "recordLanguage": "ar-IL",
      "value": "...string..."
    }
  ],
  "primaryCode": {
    "identifier": "-B4-5C-_",
    "identifierType": "systemId"
  },
  "otherCodes": [
    {
      "identifier": "__54B3",
      "identifierType": "systemId"
    },
    {
      "identifier": "B7651",
      "identifierType": "productId"
    }
  ],
  "organization": "4E-A-",
  "organizationCode": "...string...",
  "level": "graduate",
  "creditType": "credit",
  "gradingScheme": {
    "recordLanguage": "tzm-MA",
    "value": "...string..."
  },
  "teachingLanguage": "bs",
  "recordStatus": "active",
  "dateLastModified": "2024-11-21T05:11:44+02:00"
}

C.1.7 Offering Example: Course Offering

{
  "offeringType": "standard",
  "course": "--_D-8B_",
  "parent": [
    "16__C5E_",
    "1_7----_7"
  ],
  "sourcedId": "9_2--B",
  "recordLanguage": "sv-Latn-SE",
  "title": [
    {
      "recordLanguage": "en-AS",
      "value": "...string..."
    },
    {
      "recordLanguage": "cy-GB",
      "value": "...string..."
    }
  ],
  "description": [
    {
      "recordLanguage": "sa-IN",
      "value": "...string..."
    },
    {
      "recordLanguage": "be",
      "value": "...string..."
    }
  ],
  "primaryCode": {
    "identifier": "9AE-A",
    "identifierType": "systemId"
  },
  "otherCodes": [
    {
      "identifier": "_BC-3",
      "identifierType": "systemId"
    },
    {
      "identifier": "_76F--5_",
      "identifierType": "productId"
    }
  ],
  "locations": [
    {
      "identifier": "F3-1D-26",
      "description": [
        {
          "recordLanguage": "uk-UA",
          "value": "...string..."
        },
        {
          "recordLanguage": "mg-MG",
          "value": "...string..."
        }
      ],
      "geoLocation": {
        "latitude": 0.3753438,
        "longitude": 0.5188838
      }
    },
    {
      "identifier": "1AD-9A__",
      "description": [
        {
          "recordLanguage": "ar-IQ",
          "value": "...string..."
        },
        {
          "recordLanguage": "th-TH-u-nu-thai-x-lvariant-TH",
          "value": "...string..."
        }
      ],
      "geoLocation": {
        "latitude": 0.87297964,
        "longitude": 0.15522236
      }
    }
  ],
  "organization": "--_--4C",
  "academicSession": "68-1_B",
  "organizationCode": "...string...",
  "academicSessionCode": "...string...",
  "offeringFormat": "online",
  "paceOfStudy": null,
  "registrationStatus": "open",
  "startDate": "2024-11-21+02:00",
  "endDate": "2024-11-21+02:00",
  "teachingLanguage": "ca-FR",
  "maxNumberStudents": 0,
  "minNumberStudents": 0,
  "enrolledNumberStudents": 0,
  "pendingNumberStudents": 0,
  "roleEnablement": [
    {
      "role": "member",
      "startDate": "2024-11-21T05:11:44+02:00",
      "endDate": "2024-11-21T05:11:44+02:00"
    },
    {
      "role": "chair",
      "startDate": "2024-11-21T05:11:44+02:00",
      "endDate": "2024-11-21T05:11:44+02:00"
    }
  ],
  "recordStatus": "active",
  "dateLastModified": "2024-11-21T05:11:44+02:00",
  "synchronicity": "hybrid"
}

D. JSON Schema

D.1 Education

A description of an abstract education.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_education-jsonschema1.json",
  "title": "JSON Schema for the Education class.",
  "description": "A description of an abstract education.",
  "type": "object",
  "properties": {
    "sourcedId": {
      "description": "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
      "$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
      "type": "string"
    },
    "recordLanguage": {
      "description": "The primary language used in the described entity.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "title": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "description": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "primaryCode": {
      "$ref": "#/$defs/IdentifierEntry"
    },
    "otherCodes": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/IdentifierEntry"
      }
    },
    "organization": {
      "description": "A reference to an Edu-API Organization.",
      "$comment": "Origin: OrganizationGUIDRef (DerivedType); A reference to an `Organization` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "organizationCode": {
      "description": "A business code used to system might use to reference an organization",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "level": {
      "description": "The educational level that the entity is for. This is represented by an extensible enumerated vocabulary and commonly varies by institution and region.",
      "$comment": "Origin: EducationLevelEnum (EnumExt); The set of permitted values for `edcucationLevel`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "graduate",
            "undergraduate"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "creditType": {
      "description": "Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary.",
      "$comment": "Origin: CreditTypeEnum (EnumExt); The set of permitted values for `creditType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "credit",
            "nonCredit"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "gradingScheme": {
      "$ref": "#/$defs/LanguageTypedString"
    },
    "teachingLanguage": {
      "description": "The main language used to relay the content of the offering.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "recordStatus": {
      "description": "The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so.",
      "$comment": "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "inactive"
      ]
    },
    "dateLastModified": {
      "description": "A timestamp describing when this record was last modified.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "extensions": {
      "$ref": "#/$defs/educationExtensions"
    }
  },
  "required": [
    "sourcedId",
    "recordLanguage",
    "title",
    "description",
    "primaryCode",
    "organization",
    "level",
    "creditType",
    "gradingScheme",
    "recordStatus"
  ],
  "additionalProperties": false,
  "$defs": {
    "IdentifierEntry": {
      "description": "A container to transmit additional needed identifiers",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "identifierType": {
          "description": "The identifier type.",
          "$comment": "Origin: IdentifierTypeEnum (EnumExt)",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "systemId",
                "productId",
                "userName",
                "accountId",
                "emailAddress",
                "nationalIdentityNumber",
                "isbn",
                "issn",
                "lisSourcedId",
                "oneRosterSourcedId",
                "sisSourcedId",
                "ltiContextId",
                "ltiDeploymentId",
                "ltiToolId",
                "ltiPlatformId",
                "ltiUserId",
                "identifier"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        }
      },
      "required": [
        "identifier",
        "identifierType"
      ],
      "additionalProperties": false
    },
    "LanguageTypedString": {
      "description": "A String with an associated language code.",
      "type": "object",
      "properties": {
        "recordLanguage": {
          "description": "The primary language used in the described entity.",
          "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
          "type": "string",
          "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
        },
        "value": {
          "description": "No description supplied.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "recordLanguage",
        "value"
      ],
      "additionalProperties": false
    },
    "educationExtensions": {
      "description": "Extension properties related to education templates",
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": true
    }
  }
}

D.2 EducationOffering

A description of an abstract educational offering.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_educationoffering-jsonschema1.json",
  "title": "JSON Schema for the EducationOffering class.",
  "description": "A description of an abstract educational offering.",
  "type": "object",
  "properties": {
    "sourcedId": {
      "description": "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
      "$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
      "type": "string"
    },
    "offeringType": {
      "description": "The type of education being offered. This is based on an enumerated vocabulary.",
      "$comment": "Origin: EducationOfferingTypeEnum (EnumExt); The set of permitted values for `educationOfferingType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "collection",
            "course",
            "component"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "recordLanguage": {
      "description": "The primary language used in the described entity.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "title": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "description": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "primaryCode": {
      "$ref": "#/$defs/IdentifierEntry"
    },
    "otherCodes": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/IdentifierEntry"
      }
    },
    "locations": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Location"
      }
    },
    "organization": {
      "description": "A reference to an Edu-API Organization.",
      "$comment": "Origin: OrganizationGUIDRef (DerivedType); A reference to an `Organization` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "academicSession": {
      "description": "A reference to an Edu-API Academic Session",
      "$comment": "Origin: AcademicSessionGUIDRef (DerivedType); A reference to an `AcademicSession` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "organizationCode": {
      "description": "A business code used to system might use to reference an organization",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "academicSessionCode": {
      "description": "A business code that a system might use to reference an academic session.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "offeringFormat": {
      "description": "The modality by which the entity is delivered. This is represented by an extensible enumerated vocabulary",
      "$comment": "Origin: OfferingFormatEnum (EnumExt); The set of permitted values for `offeringFormat`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "online",
            "blended",
            "onGround"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "paceOfStudy": {
      "description": "The tempo that the course is taught at as a percentage of a normal course.",
      "$comment": "Origin: Percentage (DerivedType); A percentage expression without fractions. One, two or three digits followed by the '%' character.",
      "type": "string"
    },
    "registrationStatus": {
      "description": "The status of the entity indicating whether it is open for enrollment for teachers and students. This is represented by an extensible enumerated vocabulary.",
      "$comment": "Origin: RegistrationStatusEnum (Enum); The set of permitted values for `registrationStatus`.",
      "type": "string",
      "enum": [
        "open",
        "closed",
        "pending",
        "waitlist"
      ]
    },
    "startDate": {
      "description": "The start date of the associated event.",
      "$comment": "Origin: DateZ (DerivedType); A `Date` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "endDate": {
      "description": "The end date of the associated event.",
      "$comment": "Origin: DateZ (DerivedType); A `Date` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "teachingLanguage": {
      "description": "The main language used to relay the content of the offering.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "maxNumberStudents": {
      "description": "The maximum number of students allowed to enroll for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "minNumberStudents": {
      "description": "The minimum number of students allowed to enroll for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "enrolledNumberStudents": {
      "description": "The number of students that have already enrolled for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "pendingNumberStudents": {
      "description": "The number of students that have a pending enrollment request for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "roleEnablement": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/RoleEnablement"
      }
    },
    "recordStatus": {
      "description": "The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so.",
      "$comment": "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "inactive"
      ]
    },
    "dateLastModified": {
      "description": "A timestamp describing when this record was last modified.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "synchronicity": {
      "description": "An indicator of whether instructor and learner must both be present at the same time",
      "$comment": "Origin: SynchronicityEnum (EnumExt); The set of permitted values used to describe whether an education offering is taught in person, online, or via a hybrid, combined approach.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "hybrid",
            "asynchronous",
            "synchronous"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "extensions": {
      "$ref": "#/$defs/educationOfferingExtensions"
    }
  },
  "required": [
    "sourcedId",
    "offeringType",
    "recordLanguage",
    "title",
    "description",
    "primaryCode",
    "organization",
    "academicSession",
    "offeringFormat",
    "registrationStatus",
    "startDate",
    "endDate",
    "recordStatus"
  ],
  "additionalProperties": false,
  "$defs": {
    "IdentifierEntry": {
      "description": "A container to transmit additional needed identifiers",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "identifierType": {
          "description": "The identifier type.",
          "$comment": "Origin: IdentifierTypeEnum (EnumExt)",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "systemId",
                "productId",
                "userName",
                "accountId",
                "emailAddress",
                "nationalIdentityNumber",
                "isbn",
                "issn",
                "lisSourcedId",
                "oneRosterSourcedId",
                "sisSourcedId",
                "ltiContextId",
                "ltiDeploymentId",
                "ltiToolId",
                "ltiPlatformId",
                "ltiUserId",
                "identifier"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        }
      },
      "required": [
        "identifier",
        "identifierType"
      ],
      "additionalProperties": false
    },
    "RoleEnablement": {
      "description": "An array to store associated dates for a entity. Specifically, additional important date and time offsets surrounding when specific roles may be associated with the course offering before or after the official start and end dates. These dates are meant to be considered additional metadata about the course offering and applied independent of the startDate and endDate. They are not intended to be used to as replacements.",
      "type": "object",
      "properties": {
        "role": {
          "description": "The role of the associated person in the given context.",
          "$comment": "Origin: RoleTypeEnum (EnumExt); The set of permitted values for `roleType`.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "member",
                "chair",
                "staff",
                "student",
                "administrator",
                "aide",
                "guardian",
                "parent",
                "proctor",
                "relative",
                "teacher",
                "advisor",
                "teachingAssistant"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "startDate": {
          "description": "The start date of the associated event.",
          "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
          "type": "string",
          "format": "date-time"
        },
        "endDate": {
          "description": "The end date of the associated event.",
          "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "role"
      ],
      "additionalProperties": false
    },
    "LanguageTypedString": {
      "description": "A String with an associated language code.",
      "type": "object",
      "properties": {
        "recordLanguage": {
          "description": "The primary language used in the described entity.",
          "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
          "type": "string",
          "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
        },
        "value": {
          "description": "No description supplied.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "recordLanguage",
        "value"
      ],
      "additionalProperties": false
    },
    "Location": {
      "description": "A container for describing the location an entity takes place at.",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "description": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/LanguageTypedString"
          }
        },
        "geoLocation": {
          "$ref": "#/$defs/GeoCoordinates"
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "GeoCoordinates": {
      "description": "The geographic coordinates of a location.",
      "type": "object",
      "properties": {
        "latitude": {
          "description": "The latitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "additionalProperties": false
    },
    "educationOfferingExtensions": {
      "description": "Extension properties related to education offerings",
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": true
    }
  }
}

D.3 CollectionTemplate

A grouping of educational units. In the context of Edu-API an education is any kind of canonical or non-instantiated learning units that have a structured relationship, e.g. a course. When grouped, these educational units can be used to define such concepts as programs of study.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_collectiontemplate-jsonschema1.json",
  "title": "JSON Schema for the CollectionTemplate class.",
  "description": "A grouping of educational units. In the context of Edu-API an education is any kind of canonical or non-instantiated learning units that have a structured relationship, e.g. a course. When grouped, these educational units can be used to define such concepts as programs of study.",
  "type": "object",
  "properties": {
    "collectionType": {
      "description": "A representation of what the entity defines. It is based on an extensible enumerated vocabulary.",
      "$comment": "Origin: CollectionTypeEnum (EnumExt); The set of permitted values for `collectionType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "program",
            "generalEducation",
            "requiredCollection",
            "electiveCollection",
            "capstoneCollection",
            "majorCollection",
            "minorCollection",
            "programSpecialization",
            "nonDegreeCollection"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "parent": {
      "type": "array",
      "items": {
        "description": "A reference to a parent EducationCollection (if present).",
        "$comment": "Origin: CollectionTemplateGUIDRef (DerivedType); A reference to an `EducationCollection` object that has an allocated sourcedId (`GUID`).",
        "type": "string"
      }
    },
    "sourcedId": {
      "description": "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
      "$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
      "type": "string"
    },
    "recordLanguage": {
      "description": "The primary language used in the described entity.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "title": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "description": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "primaryCode": {
      "$ref": "#/$defs/IdentifierEntry"
    },
    "otherCodes": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/IdentifierEntry"
      }
    },
    "organization": {
      "description": "A reference to an Edu-API Organization.",
      "$comment": "Origin: OrganizationGUIDRef (DerivedType); A reference to an `Organization` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "organizationCode": {
      "description": "A business code used to system might use to reference an organization",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "level": {
      "description": "The educational level that the entity is for. This is represented by an extensible enumerated vocabulary and commonly varies by institution and region.",
      "$comment": "Origin: EducationLevelEnum (EnumExt); The set of permitted values for `edcucationLevel`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "graduate",
            "undergraduate"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "creditType": {
      "description": "Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary.",
      "$comment": "Origin: CreditTypeEnum (EnumExt); The set of permitted values for `creditType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "credit",
            "nonCredit"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "gradingScheme": {
      "$ref": "#/$defs/LanguageTypedString"
    },
    "teachingLanguage": {
      "description": "The main language used to relay the content of the offering.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "recordStatus": {
      "description": "The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so.",
      "$comment": "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "inactive"
      ]
    },
    "dateLastModified": {
      "description": "A timestamp describing when this record was last modified.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "extensions": {
      "$ref": "#/$defs/educationExtensions"
    }
  },
  "required": [
    "collectionType",
    "sourcedId",
    "recordLanguage",
    "title",
    "description",
    "primaryCode",
    "organization",
    "level",
    "creditType",
    "gradingScheme",
    "recordStatus"
  ],
  "additionalProperties": false,
  "$defs": {
    "IdentifierEntry": {
      "description": "A container to transmit additional needed identifiers",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "identifierType": {
          "description": "The identifier type.",
          "$comment": "Origin: IdentifierTypeEnum (EnumExt)",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "systemId",
                "productId",
                "userName",
                "accountId",
                "emailAddress",
                "nationalIdentityNumber",
                "isbn",
                "issn",
                "lisSourcedId",
                "oneRosterSourcedId",
                "sisSourcedId",
                "ltiContextId",
                "ltiDeploymentId",
                "ltiToolId",
                "ltiPlatformId",
                "ltiUserId",
                "identifier"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        }
      },
      "required": [
        "identifier",
        "identifierType"
      ],
      "additionalProperties": false
    },
    "LanguageTypedString": {
      "description": "A String with an associated language code.",
      "type": "object",
      "properties": {
        "recordLanguage": {
          "description": "The primary language used in the described entity.",
          "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
          "type": "string",
          "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
        },
        "value": {
          "description": "No description supplied.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "recordLanguage",
        "value"
      ],
      "additionalProperties": false
    },
    "educationExtensions": {
      "description": "Extension properties related to education templates",
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": true
    }
  }
}

D.4 CourseTemplate

A time independent description of a learning experience, such that it may appear in a catalog.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_coursetemplate-jsonschema1.json",
  "title": "JSON Schema for the CourseTemplate class.",
  "description": "A time independent description of a learning experience, such that it may appear in a catalog.",
  "type": "object",
  "properties": {
    "courseType": {
      "description": "A representation of what the entity defines. It is based on an extensible enumerated vocabulary.",
      "$comment": "Origin: CourseTypeEnum (EnumExt); The set of permitted values for `courseType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "standard",
            "honors",
            "research",
            "independentStudy",
            "practicum",
            "internship",
            "studyAbroad",
            "capstone",
            "clinical",
            "correspondence",
            "fieldExperience",
            "seminar",
            "thesis"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "parent": {
      "type": "array",
      "items": {
        "description": "A reference to the parent EducationCollection.",
        "$comment": "Origin: CollectionTemplateGUIDRef (DerivedType); A reference to an `EducationCollection` object that has an allocated sourcedId (`GUID`).",
        "type": "string"
      }
    },
    "sourcedId": {
      "description": "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
      "$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
      "type": "string"
    },
    "recordLanguage": {
      "description": "The primary language used in the described entity.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "title": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "description": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "primaryCode": {
      "$ref": "#/$defs/IdentifierEntry"
    },
    "otherCodes": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/IdentifierEntry"
      }
    },
    "organization": {
      "description": "A reference to an Edu-API Organization.",
      "$comment": "Origin: OrganizationGUIDRef (DerivedType); A reference to an `Organization` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "organizationCode": {
      "description": "A business code used to system might use to reference an organization",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "level": {
      "description": "The educational level that the entity is for. This is represented by an extensible enumerated vocabulary and commonly varies by institution and region.",
      "$comment": "Origin: EducationLevelEnum (EnumExt); The set of permitted values for `edcucationLevel`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "graduate",
            "undergraduate"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "creditType": {
      "description": "Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary.",
      "$comment": "Origin: CreditTypeEnum (EnumExt); The set of permitted values for `creditType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "credit",
            "nonCredit"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "gradingScheme": {
      "$ref": "#/$defs/LanguageTypedString"
    },
    "teachingLanguage": {
      "description": "The main language used to relay the content of the offering.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "recordStatus": {
      "description": "The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so.",
      "$comment": "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "inactive"
      ]
    },
    "dateLastModified": {
      "description": "A timestamp describing when this record was last modified.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "extensions": {
      "$ref": "#/$defs/educationExtensions"
    }
  },
  "required": [
    "courseType",
    "sourcedId",
    "recordLanguage",
    "title",
    "description",
    "primaryCode",
    "organization",
    "level",
    "creditType",
    "gradingScheme",
    "recordStatus"
  ],
  "additionalProperties": false,
  "$defs": {
    "IdentifierEntry": {
      "description": "A container to transmit additional needed identifiers",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "identifierType": {
          "description": "The identifier type.",
          "$comment": "Origin: IdentifierTypeEnum (EnumExt)",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "systemId",
                "productId",
                "userName",
                "accountId",
                "emailAddress",
                "nationalIdentityNumber",
                "isbn",
                "issn",
                "lisSourcedId",
                "oneRosterSourcedId",
                "sisSourcedId",
                "ltiContextId",
                "ltiDeploymentId",
                "ltiToolId",
                "ltiPlatformId",
                "ltiUserId",
                "identifier"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        }
      },
      "required": [
        "identifier",
        "identifierType"
      ],
      "additionalProperties": false
    },
    "LanguageTypedString": {
      "description": "A String with an associated language code.",
      "type": "object",
      "properties": {
        "recordLanguage": {
          "description": "The primary language used in the described entity.",
          "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
          "type": "string",
          "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
        },
        "value": {
          "description": "No description supplied.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "recordLanguage",
        "value"
      ],
      "additionalProperties": false
    },
    "educationExtensions": {
      "description": "Extension properties related to education templates",
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": true
    }
  }
}

D.5 ComponentTemplate

A subsection of a Course or Class. It may be a lesson unit within a Class or it may be a separately enrolled unit with a Course. For example, Biology 101 may consist of a Lecture component and a Lab component.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_componenttemplate-jsonschema1.json",
  "title": "JSON Schema for the ComponentTemplate class.",
  "description": "A subsection of a Course or Class. It may be a lesson unit within a Class or it may be a separately enrolled unit with a Course. For example, Biology 101 may consist of a Lecture component and a Lab component.",
  "type": "object",
  "properties": {
    "componentType": {
      "description": "A representation of what the entity defines. It is based on an extensible enumerated vocabulary.",
      "$comment": "Origin: ComponentTypeEnum (EnumExt); The set of permitted values for `componentType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "individualizedInstruction",
            "integratedLectureLab",
            "laboratory",
            "lecture",
            "practicum",
            "recitation",
            "research",
            "seminar",
            "independentStudy",
            "fieldExperience",
            "exam"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "parent": {
      "type": "array",
      "items": {
        "description": "A reference to the parent Course.",
        "$comment": "Origin: CourseTemplateGUIDRef (DerivedType); A reference to a `Course` object that has an allocated sourcedId (`GUID`).",
        "type": "string"
      }
    },
    "sourcedId": {
      "description": "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
      "$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
      "type": "string"
    },
    "recordLanguage": {
      "description": "The primary language used in the described entity.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "title": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "description": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "primaryCode": {
      "$ref": "#/$defs/IdentifierEntry"
    },
    "otherCodes": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/IdentifierEntry"
      }
    },
    "organization": {
      "description": "A reference to an Edu-API Organization.",
      "$comment": "Origin: OrganizationGUIDRef (DerivedType); A reference to an `Organization` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "organizationCode": {
      "description": "A business code used to system might use to reference an organization",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "level": {
      "description": "The educational level that the entity is for. This is represented by an extensible enumerated vocabulary and commonly varies by institution and region.",
      "$comment": "Origin: EducationLevelEnum (EnumExt); The set of permitted values for `edcucationLevel`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "graduate",
            "undergraduate"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "creditType": {
      "description": "Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary.",
      "$comment": "Origin: CreditTypeEnum (EnumExt); The set of permitted values for `creditType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "credit",
            "nonCredit"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "gradingScheme": {
      "$ref": "#/$defs/LanguageTypedString"
    },
    "teachingLanguage": {
      "description": "The main language used to relay the content of the offering.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "recordStatus": {
      "description": "The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so.",
      "$comment": "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "inactive"
      ]
    },
    "dateLastModified": {
      "description": "A timestamp describing when this record was last modified.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "extensions": {
      "$ref": "#/$defs/educationExtensions"
    }
  },
  "required": [
    "componentType",
    "sourcedId",
    "recordLanguage",
    "title",
    "description",
    "primaryCode",
    "organization",
    "level",
    "creditType",
    "gradingScheme",
    "recordStatus"
  ],
  "additionalProperties": false,
  "$defs": {
    "IdentifierEntry": {
      "description": "A container to transmit additional needed identifiers",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "identifierType": {
          "description": "The identifier type.",
          "$comment": "Origin: IdentifierTypeEnum (EnumExt)",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "systemId",
                "productId",
                "userName",
                "accountId",
                "emailAddress",
                "nationalIdentityNumber",
                "isbn",
                "issn",
                "lisSourcedId",
                "oneRosterSourcedId",
                "sisSourcedId",
                "ltiContextId",
                "ltiDeploymentId",
                "ltiToolId",
                "ltiPlatformId",
                "ltiUserId",
                "identifier"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        }
      },
      "required": [
        "identifier",
        "identifierType"
      ],
      "additionalProperties": false
    },
    "LanguageTypedString": {
      "description": "A String with an associated language code.",
      "type": "object",
      "properties": {
        "recordLanguage": {
          "description": "The primary language used in the described entity.",
          "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
          "type": "string",
          "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
        },
        "value": {
          "description": "No description supplied.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "recordLanguage",
        "value"
      ],
      "additionalProperties": false
    },
    "educationExtensions": {
      "description": "Extension properties related to education templates",
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": true
    }
  }
}

D.6 CollectionOffering

A collection of courses or other learning units, used to group them into a coherent whole for enrollment, administrative, or other purposes. A Program is one example of a Course Collection.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_collectionoffering-jsonschema1.json",
  "title": "JSON Schema for the CollectionOffering class.",
  "description": "A collection of courses or other learning units, used to group them into a coherent whole for enrollment, administrative, or other purposes. A Program is one example of a Course Collection.",
  "type": "object",
  "properties": {
    "offeringType": {
      "description": "A representation of what the entity defines. It is based on an extensible enumerated vocabulary.",
      "$comment": "Origin: CollectionTypeEnum (EnumExt); The set of permitted values for `collectionType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "program",
            "generalEducation",
            "requiredCollection",
            "electiveCollection",
            "capstoneCollection",
            "majorCollection",
            "minorCollection",
            "programSpecialization",
            "nonDegreeCollection"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "collection": {
      "description": "A reference to the collectionTemplate.",
      "$comment": "Origin: CollectionTemplateGUIDRef (DerivedType); A reference to an `EducationCollection` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "parent": {
      "type": "array",
      "items": {
        "description": "A reference to parent collectionOffering (if present).",
        "$comment": "Origin: CollectionOfferingGUIDRef (DerivedType); A reference to an `EducationCollectionOffering` object that has an allocated sourcedId (`GUID`).",
        "type": "string"
      }
    },
    "sourcedId": {
      "description": "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
      "$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
      "type": "string"
    },
    "recordLanguage": {
      "description": "The primary language used in the described entity.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "title": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "description": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "primaryCode": {
      "$ref": "#/$defs/IdentifierEntry"
    },
    "otherCodes": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/IdentifierEntry"
      }
    },
    "locations": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Location"
      }
    },
    "organization": {
      "description": "A reference to an Edu-API Organization.",
      "$comment": "Origin: OrganizationGUIDRef (DerivedType); A reference to an `Organization` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "academicSession": {
      "description": "A reference to an Edu-API Academic Session",
      "$comment": "Origin: AcademicSessionGUIDRef (DerivedType); A reference to an `AcademicSession` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "organizationCode": {
      "description": "A business code used to system might use to reference an organization",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "academicSessionCode": {
      "description": "A business code that a system might use to reference an academic session.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "offeringFormat": {
      "description": "The modality by which the entity is delivered. This is represented by an extensible enumerated vocabulary",
      "$comment": "Origin: OfferingFormatEnum (EnumExt); The set of permitted values for `offeringFormat`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "online",
            "blended",
            "onGround"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "paceOfStudy": {
      "description": "The tempo that the course is taught at as a percentage of a normal course.",
      "$comment": "Origin: Percentage (DerivedType); A percentage expression without fractions. One, two or three digits followed by the '%' character.",
      "type": "string"
    },
    "registrationStatus": {
      "description": "The status of the entity indicating whether it is open for enrollment for teachers and students. This is represented by an extensible enumerated vocabulary.",
      "$comment": "Origin: RegistrationStatusEnum (Enum); The set of permitted values for `registrationStatus`.",
      "type": "string",
      "enum": [
        "open",
        "closed",
        "pending",
        "waitlist"
      ]
    },
    "startDate": {
      "description": "The start date of the associated event.",
      "$comment": "Origin: DateZ (DerivedType); A `Date` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "endDate": {
      "description": "The end date of the associated event.",
      "$comment": "Origin: DateZ (DerivedType); A `Date` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "teachingLanguage": {
      "description": "The main language used to relay the content of the offering.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "maxNumberStudents": {
      "description": "The maximum number of students allowed to enroll for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "minNumberStudents": {
      "description": "The minimum number of students allowed to enroll for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "enrolledNumberStudents": {
      "description": "The number of students that have already enrolled for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "pendingNumberStudents": {
      "description": "The number of students that have a pending enrollment request for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "roleEnablement": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/RoleEnablement"
      }
    },
    "recordStatus": {
      "description": "The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so.",
      "$comment": "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "inactive"
      ]
    },
    "dateLastModified": {
      "description": "A timestamp describing when this record was last modified.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "synchronicity": {
      "description": "An indicator of whether instructor and learner must both be present at the same time",
      "$comment": "Origin: SynchronicityEnum (EnumExt); The set of permitted values used to describe whether an education offering is taught in person, online, or via a hybrid, combined approach.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "hybrid",
            "asynchronous",
            "synchronous"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "extensions": {
      "$ref": "#/$defs/educationOfferingExtensions"
    }
  },
  "required": [
    "offeringType",
    "collection",
    "sourcedId",
    "recordLanguage",
    "title",
    "description",
    "primaryCode",
    "organization",
    "academicSession",
    "offeringFormat",
    "registrationStatus",
    "startDate",
    "endDate",
    "recordStatus"
  ],
  "additionalProperties": false,
  "$defs": {
    "IdentifierEntry": {
      "description": "A container to transmit additional needed identifiers",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "identifierType": {
          "description": "The identifier type.",
          "$comment": "Origin: IdentifierTypeEnum (EnumExt)",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "systemId",
                "productId",
                "userName",
                "accountId",
                "emailAddress",
                "nationalIdentityNumber",
                "isbn",
                "issn",
                "lisSourcedId",
                "oneRosterSourcedId",
                "sisSourcedId",
                "ltiContextId",
                "ltiDeploymentId",
                "ltiToolId",
                "ltiPlatformId",
                "ltiUserId",
                "identifier"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        }
      },
      "required": [
        "identifier",
        "identifierType"
      ],
      "additionalProperties": false
    },
    "RoleEnablement": {
      "description": "An array to store associated dates for a entity. Specifically, additional important date and time offsets surrounding when specific roles may be associated with the course offering before or after the official start and end dates. These dates are meant to be considered additional metadata about the course offering and applied independent of the startDate and endDate. They are not intended to be used to as replacements.",
      "type": "object",
      "properties": {
        "role": {
          "description": "The role of the associated person in the given context.",
          "$comment": "Origin: RoleTypeEnum (EnumExt); The set of permitted values for `roleType`.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "member",
                "chair",
                "staff",
                "student",
                "administrator",
                "aide",
                "guardian",
                "parent",
                "proctor",
                "relative",
                "teacher",
                "advisor",
                "teachingAssistant"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "startDate": {
          "description": "The start date of the associated event.",
          "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
          "type": "string",
          "format": "date-time"
        },
        "endDate": {
          "description": "The end date of the associated event.",
          "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "role"
      ],
      "additionalProperties": false
    },
    "LanguageTypedString": {
      "description": "A String with an associated language code.",
      "type": "object",
      "properties": {
        "recordLanguage": {
          "description": "The primary language used in the described entity.",
          "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
          "type": "string",
          "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
        },
        "value": {
          "description": "No description supplied.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "recordLanguage",
        "value"
      ],
      "additionalProperties": false
    },
    "Location": {
      "description": "A container for describing the location an entity takes place at.",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "description": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/LanguageTypedString"
          }
        },
        "geoLocation": {
          "$ref": "#/$defs/GeoCoordinates"
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "GeoCoordinates": {
      "description": "The geographic coordinates of a location.",
      "type": "object",
      "properties": {
        "latitude": {
          "description": "The latitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "additionalProperties": false
    },
    "educationOfferingExtensions": {
      "description": "Extension properties related to education offerings",
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": true
    }
  }
}

D.7 CourseOffering

Relates a course to one or more delivery scenarios.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_courseoffering-jsonschema1.json",
  "title": "JSON Schema for the CourseOffering class.",
  "description": "Relates a course to one or more delivery scenarios.",
  "type": "object",
  "properties": {
    "offeringType": {
      "description": "A representation of what the entity defines. It is based on an extensible enumerated vocabulary.",
      "$comment": "Origin: CourseTypeEnum (EnumExt); The set of permitted values for `courseType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "standard",
            "honors",
            "research",
            "independentStudy",
            "practicum",
            "internship",
            "studyAbroad",
            "capstone",
            "clinical",
            "correspondence",
            "fieldExperience",
            "seminar",
            "thesis"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "course": {
      "description": "A reference to the courseTemplate.",
      "$comment": "Origin: CourseTemplateGUIDRef (DerivedType); A reference to a `Course` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "parent": {
      "type": "array",
      "items": {
        "description": "A reference to the parent collectionOffering.",
        "$comment": "Origin: CollectionOfferingGUIDRef (DerivedType); A reference to an `EducationCollectionOffering` object that has an allocated sourcedId (`GUID`).",
        "type": "string"
      }
    },
    "sourcedId": {
      "description": "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
      "$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
      "type": "string"
    },
    "recordLanguage": {
      "description": "The primary language used in the described entity.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "title": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "description": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "primaryCode": {
      "$ref": "#/$defs/IdentifierEntry"
    },
    "otherCodes": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/IdentifierEntry"
      }
    },
    "locations": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Location"
      }
    },
    "organization": {
      "description": "A reference to an Edu-API Organization.",
      "$comment": "Origin: OrganizationGUIDRef (DerivedType); A reference to an `Organization` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "academicSession": {
      "description": "A reference to an Edu-API Academic Session",
      "$comment": "Origin: AcademicSessionGUIDRef (DerivedType); A reference to an `AcademicSession` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "organizationCode": {
      "description": "A business code used to system might use to reference an organization",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "academicSessionCode": {
      "description": "A business code that a system might use to reference an academic session.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "offeringFormat": {
      "description": "The modality by which the entity is delivered. This is represented by an extensible enumerated vocabulary",
      "$comment": "Origin: OfferingFormatEnum (EnumExt); The set of permitted values for `offeringFormat`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "online",
            "blended",
            "onGround"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "paceOfStudy": {
      "description": "The tempo that the course is taught at as a percentage of a normal course.",
      "$comment": "Origin: Percentage (DerivedType); A percentage expression without fractions. One, two or three digits followed by the '%' character.",
      "type": "string"
    },
    "registrationStatus": {
      "description": "The status of the entity indicating whether it is open for enrollment for teachers and students. This is represented by an extensible enumerated vocabulary.",
      "$comment": "Origin: RegistrationStatusEnum (Enum); The set of permitted values for `registrationStatus`.",
      "type": "string",
      "enum": [
        "open",
        "closed",
        "pending",
        "waitlist"
      ]
    },
    "startDate": {
      "description": "The start date of the associated event.",
      "$comment": "Origin: DateZ (DerivedType); A `Date` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "endDate": {
      "description": "The end date of the associated event.",
      "$comment": "Origin: DateZ (DerivedType); A `Date` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "teachingLanguage": {
      "description": "The main language used to relay the content of the offering.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "maxNumberStudents": {
      "description": "The maximum number of students allowed to enroll for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "minNumberStudents": {
      "description": "The minimum number of students allowed to enroll for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "enrolledNumberStudents": {
      "description": "The number of students that have already enrolled for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "pendingNumberStudents": {
      "description": "The number of students that have a pending enrollment request for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "roleEnablement": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/RoleEnablement"
      }
    },
    "recordStatus": {
      "description": "The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so.",
      "$comment": "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "inactive"
      ]
    },
    "dateLastModified": {
      "description": "A timestamp describing when this record was last modified.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "synchronicity": {
      "description": "An indicator of whether instructor and learner must both be present at the same time",
      "$comment": "Origin: SynchronicityEnum (EnumExt); The set of permitted values used to describe whether an education offering is taught in person, online, or via a hybrid, combined approach.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "hybrid",
            "asynchronous",
            "synchronous"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "extensions": {
      "$ref": "#/$defs/educationOfferingExtensions"
    }
  },
  "required": [
    "offeringType",
    "course",
    "sourcedId",
    "recordLanguage",
    "title",
    "description",
    "primaryCode",
    "organization",
    "academicSession",
    "offeringFormat",
    "registrationStatus",
    "startDate",
    "endDate",
    "recordStatus"
  ],
  "additionalProperties": false,
  "$defs": {
    "IdentifierEntry": {
      "description": "A container to transmit additional needed identifiers",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "identifierType": {
          "description": "The identifier type.",
          "$comment": "Origin: IdentifierTypeEnum (EnumExt)",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "systemId",
                "productId",
                "userName",
                "accountId",
                "emailAddress",
                "nationalIdentityNumber",
                "isbn",
                "issn",
                "lisSourcedId",
                "oneRosterSourcedId",
                "sisSourcedId",
                "ltiContextId",
                "ltiDeploymentId",
                "ltiToolId",
                "ltiPlatformId",
                "ltiUserId",
                "identifier"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        }
      },
      "required": [
        "identifier",
        "identifierType"
      ],
      "additionalProperties": false
    },
    "RoleEnablement": {
      "description": "An array to store associated dates for a entity. Specifically, additional important date and time offsets surrounding when specific roles may be associated with the course offering before or after the official start and end dates. These dates are meant to be considered additional metadata about the course offering and applied independent of the startDate and endDate. They are not intended to be used to as replacements.",
      "type": "object",
      "properties": {
        "role": {
          "description": "The role of the associated person in the given context.",
          "$comment": "Origin: RoleTypeEnum (EnumExt); The set of permitted values for `roleType`.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "member",
                "chair",
                "staff",
                "student",
                "administrator",
                "aide",
                "guardian",
                "parent",
                "proctor",
                "relative",
                "teacher",
                "advisor",
                "teachingAssistant"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "startDate": {
          "description": "The start date of the associated event.",
          "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
          "type": "string",
          "format": "date-time"
        },
        "endDate": {
          "description": "The end date of the associated event.",
          "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "role"
      ],
      "additionalProperties": false
    },
    "LanguageTypedString": {
      "description": "A String with an associated language code.",
      "type": "object",
      "properties": {
        "recordLanguage": {
          "description": "The primary language used in the described entity.",
          "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
          "type": "string",
          "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
        },
        "value": {
          "description": "No description supplied.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "recordLanguage",
        "value"
      ],
      "additionalProperties": false
    },
    "Location": {
      "description": "A container for describing the location an entity takes place at.",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "description": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/LanguageTypedString"
          }
        },
        "geoLocation": {
          "$ref": "#/$defs/GeoCoordinates"
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "GeoCoordinates": {
      "description": "The geographic coordinates of a location.",
      "type": "object",
      "properties": {
        "latitude": {
          "description": "The latitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "additionalProperties": false
    },
    "educationOfferingExtensions": {
      "description": "Extension properties related to education offerings",
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": true
    }
  }
}

D.8 ComponentOffering

A subsection of a courseOffering. It may be a lesson or separately enrollable unit within a courseOffering. For example, Biology 101 may consist of a Lecture component offering and a Lab component offering

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_componentoffering-jsonschema1.json",
  "title": "JSON Schema for the ComponentOffering class.",
  "description": "A subsection of a courseOffering. It may be a lesson or separately enrollable unit within a courseOffering. For example, Biology 101 may consist of a Lecture component offering and a Lab component offering",
  "type": "object",
  "properties": {
    "offeringType": {
      "description": "A representation of what the entity defines. It is based on an extensible enumerated vocabulary.",
      "$comment": "Origin: ComponentTypeEnum (EnumExt); The set of permitted values for `componentType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "individualizedInstruction",
            "integratedLectureLab",
            "laboratory",
            "lecture",
            "practicum",
            "recitation",
            "research",
            "seminar",
            "independentStudy",
            "fieldExperience",
            "exam"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "component": {
      "description": "A reference to the componentTemplate.",
      "$comment": "Origin: ComponentTemplateGUIDRef (DerivedType); A reference to an `EducationComponent` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "parent": {
      "type": "array",
      "items": {
        "description": "A reference to the parent courseOffering.",
        "$comment": "Origin: CourseOfferingGUIDRef (DerivedType); A reference to a `CourseOffering` object that has an allocated sourcedId (`GUID`).",
        "type": "string"
      }
    },
    "sourcedId": {
      "description": "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
      "$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
      "type": "string"
    },
    "recordLanguage": {
      "description": "The primary language used in the described entity.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "title": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "description": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "primaryCode": {
      "$ref": "#/$defs/IdentifierEntry"
    },
    "otherCodes": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/IdentifierEntry"
      }
    },
    "locations": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Location"
      }
    },
    "organization": {
      "description": "A reference to an Edu-API Organization.",
      "$comment": "Origin: OrganizationGUIDRef (DerivedType); A reference to an `Organization` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "academicSession": {
      "description": "A reference to an Edu-API Academic Session",
      "$comment": "Origin: AcademicSessionGUIDRef (DerivedType); A reference to an `AcademicSession` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "organizationCode": {
      "description": "A business code used to system might use to reference an organization",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "academicSessionCode": {
      "description": "A business code that a system might use to reference an academic session.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "offeringFormat": {
      "description": "The modality by which the entity is delivered. This is represented by an extensible enumerated vocabulary",
      "$comment": "Origin: OfferingFormatEnum (EnumExt); The set of permitted values for `offeringFormat`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "online",
            "blended",
            "onGround"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "paceOfStudy": {
      "description": "The tempo that the course is taught at as a percentage of a normal course.",
      "$comment": "Origin: Percentage (DerivedType); A percentage expression without fractions. One, two or three digits followed by the '%' character.",
      "type": "string"
    },
    "registrationStatus": {
      "description": "The status of the entity indicating whether it is open for enrollment for teachers and students. This is represented by an extensible enumerated vocabulary.",
      "$comment": "Origin: RegistrationStatusEnum (Enum); The set of permitted values for `registrationStatus`.",
      "type": "string",
      "enum": [
        "open",
        "closed",
        "pending",
        "waitlist"
      ]
    },
    "startDate": {
      "description": "The start date of the associated event.",
      "$comment": "Origin: DateZ (DerivedType); A `Date` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "endDate": {
      "description": "The end date of the associated event.",
      "$comment": "Origin: DateZ (DerivedType); A `Date` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "teachingLanguage": {
      "description": "The main language used to relay the content of the offering.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "maxNumberStudents": {
      "description": "The maximum number of students allowed to enroll for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "minNumberStudents": {
      "description": "The minimum number of students allowed to enroll for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "enrolledNumberStudents": {
      "description": "The number of students that have already enrolled for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "pendingNumberStudents": {
      "description": "The number of students that have a pending enrollment request for this offering",
      "$comment": "Origin: Integer (PrimitiveType)",
      "type": "integer"
    },
    "roleEnablement": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/RoleEnablement"
      }
    },
    "recordStatus": {
      "description": "The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so.",
      "$comment": "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "inactive"
      ]
    },
    "dateLastModified": {
      "description": "A timestamp describing when this record was last modified.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "synchronicity": {
      "description": "An indicator of whether instructor and learner must both be present at the same time",
      "$comment": "Origin: SynchronicityEnum (EnumExt); The set of permitted values used to describe whether an education offering is taught in person, online, or via a hybrid, combined approach.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "hybrid",
            "asynchronous",
            "synchronous"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "extensions": {
      "$ref": "#/$defs/educationOfferingExtensions"
    }
  },
  "required": [
    "offeringType",
    "component",
    "sourcedId",
    "recordLanguage",
    "title",
    "description",
    "primaryCode",
    "organization",
    "academicSession",
    "offeringFormat",
    "registrationStatus",
    "startDate",
    "endDate",
    "recordStatus"
  ],
  "additionalProperties": false,
  "$defs": {
    "IdentifierEntry": {
      "description": "A container to transmit additional needed identifiers",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "identifierType": {
          "description": "The identifier type.",
          "$comment": "Origin: IdentifierTypeEnum (EnumExt)",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "systemId",
                "productId",
                "userName",
                "accountId",
                "emailAddress",
                "nationalIdentityNumber",
                "isbn",
                "issn",
                "lisSourcedId",
                "oneRosterSourcedId",
                "sisSourcedId",
                "ltiContextId",
                "ltiDeploymentId",
                "ltiToolId",
                "ltiPlatformId",
                "ltiUserId",
                "identifier"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        }
      },
      "required": [
        "identifier",
        "identifierType"
      ],
      "additionalProperties": false
    },
    "RoleEnablement": {
      "description": "An array to store associated dates for a entity. Specifically, additional important date and time offsets surrounding when specific roles may be associated with the course offering before or after the official start and end dates. These dates are meant to be considered additional metadata about the course offering and applied independent of the startDate and endDate. They are not intended to be used to as replacements.",
      "type": "object",
      "properties": {
        "role": {
          "description": "The role of the associated person in the given context.",
          "$comment": "Origin: RoleTypeEnum (EnumExt); The set of permitted values for `roleType`.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "member",
                "chair",
                "staff",
                "student",
                "administrator",
                "aide",
                "guardian",
                "parent",
                "proctor",
                "relative",
                "teacher",
                "advisor",
                "teachingAssistant"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "startDate": {
          "description": "The start date of the associated event.",
          "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
          "type": "string",
          "format": "date-time"
        },
        "endDate": {
          "description": "The end date of the associated event.",
          "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "role"
      ],
      "additionalProperties": false
    },
    "LanguageTypedString": {
      "description": "A String with an associated language code.",
      "type": "object",
      "properties": {
        "recordLanguage": {
          "description": "The primary language used in the described entity.",
          "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
          "type": "string",
          "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
        },
        "value": {
          "description": "No description supplied.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "recordLanguage",
        "value"
      ],
      "additionalProperties": false
    },
    "Location": {
      "description": "A container for describing the location an entity takes place at.",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "description": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/LanguageTypedString"
          }
        },
        "geoLocation": {
          "$ref": "#/$defs/GeoCoordinates"
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "GeoCoordinates": {
      "description": "The geographic coordinates of a location.",
      "type": "object",
      "properties": {
        "latitude": {
          "description": "The latitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "additionalProperties": false
    },
    "educationOfferingExtensions": {
      "description": "Extension properties related to education offerings",
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": true
    }
  }
}

D.9 Person

A Person represents a human being, alive or deceased, real or imaginary.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_person-jsonschema1.json",
  "title": "JSON Schema for the Person class.",
  "description": "A Person represents a human being, alive or deceased, real or imaginary.",
  "type": "object",
  "properties": {
    "sourcedId": {
      "description": "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
      "$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
      "type": "string"
    },
    "otherIdentifiers": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/IdentifierEntry"
      }
    },
    "recordLanguage": {
      "description": "The primary language used in the described entity.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "legalName": {
      "$ref": "#/$defs/PersonName"
    },
    "formattedName": {
      "description": "the long form formatted name, this will often be dependent on region or system requirements.",
      "$comment": "Origin: NFCString (DerivedType); A `NormalizedString` further normalized using Unicode Normalization Form C [[UAX15]].",
      "type": "string"
    },
    "otherNames": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PersonNameEntry"
      }
    },
    "gender": {
      "description": "The gender of the individual. It is based on an extensible enumerated vocabulary.",
      "$comment": "Origin: GenderEnum (EnumExt); The gender of this person. Other values than those defined may be given to capture the gender identity of this Person.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "male",
            "female",
            "unspecified",
            "other"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "pronouns": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "languagesSpoken": {
      "type": "array",
      "items": {
        "description": "The list of languages that this person speaks.",
        "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
        "type": "string",
        "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
      }
    },
    "dateOfBirth": {
      "description": "The date of birth.",
      "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.",
      "type": "string",
      "format": "date"
    },
    "placeOfBirth": {
      "description": "The place of birth. Commonly a city or municipality.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "countryOfBirth": {
      "description": "The country of birth.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "isDeceased": {
      "description": "Used to identify if the person being described is alive or dead. If this property is absent or set to `false` but the `dateOfDeath` property is set, then the consuming system should interpret that as the person being deceased.",
      "$comment": "Origin: Boolean (PrimitiveType); A boolean, expressed as `true` or `false`",
      "type": "boolean"
    },
    "dateOfDeath": {
      "description": "The date of death. The presence of this property means that the person being described is known to be deceased. In scenarios where this conflicts with the `isDeceased` flag, this property takes precedence and consuming systems should interpret that as the person being deceased.",
      "$comment": "Origin: Date (PrimitiveType); An [[ISO8601]] calendar date using the syntax YYYY-MM-DD.",
      "type": "string",
      "format": "date"
    },
    "primaryEmail": {
      "$ref": "#/$defs/OptionallyTypedEmail"
    },
    "otherEmails": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/TypedEmail"
      }
    },
    "primaryPhone": {
      "$ref": "#/$defs/OptionallyTypedPhone"
    },
    "otherPhones": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/TypedPhone"
      }
    },
    "primaryAddress": {
      "$ref": "#/$defs/OptionallyTypedAddress"
    },
    "otherAddresses": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/TypedAddress"
      }
    },
    "agents": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Agents"
      }
    },
    "dateLastModified": {
      "description": "A timestamp describing when this record was last modified.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "recordStatus": {
      "description": "The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so.",
      "$comment": "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "inactive"
      ]
    },
    "extensions": {
      "$ref": "#/$defs/personExtensions"
    }
  },
  "required": [
    "sourcedId",
    "recordLanguage",
    "recordStatus"
  ],
  "additionalProperties": false,
  "$defs": {
    "IdentifierEntry": {
      "description": "A container to transmit additional needed identifiers",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "identifierType": {
          "description": "The identifier type.",
          "$comment": "Origin: IdentifierTypeEnum (EnumExt)",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "systemId",
                "productId",
                "userName",
                "accountId",
                "emailAddress",
                "nationalIdentityNumber",
                "isbn",
                "issn",
                "lisSourcedId",
                "oneRosterSourcedId",
                "sisSourcedId",
                "ltiContextId",
                "ltiDeploymentId",
                "ltiToolId",
                "ltiPlatformId",
                "ltiUserId",
                "identifier"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        }
      },
      "required": [
        "identifier",
        "identifierType"
      ],
      "additionalProperties": false
    },
    "OptionallyTypedEmail": {
      "description": "An optionally typed email address.",
      "type": "object",
      "properties": {
        "emailType": {
          "description": "The type of email address.",
          "$comment": "Origin: EmailTypeEnum (EnumExt); The set of permitted values for `emailType`.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "homeEmail",
                "workEmail",
                "iceEmail"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "email": {
          "description": "An email address.",
          "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
          "type": "string"
        }
      },
      "required": [
        "email"
      ],
      "additionalProperties": false
    },
    "Agents": {
      "description": "A container with the set of Edu-API persons that can act on behalf of the person in question. This includes description of the type of relationship exists and the context it is applicable in.",
      "type": "object",
      "properties": {
        "agentType": {
          "description": "A description of the relationship between the agent and the person the are an agent for. This is based on an extensible enumerated vocabulary.",
          "$comment": "Origin: AgentTypeEnum (EnumExt); The set of permitted values for `agentType`.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "parent",
                "guardian",
                "emergencyContact"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "person": {
          "description": "A reference to an Edu-API person. This represents the person acting in an agency capacity.",
          "$comment": "Origin: PersonGUIDRef (DerivedType); A reference to a `Person` object that has an allocated sourcedId (`GUID`).",
          "type": "string"
        },
        "description": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/LanguageTypedString"
          }
        },
        "domain": {
          "description": "The context within which the person can act as an agent in.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "agentType",
        "person"
      ],
      "additionalProperties": false
    },
    "TypedPhone": {
      "description": "A typed phone number.",
      "type": "object",
      "properties": {
        "phoneType": {
          "description": "The type of phone number. This is based on an extensible enumerated vocabulary.",
          "$comment": "Origin: PhoneTypeEnum (EnumExt); The set of permitted values for `phoneType`.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "homePhone",
                "workPhone",
                "icePhone"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "phone": {
          "description": "A phone number.",
          "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
          "type": "string"
        }
      },
      "required": [
        "phoneType",
        "phone"
      ],
      "additionalProperties": false
    },
    "PersonNameEntry": {
      "description": "No description supplied.",
      "type": "object",
      "properties": {
        "nameType": {
          "description": "The type of name described in this entry.",
          "$comment": "Origin: PersonNameTypeEnum (EnumExt); The set of permitted values for name types.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "legalName",
                "preferredName",
                "phoneticName",
                "aliasName",
                "formerName"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "familyName": {
          "description": "Family name. In the western world, often referred to as the 'last name' of a person.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "givenName": {
          "description": "Given name. In the western world, often referred to as the 'first name' of a person.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "additionalName": {
          "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "patronymicName": {
          "description": "Patronymic name.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "honorificPrefix": {
          "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "honorificSuffix": {
          "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "familyNamePrefix": {
          "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "nameType"
      ],
      "additionalProperties": false
    },
    "LanguageTypedString": {
      "description": "A String with an associated language code.",
      "type": "object",
      "properties": {
        "recordLanguage": {
          "description": "The primary language used in the described entity.",
          "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
          "type": "string",
          "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
        },
        "value": {
          "description": "No description supplied.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "recordLanguage",
        "value"
      ],
      "additionalProperties": false
    },
    "OptionallyTypedAddress": {
      "description": "A optionally typed address.",
      "type": "object",
      "properties": {
        "addressType": {
          "description": "The type of address. This is based on an extensible enumerated vocabulary.",
          "$comment": "Origin: AddressTypeEnum (EnumExt); The set of permitted values for `addressType`.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "visitingAddress",
                "mailingAddress",
                "permanentAddress",
                "deliveryAddress",
                "billingAddress",
                "homeAddress",
                "workAddress",
                "formerAddress"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "addressCountry": {
          "description": "A country.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "addressCountryCode": {
          "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
          "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
          "type": "string"
        },
        "addressRegion": {
          "description": "A region within the country.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "addressLocality": {
          "description": "A locality within the region.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "streetAddress": {
          "description": "A street address within the locality.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "postOfficeBoxNumber": {
          "description": "A post office box number for PO box addresses.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "postalCode": {
          "description": "A postal code.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "geo": {
          "$ref": "#/$defs/GeoCoordinates"
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "TypedAddress": {
      "description": "A typed address.",
      "type": "object",
      "properties": {
        "addressType": {
          "description": "The type of address. This is based on an extensible enumerated vocabulary.",
          "$comment": "Origin: AddressTypeEnum (EnumExt); The set of permitted values for `addressType`.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "visitingAddress",
                "mailingAddress",
                "permanentAddress",
                "deliveryAddress",
                "billingAddress",
                "homeAddress",
                "workAddress",
                "formerAddress"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "addressCountry": {
          "description": "A country.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "addressCountryCode": {
          "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
          "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
          "type": "string"
        },
        "addressRegion": {
          "description": "A region within the country.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "addressLocality": {
          "description": "A locality within the region.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "streetAddress": {
          "description": "A street address within the locality.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "postOfficeBoxNumber": {
          "description": "A post office box number for PO box addresses.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "postalCode": {
          "description": "A postal code.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "geo": {
          "$ref": "#/$defs/GeoCoordinates"
        }
      },
      "required": [
        "addressType"
      ],
      "additionalProperties": false
    },
    "personExtensions": {
      "description": "Extension properties related to Edu-API persons",
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": true
    },
    "GeoCoordinates": {
      "description": "The geographic coordinates of a location.",
      "type": "object",
      "properties": {
        "latitude": {
          "description": "The latitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "additionalProperties": false
    },
    "PersonName": {
      "description": "The set of parts that are used to define an Edu-API persons name, this design attempts to account for international naming needs.",
      "type": "object",
      "properties": {
        "familyName": {
          "description": "Family name. In the western world, often referred to as the 'last name' of a person.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "givenName": {
          "description": "Given name. In the western world, often referred to as the 'first name' of a person.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "additionalName": {
          "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "patronymicName": {
          "description": "Patronymic name.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "honorificPrefix": {
          "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "honorificSuffix": {
          "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "familyNamePrefix": {
          "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "TypedEmail": {
      "description": "A typed email address.",
      "type": "object",
      "properties": {
        "emailType": {
          "description": "The type of email address. This is based on an extensible enumerated vocabulary.",
          "$comment": "Origin: EmailTypeEnum (EnumExt); The set of permitted values for `emailType`.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "homeEmail",
                "workEmail",
                "iceEmail"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "email": {
          "description": "An email address.",
          "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
          "type": "string"
        }
      },
      "required": [
        "emailType",
        "email"
      ],
      "additionalProperties": false
    },
    "OptionallyTypedPhone": {
      "description": "An optionally typed phone number.",
      "type": "object",
      "properties": {
        "phoneType": {
          "description": "The type of address. This is based on an extensible enumerated vocabulary.",
          "$comment": "Origin: PhoneTypeEnum (EnumExt); The set of permitted values for `phoneType`.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "homePhone",
                "workPhone",
                "icePhone"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "phone": {
          "description": "A phone number.",
          "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
          "type": "string"
        }
      },
      "required": [
        "phone"
      ],
      "additionalProperties": false
    }
  }
}

D.10 PersonName

The set of parts that are used to define an Edu-API persons name, this design attempts to account for international naming needs.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_personname-jsonschema1.json",
  "title": "JSON Schema for the PersonName class.",
  "description": "The set of parts that are used to define an Edu-API persons name, this design attempts to account for international naming needs.",
  "type": "object",
  "properties": {
    "familyName": {
      "description": "Family name. In the western world, often referred to as the 'last name' of a person.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "givenName": {
      "description": "Given name. In the western world, often referred to as the 'first name' of a person.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "additionalName": {
      "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "patronymicName": {
      "description": "Patronymic name.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "honorificPrefix": {
      "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "honorificSuffix": {
      "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "familyNamePrefix": {
      "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}

D.11 Agents

A container with the set of Edu-API persons that can act on behalf of the person in question. This includes description of the type of relationship exists and the context it is applicable in.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_agents-jsonschema1.json",
  "title": "JSON Schema for the Agents class.",
  "description": "A container with the set of Edu-API persons that can act on behalf of the person in question. This includes description of the type of relationship exists and the context it is applicable in.",
  "type": "object",
  "properties": {
    "agentType": {
      "description": "A description of the relationship between the agent and the person the are an agent for. This is based on an extensible enumerated vocabulary.",
      "$comment": "Origin: AgentTypeEnum (EnumExt); The set of permitted values for `agentType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "parent",
            "guardian",
            "emergencyContact"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "person": {
      "description": "A reference to an Edu-API person. This represents the person acting in an agency capacity.",
      "$comment": "Origin: PersonGUIDRef (DerivedType); A reference to a `Person` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "description": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "domain": {
      "description": "The context within which the person can act as an agent in.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    }
  },
  "required": [
    "agentType",
    "person"
  ],
  "additionalProperties": false,
  "$defs": {
    "LanguageTypedString": {
      "description": "A String with an associated language code.",
      "type": "object",
      "properties": {
        "recordLanguage": {
          "description": "The primary language used in the described entity.",
          "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
          "type": "string",
          "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
        },
        "value": {
          "description": "No description supplied.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "recordLanguage",
        "value"
      ],
      "additionalProperties": false
    }
  }
}

D.12 Affiliation

A container that describes an Edu-API persons relationships to organizations; including their role(s) and the time frames those roles are in place.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_affiliation-jsonschema1.json",
  "title": "JSON Schema for the Affiliation class.",
  "description": "A container that describes an Edu-API persons relationships to organizations; including their role(s) and the time frames those roles are in place.",
  "type": "object",
  "properties": {
    "sourcedId": {
      "description": "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
      "$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
      "type": "string"
    },
    "person": {
      "description": "A reference to an Edu-API Person.",
      "$comment": "Origin: PersonGUIDRef (DerivedType); A reference to a `Person` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "organization": {
      "description": "A reference to an Edu-API Organization.",
      "$comment": "Origin: OrganizationGUIDRef (DerivedType); A reference to an `Organization` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "role": {
      "description": "The role of the associated person in the given context.",
      "$comment": "Origin: RoleTypeEnum (EnumExt); The set of permitted values for `roleType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "member",
            "chair",
            "staff",
            "student",
            "administrator",
            "aide",
            "guardian",
            "parent",
            "proctor",
            "relative",
            "teacher",
            "advisor",
            "teachingAssistant"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "startDate": {
      "description": "The start date of the associated event.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "endDate": {
      "description": "The end date of the associated event.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "affiliationStatus": {
      "description": "The status of the person's affiliation with the organization. This is based upon an enumerated vocabulary",
      "$comment": "Origin: AffiliationStatusEnum (EnumExt); The set of permitted values for `affiliationStatus`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "active",
            "inactive",
            "auditing",
            "withdrawn"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "recordStatus": {
      "description": "The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so.",
      "$comment": "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "inactive"
      ]
    },
    "dateLastModified": {
      "description": "A timestamp describing when this record was last modified.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "extensions": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/affiliationExtensions"
      }
    }
  },
  "required": [
    "sourcedId",
    "person",
    "organization",
    "role",
    "affiliationStatus",
    "recordStatus"
  ],
  "additionalProperties": false,
  "$defs": {
    "affiliationExtensions": {
      "description": "Extension properties related to affiliations",
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": true
    }
  }
}

D.13 Enrollment

The contextualized joining of a person and a CourseOffering, CollectionOffering or ComponentOffering.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_enrollment-jsonschema1.json",
  "title": "JSON Schema for the Enrollment class.",
  "description": "The contextualized joining of a person and a CourseOffering, CollectionOffering or ComponentOffering.",
  "type": "object",
  "properties": {
    "sourcedId": {
      "description": "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
      "$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
      "type": "string"
    },
    "recordLanguage": {
      "description": "The primary language used in the described entity.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "isActive": {
      "description": "Used to identify if the enrollment described in this entity is currently active or inactive. A value of true indicates that the enrollment is active, a value of false indicates the enrollment is inactive. To be used in conjunction with enrollmentStatus when more details about the enrollment state are required. See the best practices guide for guidance on how to use these properties in tandem.",
      "$comment": "Origin: Boolean (PrimitiveType); A boolean, expressed as `true` or `false`",
      "type": "boolean"
    },
    "enrollmentStatus": {
      "description": "The status of this enrollment.",
      "$comment": "Origin: EnrollmentStatusEnum (EnumExt); The set of permitted values for `enrollmentStatus`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "onLeave",
            "withdrawn",
            "accepted",
            "pending",
            "cancelled",
            "registered",
            "revoked",
            "Interruption",
            "finished",
            "withdrawnFailing",
            "withdrawnPassing",
            "dropped",
            "suspended",
            "enrolled",
            "declined",
            "deferred",
            "onHold"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "person": {
      "description": "A reference to an Edu-API Person.",
      "$comment": "Origin: PersonGUIDRef (DerivedType); A reference to a `Person` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "role": {
      "description": "The role of the associated person in the given context.",
      "$comment": "Origin: RoleTypeEnum (EnumExt); The set of permitted values for `roleType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "member",
            "chair",
            "staff",
            "student",
            "administrator",
            "aide",
            "guardian",
            "parent",
            "proctor",
            "relative",
            "teacher",
            "advisor",
            "teachingAssistant"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "startDate": {
      "description": "The start date of the associated event.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "endDate": {
      "description": "The end date of the associated event.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "educationOffering": {
      "description": "A reference to an Edu-API offering entity. This is the instantiated Education the person is being enrolled on.",
      "$comment": "Origin: EducationOfferingGUIDRef (DerivedType); A reference to a `EducationCollectionOffering`, `CourseOffering` or `EducationComponentOffering` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "offeringType": {
      "description": "The type of education being offered. This is based on an enumerated vocabulary.",
      "$comment": "Origin: EducationOfferingTypeEnum (EnumExt); The set of permitted values for `educationOfferingType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "collection",
            "course",
            "component"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "recordStatus": {
      "description": "The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so.",
      "$comment": "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "inactive"
      ]
    },
    "dateLastModified": {
      "description": "A timestamp describing when this record was last modified.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "extensions": {
      "$ref": "#/$defs/enrollmentExtensions"
    }
  },
  "required": [
    "sourcedId",
    "recordLanguage",
    "isActive",
    "enrollmentStatus",
    "person",
    "role",
    "educationOffering",
    "offeringType",
    "recordStatus"
  ],
  "additionalProperties": false,
  "$defs": {
    "enrollmentExtensions": {
      "description": "Extension properties related to enrollments",
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": true
    }
  }
}

D.14 RoleEnablement

An array to store associated dates for a entity. Specifically, additional important date and time offsets surrounding when specific roles may be associated with the course offering before or after the official start and end dates. These dates are meant to be considered additional metadata about the course offering and applied independent of the startDate and endDate. They are not intended to be used to as replacements.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_roleenablement-jsonschema1.json",
  "title": "JSON Schema for the RoleEnablement class.",
  "description": "An array to store associated dates for a entity. Specifically, additional important date and time offsets surrounding when specific roles may be associated with the course offering before or after the official start and end dates. These dates are meant to be considered additional metadata about the course offering and applied independent of the startDate and endDate. They are not intended to be used to as replacements.",
  "type": "object",
  "properties": {
    "role": {
      "description": "The role of the associated person in the given context.",
      "$comment": "Origin: RoleTypeEnum (EnumExt); The set of permitted values for `roleType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "member",
            "chair",
            "staff",
            "student",
            "administrator",
            "aide",
            "guardian",
            "parent",
            "proctor",
            "relative",
            "teacher",
            "advisor",
            "teachingAssistant"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "startDate": {
      "description": "The start date of the associated event.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "endDate": {
      "description": "The end date of the associated event.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    }
  },
  "required": [
    "role"
  ],
  "additionalProperties": false
}

D.15 Organization

An administrative unit, it can be a division or subdivision of an institution or the institution itself. Examples: College of Arts and Letters, English Department.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_organization-jsonschema1.json",
  "title": "JSON Schema for the Organization class.",
  "description": "An administrative unit, it can be a division or subdivision of an institution or the institution itself. Examples: College of Arts and Letters, English Department.",
  "type": "object",
  "properties": {
    "sourcedId": {
      "description": "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
      "$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
      "type": "string"
    },
    "recordLanguage": {
      "description": "The primary language used in the described entity.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "primaryCode": {
      "$ref": "#/$defs/IdentifierEntry"
    },
    "otherCodes": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/IdentifierEntry"
      }
    },
    "name": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "description": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "organizationType": {
      "description": "The type of Organization.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "parent": {
      "description": "A reference to a parent organization.",
      "$comment": "Origin: OrganizationGUIDRef (DerivedType); A reference to an `Organization` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "children": {
      "type": "array",
      "items": {
        "description": "References to child organizations.",
        "$comment": "Origin: OrganizationGUIDRef (DerivedType); A reference to an `Organization` object that has an allocated sourcedId (`GUID`).",
        "type": "string"
      }
    },
    "primaryAddress": {
      "$ref": "#/$defs/OptionallyTypedAddress"
    },
    "otherAddresses": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/TypedAddress"
      }
    },
    "dateLastModified": {
      "description": "A timestamp describing when this record was last modified.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "recordStatus": {
      "description": "The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so.",
      "$comment": "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "inactive"
      ]
    },
    "extensions": {
      "$ref": "#/$defs/organizationExtensions"
    }
  },
  "required": [
    "sourcedId",
    "recordLanguage",
    "name",
    "organizationType",
    "recordStatus"
  ],
  "additionalProperties": false,
  "$defs": {
    "IdentifierEntry": {
      "description": "A container to transmit additional needed identifiers",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "identifierType": {
          "description": "The identifier type.",
          "$comment": "Origin: IdentifierTypeEnum (EnumExt)",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "systemId",
                "productId",
                "userName",
                "accountId",
                "emailAddress",
                "nationalIdentityNumber",
                "isbn",
                "issn",
                "lisSourcedId",
                "oneRosterSourcedId",
                "sisSourcedId",
                "ltiContextId",
                "ltiDeploymentId",
                "ltiToolId",
                "ltiPlatformId",
                "ltiUserId",
                "identifier"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        }
      },
      "required": [
        "identifier",
        "identifierType"
      ],
      "additionalProperties": false
    },
    "LanguageTypedString": {
      "description": "A String with an associated language code.",
      "type": "object",
      "properties": {
        "recordLanguage": {
          "description": "The primary language used in the described entity.",
          "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
          "type": "string",
          "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
        },
        "value": {
          "description": "No description supplied.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "recordLanguage",
        "value"
      ],
      "additionalProperties": false
    },
    "OptionallyTypedAddress": {
      "description": "A optionally typed address.",
      "type": "object",
      "properties": {
        "addressType": {
          "description": "The type of address. This is based on an extensible enumerated vocabulary.",
          "$comment": "Origin: AddressTypeEnum (EnumExt); The set of permitted values for `addressType`.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "visitingAddress",
                "mailingAddress",
                "permanentAddress",
                "deliveryAddress",
                "billingAddress",
                "homeAddress",
                "workAddress",
                "formerAddress"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "addressCountry": {
          "description": "A country.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "addressCountryCode": {
          "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
          "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
          "type": "string"
        },
        "addressRegion": {
          "description": "A region within the country.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "addressLocality": {
          "description": "A locality within the region.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "streetAddress": {
          "description": "A street address within the locality.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "postOfficeBoxNumber": {
          "description": "A post office box number for PO box addresses.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "postalCode": {
          "description": "A postal code.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "geo": {
          "$ref": "#/$defs/GeoCoordinates"
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "TypedAddress": {
      "description": "A typed address.",
      "type": "object",
      "properties": {
        "addressType": {
          "description": "The type of address. This is based on an extensible enumerated vocabulary.",
          "$comment": "Origin: AddressTypeEnum (EnumExt); The set of permitted values for `addressType`.",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "visitingAddress",
                "mailingAddress",
                "permanentAddress",
                "deliveryAddress",
                "billingAddress",
                "homeAddress",
                "workAddress",
                "formerAddress"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        },
        "addressCountry": {
          "description": "A country.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "addressCountryCode": {
          "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
          "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
          "type": "string"
        },
        "addressRegion": {
          "description": "A region within the country.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "addressLocality": {
          "description": "A locality within the region.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "streetAddress": {
          "description": "A street address within the locality.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "postOfficeBoxNumber": {
          "description": "A post office box number for PO box addresses.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "postalCode": {
          "description": "A postal code.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        },
        "geo": {
          "$ref": "#/$defs/GeoCoordinates"
        }
      },
      "required": [
        "addressType"
      ],
      "additionalProperties": false
    },
    "GeoCoordinates": {
      "description": "The geographic coordinates of a location.",
      "type": "object",
      "properties": {
        "latitude": {
          "description": "The latitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "additionalProperties": false
    },
    "organizationExtensions": {
      "description": "Extension properties related to education organizations",
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": true
    }
  }
}

D.16 AcademicSession

A calendar period during which a school or institution schedules classes, offerings, or other units of learning for availability.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_academicsession-jsonschema1.json",
  "title": "JSON Schema for the AcademicSession class.",
  "description": "A calendar period during which a school or institution schedules classes, offerings, or other units of learning for availability.",
  "type": "object",
  "properties": {
    "sourcedId": {
      "description": "The sourcedId of the object. This is the interoperability identifier that systems will refer to when making API calls, or when needing to identify an object. Systems SHOULD be able to map whichever local ids (e.g. database key fields) they use to sourcedId. The sourcedId of an object MUST be an anonymized or pseudonymized identifier of an entity and as such will not contain Personally Identifiable Information (PII) or Personal Data (PD).",
      "$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
      "type": "string"
    },
    "recordLanguage": {
      "description": "The primary language used in the described entity.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "primaryCode": {
      "$ref": "#/$defs/IdentifierEntry"
    },
    "otherCodes": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/IdentifierEntry"
      }
    },
    "sessionType": {
      "description": "The type of academic session. This is based upon an enumerated vocabulary.",
      "$comment": "Origin: AcademicSessionTypeEnum (EnumExt); The set of permitted values used to describe the temporal boundaries of an education.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "gradingPeriod",
            "semester",
            "schoolYear",
            "term",
            "studyPeriod"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "title": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "startDate": {
      "description": "The start date of the associated event.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "endDate": {
      "description": "The end date of the associated event.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "parent": {
      "description": "A reference to another Edu-API Academic Session that serves as a parent `AcademicSession`.",
      "$comment": "Origin: AcademicSessionGUIDRef (DerivedType); A reference to an `AcademicSession` object that has an allocated sourcedId (`GUID`).",
      "type": "string"
    },
    "children": {
      "type": "array",
      "items": {
        "description": "A reference to another Edu-API Academic Session that serves as a Child `AcademicSession`s.",
        "$comment": "Origin: AcademicSessionGUIDRef (DerivedType); A reference to an `AcademicSession` object that has an allocated sourcedId (`GUID`).",
        "type": "string"
      }
    },
    "recordStatus": {
      "description": "The status of this record. A record which is flagged 'toBeDeleted' is to be considered safe to delete. Systems can delete records that are flagged as such if they wish, but they are not required to do so.",
      "$comment": "Origin: RecordStatusTypeEnum (Enum); The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
      "type": "string",
      "enum": [
        "active",
        "deleted",
        "inactive"
      ]
    },
    "dateLastModified": {
      "description": "A timestamp describing when this record was last modified.",
      "$comment": "Origin: DateTimeZ (DerivedType); A `DateTime` with the trailing timezone specifier included, e.g. `2021-09-07T02:09:59+02:00`",
      "type": "string",
      "format": "date-time"
    },
    "extensions": {
      "$ref": "#/$defs/academicSessionExtensions"
    }
  },
  "required": [
    "sourcedId",
    "recordLanguage",
    "recordStatus"
  ],
  "additionalProperties": false,
  "$defs": {
    "IdentifierEntry": {
      "description": "A container to transmit additional needed identifiers",
      "type": "object",
      "properties": {
        "identifier": {
          "description": "An identifier.",
          "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
          "type": "string"
        },
        "identifierType": {
          "description": "The identifier type.",
          "$comment": "Origin: IdentifierTypeEnum (EnumExt)",
          "oneOf": [
            {
              "type": "string",
              "enum": [
                "systemId",
                "productId",
                "userName",
                "accountId",
                "emailAddress",
                "nationalIdentityNumber",
                "isbn",
                "issn",
                "lisSourcedId",
                "oneRosterSourcedId",
                "sisSourcedId",
                "ltiContextId",
                "ltiDeploymentId",
                "ltiToolId",
                "ltiPlatformId",
                "ltiUserId",
                "identifier"
              ]
            },
            {
              "type": "string",
              "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
            }
          ]
        }
      },
      "required": [
        "identifier",
        "identifierType"
      ],
      "additionalProperties": false
    },
    "LanguageTypedString": {
      "description": "A String with an associated language code.",
      "type": "object",
      "properties": {
        "recordLanguage": {
          "description": "The primary language used in the described entity.",
          "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
          "type": "string",
          "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
        },
        "value": {
          "description": "No description supplied.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "recordLanguage",
        "value"
      ],
      "additionalProperties": false
    },
    "academicSessionExtensions": {
      "description": "Extension properties related to education academic sessions",
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": true
    }
  }
}

D.17 IdentifierEntry

A container to transmit additional needed identifiers

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_identifierentry-jsonschema1.json",
  "title": "JSON Schema for the IdentifierEntry class.",
  "description": "A container to transmit additional needed identifiers",
  "type": "object",
  "properties": {
    "identifier": {
      "description": "An identifier.",
      "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
      "type": "string"
    },
    "identifierType": {
      "description": "The identifier type.",
      "$comment": "Origin: IdentifierTypeEnum (EnumExt)",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "systemId",
            "productId",
            "userName",
            "accountId",
            "emailAddress",
            "nationalIdentityNumber",
            "isbn",
            "issn",
            "lisSourcedId",
            "oneRosterSourcedId",
            "sisSourcedId",
            "ltiContextId",
            "ltiDeploymentId",
            "ltiToolId",
            "ltiPlatformId",
            "ltiUserId",
            "identifier"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    }
  },
  "required": [
    "identifier",
    "identifierType"
  ],
  "additionalProperties": false
}

D.18 Location

A container for describing the location an entity takes place at.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_location-jsonschema1.json",
  "title": "JSON Schema for the Location class.",
  "description": "A container for describing the location an entity takes place at.",
  "type": "object",
  "properties": {
    "identifier": {
      "description": "An identifier.",
      "$comment": "Origin: Identifier (DerivedType); A `NormalizedString` that functions as an identifier.",
      "type": "string"
    },
    "description": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/LanguageTypedString"
      }
    },
    "geoLocation": {
      "$ref": "#/$defs/GeoCoordinates"
    }
  },
  "required": [],
  "additionalProperties": false,
  "$defs": {
    "LanguageTypedString": {
      "description": "A String with an associated language code.",
      "type": "object",
      "properties": {
        "recordLanguage": {
          "description": "The primary language used in the described entity.",
          "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
          "type": "string",
          "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
        },
        "value": {
          "description": "No description supplied.",
          "$comment": "Origin: String (PrimitiveType); Character strings.",
          "type": "string"
        }
      },
      "required": [
        "recordLanguage",
        "value"
      ],
      "additionalProperties": false
    },
    "GeoCoordinates": {
      "description": "The geographic coordinates of a location.",
      "type": "object",
      "properties": {
        "latitude": {
          "description": "The latitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "additionalProperties": false
    }
  }
}

D.19 GeoCoordinates

The geographic coordinates of a location.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_geocoordinates-jsonschema1.json",
  "title": "JSON Schema for the GeoCoordinates class.",
  "description": "The geographic coordinates of a location.",
  "type": "object",
  "properties": {
    "latitude": {
      "description": "The latitude of the location [[WGS-84]].",
      "$comment": "Origin: Float (PrimitiveType)",
      "type": "number"
    },
    "longitude": {
      "description": "The longitude of the location [[WGS-84]].",
      "$comment": "Origin: Float (PrimitiveType)",
      "type": "number"
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "additionalProperties": false
}

D.20 Address

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_address-jsonschema1.json",
  "title": "JSON Schema for the Address class.",
  "description": "No description supplied.",
  "type": "object",
  "properties": {
    "addressCountry": {
      "description": "A country.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "addressCountryCode": {
      "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
      "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
      "type": "string"
    },
    "addressRegion": {
      "description": "A region within the country.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "addressLocality": {
      "description": "A locality within the region.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "streetAddress": {
      "description": "A street address within the locality.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "postOfficeBoxNumber": {
      "description": "A post office box number for PO box addresses.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "postalCode": {
      "description": "A postal code.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "geo": {
      "$ref": "#/$defs/GeoCoordinates"
    }
  },
  "required": [],
  "additionalProperties": false,
  "$defs": {
    "GeoCoordinates": {
      "description": "The geographic coordinates of a location.",
      "type": "object",
      "properties": {
        "latitude": {
          "description": "The latitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "additionalProperties": false
    }
  }
}

D.21 TypedAddress

A typed address.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_typedaddress-jsonschema1.json",
  "title": "JSON Schema for the TypedAddress class.",
  "description": "A typed address.",
  "type": "object",
  "properties": {
    "addressType": {
      "description": "The type of address. This is based on an extensible enumerated vocabulary.",
      "$comment": "Origin: AddressTypeEnum (EnumExt); The set of permitted values for `addressType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "visitingAddress",
            "mailingAddress",
            "permanentAddress",
            "deliveryAddress",
            "billingAddress",
            "homeAddress",
            "workAddress",
            "formerAddress"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "addressCountry": {
      "description": "A country.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "addressCountryCode": {
      "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
      "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
      "type": "string"
    },
    "addressRegion": {
      "description": "A region within the country.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "addressLocality": {
      "description": "A locality within the region.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "streetAddress": {
      "description": "A street address within the locality.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "postOfficeBoxNumber": {
      "description": "A post office box number for PO box addresses.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "postalCode": {
      "description": "A postal code.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "geo": {
      "$ref": "#/$defs/GeoCoordinates"
    }
  },
  "required": [
    "addressType"
  ],
  "additionalProperties": false,
  "$defs": {
    "GeoCoordinates": {
      "description": "The geographic coordinates of a location.",
      "type": "object",
      "properties": {
        "latitude": {
          "description": "The latitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "additionalProperties": false
    }
  }
}

D.22 OptionallyTypedAddress

A optionally typed address.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_optionallytypedaddress-jsonschema1.json",
  "title": "JSON Schema for the OptionallyTypedAddress class.",
  "description": "A optionally typed address.",
  "type": "object",
  "properties": {
    "addressType": {
      "description": "The type of address. This is based on an extensible enumerated vocabulary.",
      "$comment": "Origin: AddressTypeEnum (EnumExt); The set of permitted values for `addressType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "visitingAddress",
            "mailingAddress",
            "permanentAddress",
            "deliveryAddress",
            "billingAddress",
            "homeAddress",
            "workAddress",
            "formerAddress"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "addressCountry": {
      "description": "A country.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "addressCountryCode": {
      "description": "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
      "$comment": "Origin: CountryCode (DerivedType); A two-digit ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
      "type": "string"
    },
    "addressRegion": {
      "description": "A region within the country.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "addressLocality": {
      "description": "A locality within the region.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "streetAddress": {
      "description": "A street address within the locality.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "postOfficeBoxNumber": {
      "description": "A post office box number for PO box addresses.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "postalCode": {
      "description": "A postal code.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "geo": {
      "$ref": "#/$defs/GeoCoordinates"
    }
  },
  "required": [],
  "additionalProperties": false,
  "$defs": {
    "GeoCoordinates": {
      "description": "The geographic coordinates of a location.",
      "type": "object",
      "properties": {
        "latitude": {
          "description": "The latitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location [[WGS-84]].",
          "$comment": "Origin: Float (PrimitiveType)",
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "additionalProperties": false
    }
  }
}

D.23 TypedPhone

A typed phone number.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_typedphone-jsonschema1.json",
  "title": "JSON Schema for the TypedPhone class.",
  "description": "A typed phone number.",
  "type": "object",
  "properties": {
    "phoneType": {
      "description": "The type of phone number. This is based on an extensible enumerated vocabulary.",
      "$comment": "Origin: PhoneTypeEnum (EnumExt); The set of permitted values for `phoneType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "homePhone",
            "workPhone",
            "icePhone"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "phone": {
      "description": "A phone number.",
      "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
      "type": "string"
    }
  },
  "required": [
    "phoneType",
    "phone"
  ],
  "additionalProperties": false
}

D.24 OptionallyTypedPhone

An optionally typed phone number.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_optionallytypedphone-jsonschema1.json",
  "title": "JSON Schema for the OptionallyTypedPhone class.",
  "description": "An optionally typed phone number.",
  "type": "object",
  "properties": {
    "phoneType": {
      "description": "The type of address. This is based on an extensible enumerated vocabulary.",
      "$comment": "Origin: PhoneTypeEnum (EnumExt); The set of permitted values for `phoneType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "homePhone",
            "workPhone",
            "icePhone"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "phone": {
      "description": "A phone number.",
      "$comment": "Origin: PhoneNumber (DerivedType); A `NormalizedString` representing a phone number.",
      "type": "string"
    }
  },
  "required": [
    "phone"
  ],
  "additionalProperties": false
}

D.25 TypedEmail

A typed email address.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_typedemail-jsonschema1.json",
  "title": "JSON Schema for the TypedEmail class.",
  "description": "A typed email address.",
  "type": "object",
  "properties": {
    "emailType": {
      "description": "The type of email address. This is based on an extensible enumerated vocabulary.",
      "$comment": "Origin: EmailTypeEnum (EnumExt); The set of permitted values for `emailType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "homeEmail",
            "workEmail",
            "iceEmail"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "email": {
      "description": "An email address.",
      "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
      "type": "string"
    }
  },
  "required": [
    "emailType",
    "email"
  ],
  "additionalProperties": false
}

D.26 OptionallyTypedEmail

An optionally typed email address.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_optionallytypedemail-jsonschema1.json",
  "title": "JSON Schema for the OptionallyTypedEmail class.",
  "description": "An optionally typed email address.",
  "type": "object",
  "properties": {
    "emailType": {
      "description": "The type of email address.",
      "$comment": "Origin: EmailTypeEnum (EnumExt); The set of permitted values for `emailType`.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "homeEmail",
            "workEmail",
            "iceEmail"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "email": {
      "description": "An email address.",
      "$comment": "Origin: EmailAddress (DerivedType); A `NormalizedString` representing an email address.",
      "type": "string"
    }
  },
  "required": [
    "email"
  ],
  "additionalProperties": false
}

D.27 educationOfferingExtensions

Extension properties related to education offerings

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_educationofferingextensions-jsonschema1.json",
  "title": "JSON Schema for the educationOfferingExtensions class.",
  "description": "Extension properties related to education offerings",
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": true
}

D.28 educationExtensions

Extension properties related to education templates

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_educationextensions-jsonschema1.json",
  "title": "JSON Schema for the educationExtensions class.",
  "description": "Extension properties related to education templates",
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": true
}

D.29 enrollmentExtensions

Extension properties related to enrollments

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_enrollmentextensions-jsonschema1.json",
  "title": "JSON Schema for the enrollmentExtensions class.",
  "description": "Extension properties related to enrollments",
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": true
}

D.30 personExtensions

Extension properties related to Edu-API persons

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_personextensions-jsonschema1.json",
  "title": "JSON Schema for the personExtensions class.",
  "description": "Extension properties related to Edu-API persons",
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": true
}

D.31 affiliationExtensions

Extension properties related to affiliations

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_affiliationextensions-jsonschema1.json",
  "title": "JSON Schema for the affiliationExtensions class.",
  "description": "Extension properties related to affiliations",
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": true
}

D.32 organizationExtensions

Extension properties related to education organizations

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_organizationextensions-jsonschema1.json",
  "title": "JSON Schema for the organizationExtensions class.",
  "description": "Extension properties related to education organizations",
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": true
}

D.33 academicSessionExtensions

Extension properties related to education academic sessions

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_academicsessionextensions-jsonschema1.json",
  "title": "JSON Schema for the academicSessionExtensions class.",
  "description": "Extension properties related to education academic sessions",
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": true
}

D.34 EducationOfferingTypeEnum

The set of permitted values for educationOfferingType.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_educationofferingtypeenum-jsonschema1.json",
  "title": "JSON Schema for the EducationOfferingTypeEnum class.",
  "description": "The set of permitted values for `educationOfferingType`.",
  "type": "object",
  "properties": {
    "collection": {
      "description": "A collection of courses or other learning units, used to group them into a coherent whole for enrollment, administrative, or other purposes. A Program is one example of a Course Collection.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "course": {
      "description": "Relates a course to one or more delivery scenarios.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "component": {
      "description": "A subsection of a courseOffering. It may be a lesson or separately enrollable unit within a courseOffering. For example, Biology 101 may consist of a Lecture component offering and a Lab component offering",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}

D.35 AffiliationStatusEnum

The set of permitted values for affiliationStatus.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_affiliationstatusenum-jsonschema1.json",
  "title": "JSON Schema for the AffiliationStatusEnum class.",
  "description": "The set of permitted values for `affiliationStatus`.",
  "type": "object",
  "properties": {
    "active": {
      "description": "The affiliation is active.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "inactive": {
      "description": "The affiliation is inactive.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "auditing": {
      "description": "The affiliation is under audit.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "withdrawn": {
      "description": "The affiliation has been withdrawn.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}

D.36 AgentTypeEnum

The set of permitted values for agentType.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_agenttypeenum-jsonschema1.json",
  "title": "JSON Schema for the AgentTypeEnum class.",
  "description": "The set of permitted values for `agentType`.",
  "type": "object",
  "properties": {
    "parent": {
      "description": "Mother or father of the user.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "guardian": {
      "description": "Guardian of the user and NOT the Mother or Father. May also be a Relative.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "emergencyContact": {
      "description": "Any person designated as a contact in case of emergencies.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}

D.37 AddressTypeEnum

The set of permitted values for addressType.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_addresstypeenum-jsonschema1.json",
  "title": "JSON Schema for the AddressTypeEnum class.",
  "description": "The set of permitted values for `addressType`.",
  "type": "object",
  "properties": {
    "visitingAddress": {
      "description": "A visiting address.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "mailingAddress": {
      "description": "A mailing address.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "permanentAddress": {
      "description": "A permanent address.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "deliveryAddress": {
      "description": "A delivery address.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "billingAddress": {
      "description": "A billing address.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "homeAddress": {
      "description": "A home address.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "workAddress": {
      "description": "A work address.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "formerAddress": {
      "description": "A former (previous) address.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}

D.38 PhoneTypeEnum

The set of permitted values for phoneType.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_phonetypeenum-jsonschema1.json",
  "title": "JSON Schema for the PhoneTypeEnum class.",
  "description": "The set of permitted values for `phoneType`.",
  "type": "object",
  "properties": {
    "homePhone": {
      "description": "A home phone number.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "workPhone": {
      "description": "A work phone number.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "icePhone": {
      "description": "A phone number to use in case of emergency.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}

D.39 EmailTypeEnum

The set of permitted values for emailType.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_emailtypeenum-jsonschema1.json",
  "title": "JSON Schema for the EmailTypeEnum class.",
  "description": "The set of permitted values for `emailType`.",
  "type": "object",
  "properties": {
    "homeEmail": {
      "description": "A home email address.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "workEmail": {
      "description": "A work email address.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "iceEmail": {
      "description": "An email address to use in case of emergency.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}

D.40 EducationLevelEnum

The set of permitted values for edcucationLevel.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_educationlevelenum-jsonschema1.json",
  "title": "JSON Schema for the EducationLevelEnum class.",
  "description": "The set of permitted values for `edcucationLevel`.",
  "type": "object",
  "properties": {
    "graduate": {
      "description": "A course of study that takes place after the award of an undergraduate academic degree.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "undergraduate": {
      "description": "A course of study that awards a bachelor's or equivelant degree.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "graduate",
    "undergraduate"
  ],
  "additionalProperties": false
}

D.41 CreditTypeEnum

The set of permitted values for creditType.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_credittypeenum-jsonschema1.json",
  "title": "JSON Schema for the CreditTypeEnum class.",
  "description": "The set of permitted values for `creditType`.",
  "type": "object",
  "properties": {
    "credit": {
      "description": "The course of study awards credit towards a designated achievement or degree.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "nonCredit": {
      "description": "The course of study does not award credit towards a designated achievement or degree.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "credit",
    "nonCredit"
  ],
  "additionalProperties": false
}

D.42 CollectionTypeEnum

The set of permitted values for collectionType.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_collectiontypeenum-jsonschema1.json",
  "title": "JSON Schema for the CollectionTypeEnum class.",
  "description": "The set of permitted values for `collectionType`.",
  "type": "object",
  "properties": {
    "program": {
      "description": "An organized and defined set of learning activities that enable a student to develop knowledge. A program typically leads to a degree or some other type of accreditation.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "generalEducation": {
      "description": "A grouping of educational units or coursework that represent an general education.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "requiredCollection": {
      "description": "A grouping of educational units or coursework that identifies the contained contents as being needed for completion.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "electiveCollection": {
      "description": "A grouping of educational units or coursework taken at the students discretion.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "capstoneCollection": {
      "description": "The apogee or completion of a students coursework",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "majorCollection": {
      "description": "A grouping of educational units or coursework that upon completion award a Major in that line of study",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "minorCollection": {
      "description": "A grouping of educational units or coursework that upon completion award a Minor in that line of study",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "programSpecialization": {
      "description": "A grouping of educational units or coursework that",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "nonDegreeCollection": {
      "description": "A set of educational units that do not contribute towards a degree.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "program",
    "generalEducation",
    "requiredCollection",
    "electiveCollection",
    "capstoneCollection",
    "majorCollection",
    "minorCollection",
    "programSpecialization",
    "nonDegreeCollection"
  ],
  "additionalProperties": false
}

D.43 CourseTypeEnum

The set of permitted values for courseType.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_coursetypeenum-jsonschema1.json",
  "title": "JSON Schema for the CourseTypeEnum class.",
  "description": "The set of permitted values for `courseType`.",
  "type": "object",
  "properties": {
    "standard": {
      "description": "A normal or general type of course",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "honors": {
      "description": "An education that offers a deeper, or more complex comparable learning than experiences typically found at institutions of higher education",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "research": {
      "description": "A course that is focused on investigation of a specific topic.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "independentStudy": {
      "description": "A course undertaken by an individual student with little to no supervision.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "practicum": {
      "description": "A course that is designed to give students supervised practical application of a previously or concurrently studied field or theory.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "internship": {
      "description": "A course that offers real world work experience in a professional setting.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "studyAbroad": {
      "description": "A course undertaken in a foreign country",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "capstone": {
      "description": "The culminating and usually integrative experience of an educational program",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "clinical": {
      "description": "A nursing course that includes clinical experience",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "correspondence": {
      "description": "A course of study in which student and teachers communicate by mail.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "fieldExperience": {
      "description": "A course that provides an opportunity to apply knowledge gained in the classroom with supervised practice in the field",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "seminar": {
      "description": "A small, discussion-based course.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "thesis": {
      "description": "A independent research course in which you conduct your thesis research with guidance.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "standard",
    "honors",
    "research",
    "independentStudy",
    "practicum",
    "internship",
    "studyAbroad",
    "capstone",
    "clinical",
    "correspondence",
    "fieldExperience",
    "seminar",
    "thesis"
  ],
  "additionalProperties": false
}

D.44 ComponentTypeEnum

The set of permitted values for componentType.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_componenttypeenum-jsonschema1.json",
  "title": "JSON Schema for the ComponentTypeEnum class.",
  "description": "The set of permitted values for `componentType`.",
  "type": "object",
  "properties": {
    "individualizedInstruction": {
      "description": "tbd",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "integratedLectureLab": {
      "description": "A component that combines a lecture and a lab into one offering.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "laboratory": {
      "description": "A component portion that takes place in a laboratory.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "lecture": {
      "description": "A component talk to an audience.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "practicum": {
      "description": "A component that is designed to give students supervised practical application of a previously or concurrently studied field or theory.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "recitation": {
      "description": "A component that provides time for the application of conceptual knowledge and extension of instruction that occurs in lecture through problem-solving or discussion.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "research": {
      "description": "A component that is focused on investigation of a specific topic.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "seminar": {
      "description": "A small, discussion-based component.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "independentStudy": {
      "description": "A component undertaken by an individual student with little to no supervision",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "fieldExperience": {
      "description": "A component that provides an opportunity to apply knowledge gained in the classroom with supervised practice in the field",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "exam": {
      "description": "A component that is used to represent students who are taking an exam.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "individualizedInstruction",
    "integratedLectureLab",
    "laboratory",
    "lecture",
    "practicum",
    "recitation",
    "research",
    "seminar",
    "independentStudy",
    "fieldExperience",
    "exam"
  ],
  "additionalProperties": false
}

D.45 OfferingFormatEnum

The set of permitted values for offeringFormat.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_offeringformatenum-jsonschema1.json",
  "title": "JSON Schema for the OfferingFormatEnum class.",
  "description": "The set of permitted values for `offeringFormat`.",
  "type": "object",
  "properties": {
    "online": {
      "description": "The offering is given completely in an online/internet based mode.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "blended": {
      "description": "The offering has a combination of online and in person instruction.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "onGround": {
      "description": "The offering is given completely in person in a physical space.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "online",
    "blended",
    "onGround"
  ],
  "additionalProperties": false
}

D.46 RegistrationStatusEnum

The set of permitted values for registrationStatus.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_registrationstatusenum-jsonschema1.json",
  "title": "JSON Schema for the RegistrationStatusEnum class.",
  "description": "The set of permitted values for `registrationStatus`.",
  "type": "object",
  "properties": {
    "open": {
      "description": "Registration is open and accepting new requests.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "closed": {
      "description": "Registration is closed and no longer accepting new requests.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "pending": {
      "description": "Registration has been requested but that request is still pending.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "waitlist": {
      "description": "The offering is full and the person has been put on a waitlist for registration.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "open",
    "closed",
    "pending",
    "waitlist"
  ],
  "additionalProperties": false
}

D.47 EnrollmentStatusEnum

The set of permitted values for enrollmentStatus.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_enrollmentstatusenum-jsonschema1.json",
  "title": "JSON Schema for the EnrollmentStatusEnum class.",
  "description": "The set of permitted values for `enrollmentStatus`.",
  "type": "object",
  "properties": {
    "onLeave": {
      "description": "The person has an excused absence from the education.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "withdrawn": {
      "description": "The person has made a decision to leave the education prior to completion.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "accepted": {
      "description": "The person has been offered a place in the education.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "pending": {
      "description": "The person has requested admission to an education but that request has not yet been processed.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "cancelled": {
      "description": "The person has turned down the offered seat before the education stats.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "registered": {
      "description": "The person has been accepted into an education and has selected offerings to enroll on.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "revoked": {
      "description": "The organization has withdrawn a registration for a person.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "Interruption": {
      "description": "The person is taking a short break from their education.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "finished": {
      "description": "The person has passed examination and no more activities are expected.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "withdrawnFailing": {
      "description": "The person has made a decision to leave the education prior to completion but after the completion of the add drop period while having a currently failing grade. Withdrawn will often result in a record in a students official transcript.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "withdrawnPassing": {
      "description": "The person has made a decision to leave the education prior to completion but after the completion of the add drop period while having a currently passing grade. Withdrawn will often result in a record in a students official transcript.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "dropped": {
      "description": "The person has left the education within the allotted add/drop period. This will often not result in a record on the students official transcript.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "suspended": {
      "description": "The organization has paused the persons seat in the education.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "enrolled": {
      "description": "The person has accepted the seat and has been activated in the education.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "declined": {
      "description": "Following review, the organization did not offer a seat in the education to the person.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "deferred": {
      "description": "A person has been offered a spot in an education but has chosen to delay their start date. A person with a deferred enrollment will be issued a new enrollment at the time of their actual start.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "onHold": {
      "description": "The organization has placed a block on the person's enrollment based on procedural requirements. e.g. They have not completed the required prerequisite material.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "onLeave",
    "withdrawn",
    "accepted",
    "pending",
    "cancelled",
    "registered",
    "revoked",
    "Interruption",
    "finished",
    "withdrawnFailing",
    "withdrawnPassing",
    "dropped",
    "suspended",
    "enrolled",
    "declined",
    "deferred",
    "onHold"
  ],
  "additionalProperties": false
}

D.48 IdentifierTypeEnum

Note
TBD - split into subgroups per entity type
{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_identifiertypeenum-jsonschema1.json",
  "title": "JSON Schema for the IdentifierTypeEnum class.",
  "description": "No description supplied.",
  "type": "object",
  "properties": {
    "systemId": {
      "description": "Identifier assigned to an entity in context of a specific system.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "productId": {
      "description": "Identifier assigned to a specific product.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "userName": {
      "description": "the name of a user.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "accountId": {
      "description": "Identifier assigned to a specific account.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "emailAddress": {
      "description": "An email address.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "nationalIdentityNumber": {
      "description": "Identifier assigned by the governement of the person. e.g. a social security number in the USA",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "isbn": {
      "description": "International Standard Book Number that serve as product identifiers for Books.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "issn": {
      "description": "International Standard Book Number that serve as product identifiers for periodicals.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "lisSourcedId": {
      "description": "An entities sourcedId in Learning Information System (LIS) data exchanges.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "oneRosterSourcedId": {
      "description": "An entities sourcedId in OneRoster(OR) data exchanges.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "sisSourcedId": {
      "description": "Student Information System Identifier.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "ltiContextId": {
      "description": "Identifier for an entity in the context of an Learning Tools Interoperability(LTI) Launch.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "ltiDeploymentId": {
      "description": "Identifier for a specific Learning Tools Interoperability(LTI) deployment of a tool.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "ltiToolId": {
      "description": "Identifier of a tool in an Learning Tools Interoperability(LTI) integration.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "ltiPlatformId": {
      "description": "Identifier of a platform in an Learning Tools Interoperability(LTI) integration.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "ltiUserId": {
      "description": "Identifier of a user in an Learning Tools Interoperability(LTI) integration.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "identifier": {
      "description": "Generic Identifier.",
      "$comment": "Origin: BaseTerm (DerivedType); A term in an enumeration which serves as a common term for all other entries in this enumeration, and as such is less specific. The lexical constraints are the same as for `Term`.",
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}

D.49 PersonNameTypeEnum

The set of permitted values for name types.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_personnametypeenum-jsonschema1.json",
  "title": "JSON Schema for the PersonNameTypeEnum class.",
  "description": "The set of permitted values for name types.",
  "type": "object",
  "properties": {
    "legalName": {
      "description": "A legal name.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "preferredName": {
      "description": "A preferred (lived) name.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "phoneticName": {
      "description": "Phonetic pronunciation instructions for a name. Provided values MUST be valid to the syntax of the International Phonetic Alphabet [[IPA]].",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "aliasName": {
      "description": "A fictitious name, pseudonym or alias.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "formerName": {
      "description": "A formerly used name. Includes birth name.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}

D.50 GenderEnum

The gender of this person. Other values than those defined may be given to capture the gender identity of this Person.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_genderenum-jsonschema1.json",
  "title": "JSON Schema for the GenderEnum class.",
  "description": "The gender of this person. Other values than those defined may be given to capture the gender identity of this Person.",
  "type": "object",
  "properties": {
    "male": {
      "description": "The male gender.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "female": {
      "description": "The female gender.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "unspecified": {
      "description": "The gender is unknown or unspecified.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "other": {
      "description": "Another gender identity.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "male",
    "female"
  ],
  "additionalProperties": false
}

D.51 RoleTypeEnum

The set of permitted values for roleType.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_roletypeenum-jsonschema1.json",
  "title": "JSON Schema for the RoleTypeEnum class.",
  "description": "The set of permitted values for `roleType`.",
  "type": "object",
  "properties": {
    "member": {
      "description": "A person belonging to the group in reference.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "chair": {
      "description": "A person who presides/leads over a group.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "staff": {
      "description": "An employee of the organization.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "student": {
      "description": "A person who is studying at an organization.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "administrator": {
      "description": "A person who oversees management of some aspect in an organization.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "aide": {
      "description": "Someone who provides appropriate aid to the person but NOT also one of the other roles.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "guardian": {
      "description": "Guardian of the user and NOT the Mother or Father. May also be a Relative.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "parent": {
      "description": "Mother or father of the user.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "proctor": {
      "description": "A person who oversees a student examination.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "relative": {
      "description": "A relative of the user and NOT the Mother or Father. May also be the Guardian.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "teacher": {
      "description": "A Teacher at organization e.g. School. May be used for enrollment.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "advisor": {
      "description": "A person who offers students information pertaining to their degree, courses of study, and university regulations.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "teachingAssistant": {
      "description": "A person who teaches or supports an educational offering but is not the instructor of record.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}

D.52 AcademicSessionTypeEnum

The set of permitted values used to describe the temporal boundaries of an education.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_academicsessiontypeenum-jsonschema1.json",
  "title": "JSON Schema for the AcademicSessionTypeEnum class.",
  "description": "The set of permitted values used to describe the temporal boundaries of an education.",
  "type": "object",
  "properties": {
    "gradingPeriod": {
      "description": "Denotes a period over which some grade/result is to be awarded.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "semester": {
      "description": "Denotes the school year.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "schoolYear": {
      "description": "Denotes a semester period. There are typically two semesters per schoolYear.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "term": {
      "description": "Denotes a term period. Typically there are three terms per schoolYear.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "studyPeriod": {
      "description": "Denotes a subdivision of an academic term.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "gradingPeriod",
    "semester",
    "schoolYear",
    "term",
    "studyPeriod"
  ],
  "additionalProperties": false
}

D.53 RecordStatusTypeEnum

The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_recordstatustypeenum-jsonschema1.json",
  "title": "JSON Schema for the RecordStatusTypeEnum class.",
  "description": "The set of values to describe the state of a record in the source system. For systems migrating from, or making use of OneRoster, deleted is to be considered synonymous with toBeDeleted.",
  "type": "object",
  "properties": {
    "active": {
      "description": "The record is present and actively used in the system.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "deleted": {
      "description": "The record has been, or will immediately be, removed from the upstream system; downstream systems can also remove this record as it won't be used again.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "inactive": {
      "description": "The record is present, but not actively used in the system (it should not be removed, but also not used).",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "active",
    "deleted",
    "inactive"
  ],
  "additionalProperties": false
}

D.54 SynchronicityEnum

The set of permitted values used to describe whether an education offering is taught in person, online, or via a hybrid, combined approach.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_synchronicityenum-jsonschema1.json",
  "title": "JSON Schema for the SynchronicityEnum class.",
  "description": "The set of permitted values used to describe whether an education offering is taught in person, online, or via a hybrid, combined approach.",
  "type": "object",
  "properties": {
    "hybrid": {
      "description": "No description supplied.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "asynchronous": {
      "description": "No description supplied.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "synchronous": {
      "description": "No description supplied.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "hybrid",
    "asynchronous",
    "synchronous"
  ],
  "additionalProperties": false
}

D.55 Imsx_StatusInfo

This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_imsx_statusinfo-jsonschema1.json",
  "title": "JSON Schema for the Imsx_StatusInfo class.",
  "description": "This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.",
  "type": "object",
  "properties": {
    "imsx_codeMajor": {
      "description": "The code major value (from the corresponding enumerated vocabulary).",
      "$comment": "Origin: Imsx_CodeMajor (Enumeration); This is the set of primary status report values i.e. the major code assigned to the status block. This is used in conjunction with the 'Severity' structure in the status object.",
      "type": "string",
      "enum": [
        "failure",
        "processing",
        "success",
        "unsupported"
      ]
    },
    "imsx_severity": {
      "description": "The severity value (from the corresponding enumerated vocabulary).",
      "$comment": "Origin: Imsx_Severity (Enumeration); This is the context for the status report values. This is used in conjunction with the 'CodeMajor' structure in the status object.",
      "type": "string",
      "enum": [
        "error",
        "status",
        "warning"
      ]
    },
    "imsx_description": {
      "description": "A human readable description supplied by the entity creating the status code information.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "imsx_codeMinor": {
      "$ref": "#/$defs/Imsx_CodeMinor"
    }
  },
  "required": [
    "imsx_codeMajor",
    "imsx_severity"
  ],
  "additionalProperties": false,
  "$defs": {
    "Imsx_CodeMinor": {
      "description": "This is the container for the set of code minor status codes reported in the responses from the Service Provider.",
      "type": "object",
      "properties": {
        "imsx_codeMinorField": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/Imsx_CodeMinorField"
          }
        }
      },
      "required": [
        "imsx_codeMinorField"
      ],
      "additionalProperties": false
    },
    "Imsx_CodeMinorField": {
      "description": "This is the container for a single code minor status code.",
      "type": "object",
      "properties": {
        "imsx_codeMinorFieldName": {
          "description": "This should contain the identity of the system that has produced the code minor status code report.",
          "$comment": "Origin: NormalizedString (PrimitiveType); A `String` conforming to the `normalizedString` definition in [[XMLSCHEMA-2]].",
          "type": "string"
        },
        "imsx_codeMinorFieldValue": {
          "description": "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
          "$comment": "Origin: Imsx_CodeMinorFieldValue (Enumeration); This is the set of codeMinor status codes that are used to provide further insight into the completion status of the end-to-end transaction i.e. this should be used to provide more information than would be supplied by an HTTP code.",
          "type": "string",
          "enum": [
            "forbidden",
            "fullsuccess",
            "internal_server_error",
            "invalid_data",
            "invalid_query_parameter",
            "misdirected_request",
            "not_acceptable",
            "not_allowed",
            "not_found",
            "not_modified",
            "server_busy",
            "unauthorizedrequest",
            "unknown"
          ]
        }
      },
      "required": [
        "imsx_codeMinorFieldName",
        "imsx_codeMinorFieldValue"
      ],
      "additionalProperties": false
    }
  }
}

D.56 Imsx_CodeMajor

This is the set of primary status report values i.e. the major code assigned to the status block. This is used in conjunction with the 'Severity' structure in the status object.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_imsx_codemajor-jsonschema1.json",
  "title": "JSON Schema for the Imsx_CodeMajor class.",
  "description": "This is the set of primary status report values i.e. the major code assigned to the status block. This is used in conjunction with the 'Severity' structure in the status object.",
  "type": "object",
  "properties": {
    "failure": {
      "description": "Denotes that the transaction request has failed. The detailed reason will be reported in the accompanying 'codeMinor' fields.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "processing": {
      "description": "Denotes that the request is being processed at the destination or there has been a local transmission failure. This value is used in asynchronous services.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "success": {
      "description": "Denotes that the request has been successfully completed. If the associated 'severity' value is 'warning' then the request has been partially successful i.e. best effort by the service provider. Other parts of the status information may provide more insight into a partial success response.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "unsupported": {
      "description": "Denotes that the service provider does not support the requested operation. This is the required default response for an unsupported operation by an implementation.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "failure",
    "processing",
    "success",
    "unsupported"
  ],
  "additionalProperties": false
}

D.57 Imsx_Severity

This is the context for the status report values. This is used in conjunction with the 'CodeMajor' structure in the status object.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_imsx_severity-jsonschema1.json",
  "title": "JSON Schema for the Imsx_Severity class.",
  "description": "This is the context for the status report values. This is used in conjunction with the 'CodeMajor' structure in the status object.",
  "type": "object",
  "properties": {
    "error": {
      "description": "A catastrophic error has occurred in processing the request and so the request was not completed (the Service Provider may not even have received the request).",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "status": {
      "description": "The request has been completed and a response was received from the Service Provider.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "warning": {
      "description": "The request has only been partially completed. For an asynchronous service a further response should be expected.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "error",
    "status",
    "warning"
  ],
  "additionalProperties": false
}

D.58 Imsx_CodeMinor

This is the container for the set of code minor status codes reported in the responses from the Service Provider.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_imsx_codeminor-jsonschema1.json",
  "title": "JSON Schema for the Imsx_CodeMinor class.",
  "description": "This is the container for the set of code minor status codes reported in the responses from the Service Provider.",
  "type": "object",
  "properties": {
    "imsx_codeMinorField": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/Imsx_CodeMinorField"
      }
    }
  },
  "required": [
    "imsx_codeMinorField"
  ],
  "additionalProperties": false,
  "$defs": {
    "Imsx_CodeMinorField": {
      "description": "This is the container for a single code minor status code.",
      "type": "object",
      "properties": {
        "imsx_codeMinorFieldName": {
          "description": "This should contain the identity of the system that has produced the code minor status code report.",
          "$comment": "Origin: NormalizedString (PrimitiveType); A `String` conforming to the `normalizedString` definition in [[XMLSCHEMA-2]].",
          "type": "string"
        },
        "imsx_codeMinorFieldValue": {
          "description": "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
          "$comment": "Origin: Imsx_CodeMinorFieldValue (Enumeration); This is the set of codeMinor status codes that are used to provide further insight into the completion status of the end-to-end transaction i.e. this should be used to provide more information than would be supplied by an HTTP code.",
          "type": "string",
          "enum": [
            "forbidden",
            "fullsuccess",
            "internal_server_error",
            "invalid_data",
            "invalid_query_parameter",
            "misdirected_request",
            "not_acceptable",
            "not_allowed",
            "not_found",
            "not_modified",
            "server_busy",
            "unauthorizedrequest",
            "unknown"
          ]
        }
      },
      "required": [
        "imsx_codeMinorFieldName",
        "imsx_codeMinorFieldValue"
      ],
      "additionalProperties": false
    }
  }
}

D.59 Imsx_CodeMinorField

This is the container for a single code minor status code.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_imsx_codeminorfield-jsonschema1.json",
  "title": "JSON Schema for the Imsx_CodeMinorField class.",
  "description": "This is the container for a single code minor status code.",
  "type": "object",
  "properties": {
    "imsx_codeMinorFieldName": {
      "description": "This should contain the identity of the system that has produced the code minor status code report.",
      "$comment": "Origin: NormalizedString (PrimitiveType); A `String` conforming to the `normalizedString` definition in [[XMLSCHEMA-2]].",
      "type": "string"
    },
    "imsx_codeMinorFieldValue": {
      "description": "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
      "$comment": "Origin: Imsx_CodeMinorFieldValue (Enumeration); This is the set of codeMinor status codes that are used to provide further insight into the completion status of the end-to-end transaction i.e. this should be used to provide more information than would be supplied by an HTTP code.",
      "type": "string",
      "enum": [
        "forbidden",
        "fullsuccess",
        "internal_server_error",
        "invalid_data",
        "invalid_query_parameter",
        "misdirected_request",
        "not_acceptable",
        "not_allowed",
        "not_found",
        "not_modified",
        "server_busy",
        "unauthorizedrequest",
        "unknown"
      ]
    }
  },
  "required": [
    "imsx_codeMinorFieldName",
    "imsx_codeMinorFieldValue"
  ],
  "additionalProperties": false
}

D.60 Imsx_CodeMinorFieldValue

This is the set of codeMinor status codes that are used to provide further insight into the completion status of the end-to-end transaction i.e. this should be used to provide more information than would be supplied by an HTTP code.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_imsx_codeminorfieldvalue-jsonschema1.json",
  "title": "JSON Schema for the Imsx_CodeMinorFieldValue class.",
  "description": "This is the set of codeMinor status codes that are used to provide further insight into the completion status of the end-to-end transaction i.e. this should be used to provide more information than would be supplied by an HTTP code.",
  "type": "object",
  "properties": {
    "forbidden": {
      "description": "This is used to indicate that the server can be reached and process the request but refuses to take any further action. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '403'.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "fullsuccess": {
      "description": "The request has been fully and successfully implemented by the service provider. For a REST binding this will have an HTTP code of '200' for a successful search request.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "internal_server_error": {
      "description": "This should be used only if there is catastrophic error and there is not a more appropriate code. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '500'.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "invalid_data": {
      "description": "This error condition may occur if a JSON request/response body contains well-formed (i.e. syntactically correct), but semantically erroneous, JSON instructions. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and a HTTP code of '422'.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "invalid_query_parameter": {
      "description": "An invalid data query parameter field was supplied and the query could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '400'.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "misdirected_request": {
      "description": "This is used to indicate that the request was made with a protocol that is not supported by the server. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '421'.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "not_acceptable": {
      "description": "This is used to indicate that the server cannot provide a response with a Content-Type that matches any of the content types in the request Accept header. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '406'.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "not_allowed": {
      "description": "This is used to indicate that the server does not allow the HTTP method. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '405'.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "not_found": {
      "description": "This is used to indicate that the server did not find the resource. This would be accompanied by the 'codeMajor/severity' values of 'failure/status' and for a REST binding a HTTP code of '404'.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "not_modified": {
      "description": "This is used to indicate that the server did not modify the resource. This would be accompanied by the 'codeMajor/severity' values of 'success/status' and for a REST binding a HTTP code of '304'.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "server_busy": {
      "description": "The server is receiving too many requests. Retry at a later time. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '429'.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "unauthorizedrequest": {
      "description": "The request was not correctly authorised. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '401'.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "unknown": {
      "description": "Any other error occurred. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code corresponding to the error.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "forbidden",
    "fullsuccess",
    "internal_server_error",
    "invalid_data",
    "invalid_query_parameter",
    "misdirected_request",
    "not_acceptable",
    "not_allowed",
    "not_found",
    "not_modified",
    "server_busy",
    "unauthorizedrequest",
    "unknown"
  ],
  "additionalProperties": false
}

D.61 PersonNameEntry

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_personnameentry-jsonschema1.json",
  "title": "JSON Schema for the PersonNameEntry class.",
  "description": "No description supplied.",
  "type": "object",
  "properties": {
    "nameType": {
      "description": "The type of name described in this entry.",
      "$comment": "Origin: PersonNameTypeEnum (EnumExt); The set of permitted values for name types.",
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "legalName",
            "preferredName",
            "phoneticName",
            "aliasName",
            "formerName"
          ]
        },
        {
          "type": "string",
          "pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
        }
      ]
    },
    "familyName": {
      "description": "Family name. In the western world, often referred to as the 'last name' of a person.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "givenName": {
      "description": "Given name. In the western world, often referred to as the 'first name' of a person.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "additionalName": {
      "description": "Additional name. Includes what is often referred to as 'middle name' in the western world.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "patronymicName": {
      "description": "Patronymic name.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "honorificPrefix": {
      "description": "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "honorificSuffix": {
      "description": "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "familyNamePrefix": {
      "description": "Family name prefix. As used in some locales, this is the leading part of a family name (e.g. 'de' in the name 'de Boer').",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    }
  },
  "required": [
    "nameType"
  ],
  "additionalProperties": false
}

D.62 LanguageTypedString

A String with an associated language code.

{
  "$schema": "https://json-schema.org/draft/2019-09/schema#",
  "$id": "https://purl.imsglobal.org/spec/eduapi/v1p0/schema/json/eduapi_v1p0_languagetypedstring-jsonschema1.json",
  "title": "JSON Schema for the LanguageTypedString class.",
  "description": "A String with an associated language code.",
  "type": "object",
  "properties": {
    "recordLanguage": {
      "description": "The primary language used in the described entity.",
      "$comment": "Origin: LanguageCode (DerivedType); A language code [[BCP47]].",
      "type": "string",
      "pattern": "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
    },
    "value": {
      "description": "No description supplied.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    }
  },
  "required": [
    "recordLanguage",
    "value"
  ],
  "additionalProperties": false
}

E. OpenAPI Schema: YAML

Edu-API Candidate Final Public

openapi: 3.0.1
info:
  title: OpenAPI schema for Edu-API
  description: Edu-API Candidate Final Public
  termsOfService: https://www.imsglobal.org/license.html
  contact:
    name: IMS Global
    url: https://www.imsglobal.org
    email: support@imsglobal.org
  license:
    name: IMS Global Specification Document License
    url: https://www.imsglobal.org/license.html
  version: "1.0"
  x-status: Candidate Final
  x-model-pid: org.1edtech.eduapi.v1p0.model
  x-service-pid: org.1edtech.eduapi.v1p0.rest.servicemodel
  x-src-operation-count: 49
  x-oas-operation-count: 49
servers:
- url: https://example.org/ims/eduapi/base/v1p0
  description: The above Server URL should be changed to the actual server location.
tags:
- name: Education Management
  description: Operations relating to the Abstract Education Resources
- name: Academic Session Management
  description: Operations relating to AcademicSessions
- name: Organization Management
  description: Operations relating to Organizations
- name: Person Management
  description: Operations relating to Persons
- name: Enrollment Management
  description: Operations relating to Enrollments
- name: Affiliation Management
  description: Operations relating to Affiliations
paths:
  /educationTemplates:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getEducationTemplates() API call.
      description: Read all education templates for an institution
      operationId: getEducationTemplates
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getEducationTemplates() API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: A description of an abstract education.
                items:
                  $ref: '#/components/schemas/Education'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.geteducationtemplates.operation
  /educationTemplates/{id}:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getEducationTemplatesById() API call.
      description: Read a collection template with a specific id
      operationId: getEducationTemplatesById
      parameters:
      - name: id
        in: path
        description: The sourcedId of the Education
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      responses:
        "200":
          description: The 200 (OK) response to the getEducationTemplatesById() API
            call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Education'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "404":
          description: "As defined in [[rfc9110]], indicating that the origin server\
            \ did not find a current representation for the target resource or is\
            \ not willing to disclose that one exists."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.geteducationtemplatesbyid.operation
  /educationOfferings:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getEducationOfferings() API call.
      description: Read all education templates for an institution
      operationId: getEducationOfferings
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getEducationOfferings() API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: A description of an abstract educational offering.
                items:
                  $ref: '#/components/schemas/EducationOffering'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.geteducationofferings.operation
  /educationsOfferings/{id}:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getEducationsOfferingById() API call.
      description: Read a collection template with a specific id
      operationId: getEducationsOfferingById
      parameters:
      - name: id
        in: path
        description: The sourcedId of the Education
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      responses:
        "200":
          description: The 200 (OK) response to the getEducationsOfferingById() API
            call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EducationOffering'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "404":
          description: "As defined in [[rfc9110]], indicating that the origin server\
            \ did not find a current representation for the target resource or is\
            \ not willing to disclose that one exists."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.geteducationsofferingbyid.operation
  /collectionTemplates:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getAllCollectionTemplates() API call.
      description: Read all collection templates for an institution
      operationId: getAllCollectionTemplates
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllCollectionTemplates() API
            call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A grouping of educational units. In the context of Edu-API\
                  \ an education is any kind of canonical or non-instantiated learning\
                  \ units that have a structured relationship, e.g. a course. When\
                  \ grouped, these educational units can be used to define such concepts\
                  \ as programs of study."
                items:
                  $ref: '#/components/schemas/CollectionTemplate'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallcollectiontemplates.operation
  /collectionTemplates/{id}:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getCollectionTemplateById() API call.
      description: Read a collection template with a specific id
      operationId: getCollectionTemplateById
      parameters:
      - name: id
        in: path
        description: The sourcedId of the CollectionTemplate
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      responses:
        "200":
          description: The 200 (OK) response to the getCollectionTemplateById() API
            call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CollectionTemplate'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "404":
          description: "As defined in [[rfc9110]], indicating that the origin server\
            \ did not find a current representation for the target resource or is\
            \ not willing to disclose that one exists."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getcollectiontemplatebyid.operation
  /courseTemplates:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getAllCourseTemplates() API call.
      description: Read all course templates for an institution
      operationId: getAllCourseTemplates
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllCourseTemplates() API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A time independent description of a learning experience,\
                  \ such that it may appear in a catalog."
                items:
                  $ref: '#/components/schemas/CourseTemplate'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallcoursetemplates.operation
  /courseTemplates/{id}:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getCourseTemplateById() API call.
      description: Read a course template with a specific id
      operationId: getCourseTemplateById
      parameters:
      - name: id
        in: path
        description: The sourcedId of the CourseTemplate
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      responses:
        "200":
          description: The 200 (OK) response to the getCourseTemplateById() API call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CourseTemplate'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "404":
          description: "As defined in [[rfc9110]], indicating that the origin server\
            \ did not find a current representation for the target resource or is\
            \ not willing to disclose that one exists."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getcoursetemplatebyid.operation
  /componentTemplates:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getAllComponentTemplates() API call.
      description: Read all component templates for an institution
      operationId: getAllComponentTemplates
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllComponentTemplates() API
            call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A subsection of a Course or Class. It may be a lesson\
                  \ unit within a Class or it may be a separately enrolled unit with\
                  \ a Course. For example, Biology 101 may consist of a Lecture component\
                  \ and a Lab component."
                items:
                  $ref: '#/components/schemas/ComponentTemplate'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallcomponenttemplates.operation
  /componentTemplates/{id}:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getComponentTemplateById() API call.
      description: Read a component with a specific id
      operationId: getComponentTemplateById
      parameters:
      - name: id
        in: path
        description: The sourcedId of the ComponentTemplate
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      responses:
        "200":
          description: The 200 (OK) response to the getComponentTemplateById() API
            call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ComponentTemplate'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "404":
          description: "As defined in [[rfc9110]], indicating that the origin server\
            \ did not find a current representation for the target resource or is\
            \ not willing to disclose that one exists."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getcomponenttemplatebyid.operation
  /collectionOfferings:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getAllCollectionOfferings() API call.
      description: Read all collectionOfferings for an institution
      operationId: getAllCollectionOfferings
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllCollectionOfferings() API
            call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A collection of courses or other learning units, used\
                  \ to group them into a coherent whole for enrollment, administrative,\
                  \ or other purposes. A Program is one example of a Course Collection."
                items:
                  $ref: '#/components/schemas/CollectionOffering'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallcollectionofferings.operation
  /collectionOfferings/{id}:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getCollectionOfferingById() API call.
      description: Read collectionOffering with a specific Id
      operationId: getCollectionOfferingById
      parameters:
      - name: id
        in: path
        description: The sourcedId of the CollectionOffering
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      responses:
        "200":
          description: The 200 (OK) response to the getCollectionOfferingById() API
            call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CollectionOffering'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "404":
          description: "As defined in [[rfc9110]], indicating that the origin server\
            \ did not find a current representation for the target resource or is\
            \ not willing to disclose that one exists."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getcollectionofferingbyid.operation
  /courseOfferings:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getAllCourseOfferings() API call.
      description: Read all courseOfferings for an institution
      operationId: getAllCourseOfferings
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllCourseOfferings() API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: Relates a course to one or more delivery scenarios.
                items:
                  $ref: '#/components/schemas/CourseOffering'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallcourseofferings.operation
  /courseOfferings/{id}:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getCourseOfferingById() API call.
      description: Read courseOffering with a specific Id
      operationId: getCourseOfferingById
      parameters:
      - name: id
        in: path
        description: The sourcedId of the CourseOffering
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      responses:
        "200":
          description: The 200 (OK) response to the getCourseOfferingById() API call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CourseOffering'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "404":
          description: "As defined in [[rfc9110]], indicating that the origin server\
            \ did not find a current representation for the target resource or is\
            \ not willing to disclose that one exists."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getcourseofferingbyid.operation
  /componentOfferings:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getAllComponentOfferings() API call.
      description: Read all ComponentOfferings for an institution
      operationId: getAllComponentOfferings
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllComponentOfferings() API
            call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A subsection of a courseOffering. It may be a lesson\
                  \ or separately enrollable unit within a courseOffering. For example,\
                  \ Biology 101 may consist of a Lecture component offering and a\
                  \ Lab component offering"
                items:
                  $ref: '#/components/schemas/ComponentOffering'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallcomponentofferings.operation
  /componentOfferings/{id}:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getComponentOfferingById() API call.
      description: Read ComponentOffering with a specific Id
      operationId: getComponentOfferingById
      parameters:
      - name: id
        in: path
        description: The sourcedId of the ComponentOffering
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      responses:
        "200":
          description: The 200 (OK) response to the getComponentOfferingById() API
            call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ComponentOffering'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "404":
          description: "As defined in [[rfc9110]], indicating that the origin server\
            \ did not find a current representation for the target resource or is\
            \ not willing to disclose that one exists."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getcomponentofferingbyid.operation
  /academicSessions/{id}/componentOfferings:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getAllComponentOfferingsBySession()
        API call.
      description: Read all ComponentOfferings in a specified academic session
      operationId: getAllComponentOfferingsBySession
      parameters:
      - name: id
        in: path
        description: The sourcedId of the AcademicSession
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllComponentOfferingsBySession()
            API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A subsection of a courseOffering. It may be a lesson\
                  \ or separately enrollable unit within a courseOffering. For example,\
                  \ Biology 101 may consist of a Lecture component offering and a\
                  \ Lab component offering"
                items:
                  $ref: '#/components/schemas/ComponentOffering'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallcomponentofferingsbysession.operation
  /academicSessions/{id}/courseOfferings:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getAllCourseOfferingsBySession() API
        call.
      description: Read all CourseOfferings in a specified academic session
      operationId: getAllCourseOfferingsBySession
      parameters:
      - name: id
        in: path
        description: The sourcedId of the AcademicSession
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllCourseOfferingsBySession()
            API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: Relates a course to one or more delivery scenarios.
                items:
                  $ref: '#/components/schemas/CourseOffering'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallcourseofferingsbysession.operation
  /academicSessions/{id}/collectionOfferings:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getAllCollectionOfferingsBySession()
        API call.
      description: Read all CollectionOfferings in a specified academic session
      operationId: getAllCollectionOfferingsBySession
      parameters:
      - name: id
        in: path
        description: The sourcedId of the AcademicSession
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllCollectionOfferingsBySession()
            API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A collection of courses or other learning units, used\
                  \ to group them into a coherent whole for enrollment, administrative,\
                  \ or other purposes. A Program is one example of a Course Collection."
                items:
                  $ref: '#/components/schemas/CollectionOffering'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallcollectionofferingsbysession.operation
  /students/{id}/collectionOfferings:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getCollectionOfferingsForStudent() API
        call.
      description: Read all collectionOfferings for a student
      operationId: getCollectionOfferingsForStudent
      parameters:
      - name: id
        in: path
        description: The sourcedId of the Person representing the student
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getCollectionOfferingsForStudent()
            API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A collection of courses or other learning units, used\
                  \ to group them into a coherent whole for enrollment, administrative,\
                  \ or other purposes. A Program is one example of a Course Collection."
                items:
                  $ref: '#/components/schemas/CollectionOffering'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getcollectionofferingsforstudent.operation
  /staff/{id}/collectionOfferings:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getCollectionOfferingsForStaff() API
        call.
      description: Read all collectionOfferings for a staff member
      operationId: getCollectionOfferingsForStaff
      parameters:
      - name: id
        in: path
        description: The sourcedId of the Person representing the staff member
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getCollectionOfferingsForStaff()
            API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A collection of courses or other learning units, used\
                  \ to group them into a coherent whole for enrollment, administrative,\
                  \ or other purposes. A Program is one example of a Course Collection."
                items:
                  $ref: '#/components/schemas/CollectionOffering'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getcollectionofferingsforstaff.operation
  /students/{id}/componentOfferings:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getComponentOfferingsForStudent() API
        call.
      description: Read all componentOfferings for a student
      operationId: getComponentOfferingsForStudent
      parameters:
      - name: id
        in: path
        description: The sourcedId of the Person representing the student
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getComponentOfferingsForStudent()
            API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A subsection of a courseOffering. It may be a lesson\
                  \ or separately enrollable unit within a courseOffering. For example,\
                  \ Biology 101 may consist of a Lecture component offering and a\
                  \ Lab component offering"
                items:
                  $ref: '#/components/schemas/ComponentOffering'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getcomponentofferingsforstudent.operation
  /staff/{id}/componentOfferings:
    get:
      tags:
      - EducationManagement
      summary: The REST GET operation for the getComponentOfferingsForStaff() API
        call.
      description: Read all componentOfferings for a staff member
      operationId: getComponentOfferingsForStaff
      parameters:
      - name: id
        in: path
        description: The sourcedId of the Person representing the staff member
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getComponentOfferingsForStaff()
            API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A subsection of a courseOffering. It may be a lesson\
                  \ or separately enrollable unit within a courseOffering. For example,\
                  \ Biology 101 may consist of a Lecture component offering and a\
                  \ Lab component offering"
                items:
                  $ref: '#/components/schemas/ComponentOffering'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getcomponentofferingsforstaff.operation
  /academicSessions:
    get:
      tags:
      - AcademicSessionManagement
      summary: The REST GET operation for the getAllAcademicSessions() API call.
      description: Read all AcademicSessions for an institution
      operationId: getAllAcademicSessions
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllAcademicSessions() API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A calendar period during which a school or institution\
                  \ schedules classes, offerings, or other units of learning for availability."
                items:
                  $ref: '#/components/schemas/AcademicSession'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallacademicsessions.operation
  /academicSessions/{id}:
    get:
      tags:
      - AcademicSessionManagement
      summary: The REST GET operation for the getAcademicSessionById() API call.
      description: Read an AcademicSession with a specific id
      operationId: getAcademicSessionById
      parameters:
      - name: id
        in: path
        description: The sourcedId of the AcademicSession
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      responses:
        "200":
          description: The 200 (OK) response to the getAcademicSessionById() API call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcademicSession'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "404":
          description: "As defined in [[rfc9110]], indicating that the origin server\
            \ did not find a current representation for the target resource or is\
            \ not willing to disclose that one exists."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getacademicsessionbyid.operation
  /organizations:
    get:
      tags:
      - OrganizationManagement
      summary: The REST GET operation for the getAllOrganizations() API call.
      description: Read all Organizations for an institution
      operationId: getAllOrganizations
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllOrganizations() API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "An administrative unit, it can be a division or subdivision\
                  \ of an institution or the institution itself. Examples: College\
                  \ of Arts and Letters, English Department."
                items:
                  $ref: '#/components/schemas/Organization'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallorganizations.operation
  /organizations/{id}:
    get:
      tags:
      - OrganizationManagement
      summary: The REST GET operation for the getOrganizationById() API call.
      description: Read Organization with a specific Id
      operationId: getOrganizationById
      parameters:
      - name: id
        in: path
        description: The sourcedId of the Organization
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      responses:
        "200":
          description: The 200 (OK) response to the getOrganizationById() API call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Organization'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "404":
          description: "As defined in [[rfc9110]], indicating that the origin server\
            \ did not find a current representation for the target resource or is\
            \ not willing to disclose that one exists."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getorganizationbyid.operation
  /staff/{id}/organizations:
    get:
      tags:
      - OrganizationManagement
      summary: The REST GET operation for the getOrganizationsForStaff() API call.
      description: Read all organizations associated with a staff member
      operationId: getOrganizationsForStaff
      parameters:
      - name: id
        in: path
        description: The sourcedId of the Person representing the staff member
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getOrganizationsForStaff() API
            call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "An administrative unit, it can be a division or subdivision\
                  \ of an institution or the institution itself. Examples: College\
                  \ of Arts and Letters, English Department."
                items:
                  $ref: '#/components/schemas/Organization'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getorganizationsforstaff.operation
  /students/{id}/organizations:
    get:
      tags:
      - OrganizationManagement
      summary: The REST GET operation for the getOrganizationsForStudent() API call.
      description: Read all organizations associated with a student
      operationId: getOrganizationsForStudent
      parameters:
      - name: id
        in: path
        description: The sourcedId of the Person representing the student
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getOrganizationsForStudent() API
            call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "An administrative unit, it can be a division or subdivision\
                  \ of an institution or the institution itself. Examples: College\
                  \ of Arts and Letters, English Department."
                items:
                  $ref: '#/components/schemas/Organization'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getorganizationsforstudent.operation
  /persons:
    get:
      tags:
      - PersonManagement
      summary: The REST GET operation for the getAllPersons() API call.
      description: Read all Persons for an institution
      operationId: getAllPersons
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllPersons() API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A Person represents a human being, alive or deceased,\
                  \ real or imaginary."
                items:
                  $ref: '#/components/schemas/Person'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly.privacy
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallpersons.operation
  /persons/{id}:
    get:
      tags:
      - PersonManagement
      summary: The REST GET operation for the getPersonById() API call.
      description: Read Person with a specific id
      operationId: getPersonById
      parameters:
      - name: id
        in: path
        description: The sourcedId of the Person
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      responses:
        "200":
          description: The 200 (OK) response to the getPersonById() API call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Person'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "404":
          description: "As defined in [[rfc9110]], indicating that the origin server\
            \ did not find a current representation for the target resource or is\
            \ not willing to disclose that one exists."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly.privacy
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getpersonbyid.operation
  /staff:
    get:
      tags:
      - PersonManagement
      summary: The REST GET operation for the getAllStaff() API call.
      description: Read all persons with role of staff
      operationId: getAllStaff
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllStaff() API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A Person represents a human being, alive or deceased,\
                  \ real or imaginary."
                items:
                  $ref: '#/components/schemas/Person'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly.privacy
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallstaff.operation
  /students:
    get:
      tags:
      - PersonManagement
      summary: The REST GET operation for the getAllStudents() API call.
      description: Read all persons with a role of student
      operationId: getAllStudents
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllStudents() API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A Person represents a human being, alive or deceased,\
                  \ real or imaginary."
                items:
                  $ref: '#/components/schemas/Person'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly.privacy
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallstudents.operation
  /collectionOfferings/{id}/students:
    get:
      tags:
      - PersonManagement
      summary: The REST GET operation for the getAllStudentsForCollectionOffering()
        API call.
      description: Read all students for a collectionOffering
      operationId: getAllStudentsForCollectionOffering
      parameters:
      - name: id
        in: path
        description: The sourcedId of the CollectionOffering
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllStudentsForCollectionOffering()
            API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A Person represents a human being, alive or deceased,\
                  \ real or imaginary."
                items:
                  $ref: '#/components/schemas/Person'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly.privacy
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallstudentsforcollectionoffering.operation
  /collectionOfferings/{id}/staff:
    get:
      tags:
      - PersonManagement
      summary: The REST GET operation for the getAllStaffForCollectionOffering() API
        call.
      description: Read all staff for a collectionOffering
      operationId: getAllStaffForCollectionOffering
      parameters:
      - name: id
        in: path
        description: The sourcedId of the CollectionOffering
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllStaffForCollectionOffering()
            API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A Person represents a human being, alive or deceased,\
                  \ real or imaginary."
                items:
                  $ref: '#/components/schemas/Person'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly.privacy
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallstaffforcollectionoffering.operation
  /courseOfferings/{id}/students:
    get:
      tags:
      - PersonManagement
      summary: The REST GET operation for the getAllStudentsForCourseOffering() API
        call.
      description: Read all students for a courseOffering
      operationId: getAllStudentsForCourseOffering
      parameters:
      - name: id
        in: path
        description: The sourcedId of the CourseOffering
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllStudentsForCourseOffering()
            API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A Person represents a human being, alive or deceased,\
                  \ real or imaginary."
                items:
                  $ref: '#/components/schemas/Person'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly.privacy
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallstudentsforcourseoffering.operation
  /courseOfferings/{id}/staff:
    get:
      tags:
      - PersonManagement
      summary: The REST GET operation for the getAllStaffForCourseOffering() API call.
      description: Read all staff for a courseOffering
      operationId: getAllStaffForCourseOffering
      parameters:
      - name: id
        in: path
        description: The sourcedId of the CourseOffering
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllStaffForCourseOffering()
            API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A Person represents a human being, alive or deceased,\
                  \ real or imaginary."
                items:
                  $ref: '#/components/schemas/Person'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly.privacy
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallstaffforcourseoffering.operation
  /organizations/{id}/staff:
    get:
      tags:
      - PersonManagement
      summary: The REST GET operation for the getAllStaffForOrganization() API call.
      description: Read all staff members of an org
      operationId: getAllStaffForOrganization
      parameters:
      - name: id
        in: path
        description: The sourcedId of the organization
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllStaffForOrganization() API
            call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A Person represents a human being, alive or deceased,\
                  \ real or imaginary."
                items:
                  $ref: '#/components/schemas/Person'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly.privacy
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallstafffororganization.operation
  /organizations/{id}/students:
    get:
      tags:
      - PersonManagement
      summary: The REST GET operation for the getAllStudentsForOrganization() API
        call.
      description: Read all students of an organization
      operationId: getAllStudentsForOrganization
      parameters:
      - name: id
        in: path
        description: The sourcedId of the Organization
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllStudentsForOrganization()
            API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A Person represents a human being, alive or deceased,\
                  \ real or imaginary."
                items:
                  $ref: '#/components/schemas/Person'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly.privacy
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallstudentsfororganization.operation
  /componentOfferings/{id}/students:
    get:
      tags:
      - PersonManagement
      summary: The REST GET operation for the getAllStudentsForComponentOffering()
        API call.
      description: Read all students for a componentOffering
      operationId: getAllStudentsForComponentOffering
      parameters:
      - name: id
        in: path
        description: The sourcedId of the ComponentOffering
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllStudentsForComponentOffering()
            API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A Person represents a human being, alive or deceased,\
                  \ real or imaginary."
                items:
                  $ref: '#/components/schemas/Person'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that the server cannot\
            \ or will not process the request due to something that is perceived to\
            \ be a client error."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "401":
          description: "As defined in [[rfc9110]], indicating that the request has\
            \ not been applied because it lacks valid authentication credentials for\
            \ the target resource."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "403":
          description: "As defined in [[rfc9110]], indicating that the server understood\
            \ the request but refuses to fulfill it. The exact reason SHOULD be explained\
            \ in the response payload."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "422":
          description: "As defined in [[rfc9110]], used when the server cannot validate\
            \ an incoming entity."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "429":
          description: "As defined in [[rfc6585]], indicating that the user has sent\
            \ too many requests in a given amount of time ('rate limiting')."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        "500":
          description: "As defined in [[rfc9110]]. Implementations SHOULD avoid using\
            \ this error code - use only if there is catastrophic error and there\
            \ is not a more appropriate code."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
        default:
          description: The request was invalid or cannot be served. The exact error
            SHOULD be explained in the response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Imsx_StatusInfo'
      security:
      - CCGSecurity:
        - http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly.privacy
      x-operation-pid: org.1edtech.eduapi.v1p0.rest.getallstudentsforcomponentoffering.operation
  /componentOfferings/{id}/staff:
    get:
      tags:
      - PersonManagement
      summary: The REST GET operation for the getAllStaffForComponentOffering() API
        call.
      description: Read all students for a componentOffering
      operationId: getAllStaffForComponentOffering
      parameters:
      - name: id
        in: path
        description: The sourcedId of the ComponentOffering
        required: true
        allowEmptyValue: false
        style: simple
        schema:
          type: string
          description: The data-type for establishing a Globally Unique Identifier
            (GUID). There is no predefined structure for the GUID.
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/orderBy'
      - $ref: '#/components/parameters/filter'
      responses:
        "200":
          description: The 200 (OK) response to the getAllStaffForComponentOffering()
            API call.
          headers:
            X-Total-Count:
              $ref: '#/components/headers/X-Total-Count'
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "A Person represents a human being, alive or deceased,\
                  \ real or imaginary."
                items:
                  $ref: '#/components/schemas/Person'
          links:
            next:
              $ref: '#/components/links/next'
            last:
              $ref: '#/components/links/last'
            first:
              $ref: '#/components/links/first'
            prev:
              $ref: '#/components/links/prev'
        "400":
          description: "As defined in [[rfc9110]], indicating that