Edu-API MVP - Candidate Final

Edu-API Specification

Candidate Final
Spec Version 1.0
Candidate Final
Document Version: 10
Date Issued: March 12, 2025
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: https://www.1edtech.org/sites/default/files/media/docs/2023/imsipr_policyFinal.pdf .

Use of this specification to develop products or services is governed by the license with 1EdTech found on the 1EdTech website: https://www.1edtech.org/standards/specification-license.

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 should be directed to support@1edtech.org .

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

Trademark information: https://www.1edtech.org/about/legal

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 $[object Object].

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 Activity Level Grade Passback
12 Summary Level Grade Passback
13 Final Grade Passback
14 Midterm Grade Passback
15 Category Based Grading
16 Complex Grading Schemes
17 Simple/Standard Grading Schemes
19 Competency/Learning Objective Aligned Grade Exchange
20 Marking Period Based Grading

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 Activity Level Grade Passback

Description:Educational systems need a standardized and programmatic way to exchange results information for detailed assessment data. This ensures that grades for individual learning activities—such as assignments, quizzes, projects can be exchanged, tracked, and aggregated in a consistent and automated manner throughout the ecosystem.

Actors

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

In Higher Education, the source of truth gradebook can vary. Depending on who owns the final gradebook, the actors in the Edu-API gradebook exchange may be different. Edu-API enables both scenarios.

Note
This use case is not in scope for Edu-API v1p0 but will be included in a subsequent release

How Edu-API Helps:Edu-API enables higher education institutions to streamline grade management processes by simplifying the exchange of lineItem level results. lineItems can be used to represent any discrete learning activity that needs to be scored.

5.12 Summary Level Grade Passback

Description:In higher education ecosystems it is common that only summary level grades need to be exchanged between systems, e.g. for use in transcript writing. Edu-API enables the exchange of summary grades at any offering level that an institutions provides.

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:TBD

In Higher Education, the source of truth gradebook can vary. Depending on who owns the final gradebook, the actors in the Edu-API gradebook exchange may be different. Edu-API enables both scenarios.

Note
This use case is not in scope for Edu-API v1p0 but will be included in a subsequent release

5.13 Final Grade Passback

Description:A specific flavor of Summary Level Grade Passback that allows for the exchange of final grades 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:TBD

In Higher Education, the source of truth gradebook can vary. Depending on who owns the final gradebook, the actors in the Edu-API gradebook exchange may be different. Edu-API enables both scenarios.

Note
This use case is not in scope for Edu-API v1p0 but will be included in a subsequent release

5.14 Midterm Grade Passback

Description:A specific flavor of Summary Level Grade Passback that allows for the exchange of midterm grades 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:TBD

In Higher Education, the source of truth gradebook can vary. Depending on who owns the final gradebook, the actors in the Edu-API gradebook exchange may be different. Edu-API enables both scenarios.

Note
This use case is not in scope for Edu-API v1p0 but will be included in a subsequent release

5.15 Category Based Grading

Description:IT is common to group activities (Edu-API lineItems) for use in grade calculations, e.g. activities in the category 'quizzes' may be worth 25% of a learners final grade. .

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:TBD

Edu-API enables these types of grading calculations by requiring that all activity level grades to be assigned a category. Additionally, each category may be assigned a weight allowing systems to communicate the value of this grading category in calculation of the course final score.

In OneRoster, category is a required attribute on all line items, is this true in HEd?

Note
This use case is not in scope for Edu-API v1p0 but will be included in a subsequent release

5.16 Complex Grading Schemes

Description: In Higher Education it is often necessary to represent complex grade schemes that are used to evaluate student performance against specific criteria, e.g. a rubric. These schemes go beyond simple percentages or letter grades and may incorporate multiple components, such as weighted averages, rubrics, extra credit, and variable scales (e.g., GPA, pass/fail, or competency-based metrics).

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:By helping to represent various grading schemes and have those schemes be interoperable, Edu-API helps to accommodate diverse assessment methods and learning outcomes, allowing institutions to evaluate student performance in a nuanced, flexible, and context-specific manner.

In Higher Education, the source of truth gradebook can vary. Depending on who owns the final gradebook, the actors in the Edu-API gradebook exchange may be different. Edu-API enables both scenarios.

Note
This use case is not in scope for Edu-API v1p0 but will be included in a subsequent release

5.17 Simple/Standard Grading Schemes

Description: In many scenarios, grade exchange is done in simple ways where the requirement is to communicate that the student got a specific or absolute grade on the graded item. Edu-API will allow for the representation of these simple grading scenarios.

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:By helping to represent various grading schemes and have those schemes be interoperable, Edu-API helps to accommodate diverse assessment methods and learning outcomes, allowing institutions to evaluate student performance in a nuanced, flexible, and context-specific manner.

In Higher Education, the source of truth gradebook can vary. Depending on who owns the final gradebook, the actors in the Edu-API gradebook exchange may be different. Edu-API enables both scenarios.

Note
This use case is not in scope for Edu-API v1p0 but will be included in a subsequent release

5.18 Competency/Learning Objective Aligned Grade Exchange

Description: As education models change, we are seeing a move towards measuring student progress as a measure of mastery against a specific set of skills. In order to track and manage that, it is imperative that we are able to align our grade objects and related results with the learning objectives that are used to measure mastery and to have a method to communicate said mastery.

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:TBD

In Higher Education, the source of truth gradebook can vary. Depending on who owns the final gradebook, the actors in the Edu-API gradebook exchange may be different. Edu-API enables both scenarios.

Note
This use case is not in scope for Edu-API v1p0 but will be included in a subsequent release

5.19 Marking Period/Term Based Grading

Description: Grades do not always align with the periods a specific offering is related to. In those scenarios it may be necessary to communicate specific information about when grades are to be applied.

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:TBD

In Higher Education, the source of truth gradebook can vary. Depending on who owns the final gradebook, the actors in the Edu-API gradebook exchange may be different. Edu-API enables both scenarios.

Note
This use case is not in scope for Edu-API v1p0 but will be included in a subsequent release

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. [0..1]
creditsAwarded String A description of the credits that the student receives after the completion of the education. [0..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..*]
creditType CreditTypeEnum Enumeration Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary. [0..1]
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. [0..1]
creditsAwarded String A description of the credits that the student receives after the completion of the education. [0..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. [0..1]
creditsAwarded String A description of the credits that the student receives after the completion of the education. [0..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. [0..1]
creditsAwarded String A description of the credits that the student receives after the completion of the education. [0..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..*]
creditType CreditTypeEnum Enumeration Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary. [0..1]
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..*]
creditType CreditTypeEnum Enumeration Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary. [0..1]
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..*]
creditType CreditTypeEnum Enumeration Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary. [0..1]
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 equivalent degree.
doctoral A course of study that awards a PhD's or equivalent 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

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 a semester period. There are typically two semesters per schoolYear.
schoolYear Denotes the school year.
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. Query Parameters

B.1 Edu-API Query Parameters

Edu-API defines 4 query parameters on the REST API binding. Below are the descriptions of their use in Edu-API.

B.1.1 Limit

Limit MUST be enabled on all responses that produce a collection to restrict the returned value in the response to a maximum number of records. Limit uses the reserved word "limit", e.g. ?limit=500. Providers can declare their segmentation window to consumers by providing a maximum and/or minimum value in the limit parameter schema in their Open API definition file.
Example 1: limit param definition in Open API file
"limit" : {
       "name" : "limit",
       "in" : "query",
       "description" : "Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 50.",
       "required" : false,
       "allowEmptyValue" : false,
       "style" : "form",
       "schema" : {
         "minimum" : 1,
	  "maximum" : 50
         "type" : "integer",
         "format" : "int32"
       }
   }

B.1.2 Sorting

Sorting should be enabled on all responses that produce a collection, e.g. the response for a getAllPersons request should be returned in a sorted order. Sorting should be enabled on any attribute in a resource. Sorting uses the reserved word "sort", e.g. ?sort=attribute. The syntax for a request that retrieves all persons from the getAllPersons endpoint and sorts the results by the formattedName attribute would look like:
"GET /ims/eduapi/base/v1p0/persons?sort=formattedName"
Sort requests may be further supplemented via use of the reserved word orderBy. Order by takes the arguments asc for ascending or desc for descending. The syntax for a request that retrieves all persons from the getAllPersons and sorts the results by the formattedName attribute, ascending, would look like:
"GET /ims/eduapi/base/v1p0/persons?sort=formattedName&orderBy=asc"
Providers can declare their support for sorting to consumers by providing a enumerated list of fields in the sort parameter schema in their Open API definition file.
Example 2: sorting param definition in Open API file
"sort":{
	"name":"sort",
	"in":"query",
	"description":"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.",
	"required":false,
	"allowEmptyValue":true,
	"style":"form",
	"schema":{
		"type":"string",
		"description":"Character strings.",
		"enum": ["language", "legalName.familyName", "affiliation.role"]
	}
}
In this example, the provider is allowing sorting by the fields: - language - legalName.familyName - affiliation.role If the enum is omitted, provider don't support sorting.
Note
JSON schema specification requires at least on evalue in enums declarations.
B.1.2.1 Implementation notes:

  • If the consumer requests that the data is to be sorted by a non-existent field, data MAY be returned in the service provider's default sort order or an error response MAY be returned.
  • When sorting/ordering is requested on a property that is an array, the first value in the array is used as the basis of the sorting/ordering.
  • Sorting and ordering of nested properties should be supported. The syntax for sorting on a nested attribute MUST use a dot-notation approach. An example of sorting on the nested property of givenName is:

"GET /ims/eduapi/base/v1p0/persons?sort=personName.givenName"
Note
Consumers should always consult with their service provider partners for details on their support for sorting in Edu-API

B.1.3 Filtering

Filtering should be enabled on all responses that produce a collection. Collections should be filterable for attributes matching a certain criteria. Filtering should be enabled on all attributes in the core description of the resource. Filter requests use the following syntax:
GET ...hostname/baseurl/resource?filter=
Providers can declare their support for filtering to consumers by providing a enumerated list of fields using the x-imssf-allowed-fields Open API extension in the filter parameter definition in their Open API definition file.
Example 3: filter param definition in Open API file
"filter" : {
       "name" : "filter",
       "in" : "query",
       "description" : "Specifies that the returned collection should be filtered using the supplied criteria.",
       "required" : false,
       "allowEmptyValue" : false,
       "style" : "form",
       "schema" : {
         "type" : "string",
         "description" : "Character strings."

       },
	"x-imssf-allowed-fields": [
		"language",
		"legalName.familyName",
		"affiliation.role"
	]
},
If the extension is omitted, consumers can assume the provider doesn't allow filtering of any field in the resource. On the other hand, if the extension is an empty array, consumers can assume the provider allow filtering of any field in the resource.
Note
If the provider supports filtering, it must declare at least one expression in the list of supported expressions. See the next section for more details.
Providing the name of a top-level resource means that the provider supports filtering for every property of the nested resource.
B.1.3.1 Filter Predicates
the set of available operators on Edu-API filter requests is:
  • Equals is represented by '='
  • Not Equal is represented by '!='
  • Greater Than is represented by '>'
  • Greater Than or Equal is represented by '>='
  • Greater Than or Equal is represented by '>='
  • Lesser Than is represented by '<'
  • Lesser Than or Equal is represented by '<='
  • Contains is represented by '~'
Providers may limit the expressions in the filter predictes to exclude unsupported expresions. Providers can declare to consumers their supported expressions by listing them via the x-imssf-supported-expressions Open API extension in the filter parameter definition in their Open API definition file.
Example 4: filter param definition in Open API file with list of supported expressions
"filter" : {
       "name" : "filter",
       "in" : "query",
       "description" : "Specifies that the returned collection should be filtered using the supplied criteria.",
       "required" : false,
       "allowEmptyValue" : false,
       "style" : "form",
       "schema" : {
         "type" : "string",
         "description" : "Character strings."

       },
	"x-imssf-supported-expressions": [
		"Equals",
		"NotEquals"
	]
},
The possible values of items inside the x-imssf-supported-expressions list are:
  • Equals
  • NotEqual
  • GreaterThan
  • GreaterThanOrEqual
  • LesserThan
  • LesserThanOrEqual
  • Contains
  • LogicalAnd
  • LogicalOr
If the extension is omitted, consumers can assume the provider doesn't allow any expression defined in the query language. In this case, the provider should declare that doesn't support filtering following previous indications. On the other hand, if the extension is an empty array, consumer can assume the provider allows filter predicates to contais all expressions defined in the spec.
B.1.3.2 Implementation notes
  • All Filter queries MUST be URL encoded.
  • Values MUST be enclosed within single quotes and they MUST be handled as case insensitive. When the response is returned it is the receiving system that should consider whether or not case-sensitivity is important.
  • The attributes that can be used are those present in the class definition being filtered. If the consumer requests that the data is filtered by a non-existent field, no data is returned and the server must provide the associated transaction status code information of:
    • CodeMajor value is 'failure';
    • Severity value is 'error';
    • CodeMinor value is 'invalid_filter_field'.
  • Filtering on extensions is supported. Note then when querying on extensions, the property is loosely typed.
  • Filtering rules should conform to the use of the Unicode Collation Algorithm [[[UNICODE, 16]] when using the relevant comparisons.
B.1.3.3 Complex filters
Complex filter requests can be created via the use of a parameter in the query string. Edu-API supports " AND " and " OR " (note the surrounding white space at each side) and that there is only one such operator used in any filter, i.e. a single 'AND' or a single 'OR' in the filter. A single white space must occur before and after the parameter. The syntax for a getAllPersons request that asks for a filter on formattedName = "John Doe" AND isDeceased = "false" is:
GET /ims/eduapi/base/v1p0/persons?filter=formattedName='John Doe' AND isDeceased='false'
The same example request, URL encoded, would look like.
GET /ims/eduapi/base/v1p0/persons?filter=formattedName%3D%27John%20Doe%27%20AND isDeceased%3E%27false%27
Providers can declare consumers of their support by adding LogicalAnd and LogicalOr to the list of supported expressions defined by the x-imssf-supported-expressions Open API extension.

Filtering on Arrays

When filtering on objects that are arrays the application of the filter depends on the nature of the comparison. So in the case of filtering on the languagesSpoken attribute when the value of the field is 'language1,language2,language3' the following filters would return:
  • ?filter=languagesSpoken='language1,language2' - record not returned; TDB add why is not supported
  • ?filter=languagesSpoken='language1,language2,language3' - record returned;
  • ?filter=languagesSpoken='language1,language2,language3' - record returned;
  • ?filter=languagesSpoken='language1,language4' - record not returned;
  • ?filter=languagesSpoken~'language1" - record returned;
  • ?filter=languagesSpoken~'language1,language2' - record returned;
  • ?filter=languagesSpoken~'language1,language2,language3' - record returned.
  • ?filter=languagesSpoken~'language1,language4' - record returned;
This means filtering using the '=' has 'AND' semantics and the '~' has 'OR' semantics.
Consumers should always consult with their service provider partners for details on their support for filtering, including the set of attributes they support filtering on. As previously stated, filtering rules should conform to the use of the Unicode Collation Algorithm [[[UNICODE, 16]] when using the relevant comparisons. Providers can declare consumers of their support for array filtering by setting the boolean x-imssf-supported-array-filtering Open API extension in the filter parameter definition in their Open API definition file.
Example 5: filter param definition in Open API file with support for array filtering
"filter" : {
       "name" : "filter",
       "in" : "query",
       "description" : "Specifies that the returned collection should be filtered using the supplied criteria.",
       "required" : false,
       "allowEmptyValue" : false,
       "style" : "form",
       "schema" : {
         "type" : "string",
         "description" : "Character strings."

       },
	"x-imssf-supported-array-filtering": true
},
If the extension is omitted, consumers can assume the provider doesn't supports this type of filtering.
Note
If the provider supports filtering on Arrays, it must declare at least one expression in the list of supported expressions. See the next section for more details.

Pagination

Requests for collections like getAllUsers run a danger of data overload. To avoid this, implementations should adopt a pagination mechanism. Pagination is controlled via two parameters appended to the request and pagination headers in the response.

The Request

The parameters Edu-API uses in the request are:
  • limit - the number of results to return (the default value is 100);
  • offset - the index of the first record to return (zero index and so the default value is 0).
The syntax for a request that returns the first 10 persons records:
GET /ims/eduapi/base/v1p0/persons?limit=10
The syntax for a request that returns the second 10 persons records:
GET /ims/eduapi/base/v1p0/persons?limit=10&offset=10

The Response

The response includes the following pagination headers.
Response Header Descriptions Required
X-Total-Count: The resource server MUST include an X-Total-Count response header if the total result count is known. If the total result count is not known, the total count header MUST be omitted. Conditionally Required for 200 OK Response
Link: The resource server MUST include a Link response header if the list of credentials in the response is incomplete; and MAY include the Link header if the response is complete. Conditionally Required for 200 OK Response
If present, the Link header MUST support all of the following link relations (rel values)
Relation Descriptions
next The link relation for the immediate next page of results. This MUST appear when the current list response is incomplete.
last The link relation for the last page of results. This MUST always appear.
prev The link relation for the immediate previous page of results. This MUST appear when the offset is greater than zero.
first The link relation for the first page of results. This MUST always appear.

Implementation notes

If the consumer requests that data be selected using non-existent field, ALL data for the record is returned. If the consumer requests that data be selected using a blank field the request will be treated as an invalid request. The server must provide the associated transaction status code information of:
  • CodeMajor value is 'failure';
  • Severity value is 'error';
  • CodeMinor value is 'invalid_selection_field'.

C. Service Models

C.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.

C.1.1 EducationManagement

Operations relating to the Abstract Education Resources

C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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

C.1.2 AcademicSessionManagement

Operations relating to AcademicSessions

C.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
C.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

C.1.3 OrganizationManagement

Operations relating to Organizations

C.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
C.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
C.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
C.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

C.1.4 PersonManagement

Operations relating to Persons

C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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
C.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

C.1.5 EnrollmentManagement

Operations relating to Enrollments

C.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
C.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
C.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
C.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
C.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
C.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

C.1.6 AffiliationManagement

Operations relating to Affiliations

C.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
C.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].

D. Examples

D.1 JSON Payload Examples

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

D.1.1 Person Example

{
  "sourcedId": "-F4--6-D3",
  "otherIdentifiers": [
    {
      "identifier": "EA-F-_-2_",
      "identifierType": "systemId"
    },
    {
      "identifier": "C4--1B_D",
      "identifierType": "productId"
    }
  ],
  "recordLanguage": "en-JM",
  "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": "fi-Latn-FI",
      "value": "...string..."
    },
    {
      "recordLanguage": "es-PE",
      "value": "...string..."
    }
  ],
  "languagesSpoken": [
    "sk",
    "mai-Deva-IN"
  ],
  "dateOfBirth": "2025-03-12",
  "placeOfBirth": "...string...",
  "countryOfBirth": "...string...",
  "isDeceased": true,
  "dateOfDeath": "2025-03-12",
  "primaryEmail": {
    "emailType": "homeEmail",
    "email": "qklciapi@example.org"
  },
  "otherEmails": [
    {
      "emailType": "homeEmail",
      "email": "ztzbyrinb@example.org"
    },
    {
      "emailType": "workEmail",
      "email": "yxdotmep@example.org"
    }
  ],
  "primaryPhone": {
    "phoneType": "homePhone",
    "phone": "355151857776"
  },
  "otherPhones": [
    {
      "phoneType": "homePhone",
      "phone": "6721866156"
    },
    {
      "phoneType": "workPhone",
      "phone": "25654"
    }
  ],
  "primaryAddress": {
    "addressType": "visitingAddress",
    "addressCountry": "...string...",
    "addressCountryCode": "ZW",
    "addressRegion": "...string...",
    "addressLocality": "...string...",
    "streetAddress": "...string...",
    "postOfficeBoxNumber": "...string...",
    "postalCode": "...string...",
    "geo": {
      "latitude": 0.19161958,
      "longitude": 0.05283779
    }
  },
  "otherAddresses": [
    {
      "addressType": "visitingAddress",
      "addressCountry": "...string...",
      "addressCountryCode": "PM",
      "addressRegion": "...string...",
      "addressLocality": "...string...",
      "streetAddress": "...string...",
      "postOfficeBoxNumber": "...string...",
      "postalCode": "...string...",
      "geo": {
        "latitude": 0.8223419,
        "longitude": 0.76351494
      }
    },
    {
      "addressType": "mailingAddress",
      "addressCountry": "...string...",
      "addressCountryCode": "PH",
      "addressRegion": "...string...",
      "addressLocality": "...string...",
      "streetAddress": "...string...",
      "postOfficeBoxNumber": "...string...",
      "postalCode": "...string...",
      "geo": {
        "latitude": 0.45573658,
        "longitude": 0.30958176
      }
    }
  ],
  "agents": [
    {
      "agentType": "parent",
      "person": "2AA-D5B-5",
      "description": [
        {
          "recordLanguage": "en-FI",
          "value": "...string..."
        },
        {
          "recordLanguage": "lb-Latn-LU",
          "value": "...string..."
        }
      ],
      "domain": "...string..."
    },
    {
      "agentType": "guardian",
      "person": "_3-CF-A9",
      "description": [
        {
          "recordLanguage": "en-VG",
          "value": "...string..."
        },
        {
          "recordLanguage": "fr-CH",
          "value": "...string..."
        }
      ],
      "domain": "...string..."
    }
  ],
  "dateLastModified": "2025-03-12T02:03:43+02:00",
  "recordStatus": "active"
}

D.1.2 Orgnaization Example

{
  "sourcedId": "E-6D7_-",
  "recordLanguage": "nds",
  "primaryCode": {
    "identifier": "5328-E",
    "identifierType": "systemId"
  },
  "otherCodes": [
    {
      "identifier": "77B8--",
      "identifierType": "systemId"
    },
    {
      "identifier": "46-_1_",
      "identifierType": "productId"
    }
  ],
  "name": [
    {
      "recordLanguage": "kab-DZ",
      "value": "...string..."
    },
    {
      "recordLanguage": "sv",
      "value": "...string..."
    }
  ],
  "description": [
    {
      "recordLanguage": "yo-BJ",
      "value": "...string..."
    },
    {
      "recordLanguage": "yav",
      "value": "...string..."
    }
  ],
  "organizationType": "...string...",
  "parent": "5_-6--",
  "children": [
    "---_A1F",
    "_F-26-4"
  ],
  "primaryAddress": {
    "addressType": "visitingAddress",
    "addressCountry": "...string...",
    "addressCountryCode": "RW",
    "addressRegion": "...string...",
    "addressLocality": "...string...",
    "streetAddress": "...string...",
    "postOfficeBoxNumber": "...string...",
    "postalCode": "...string...",
    "geo": {
      "latitude": 0.21091795,
      "longitude": 0.2589553
    }
  },
  "otherAddresses": [
    {
      "addressType": "visitingAddress",
      "addressCountry": "...string...",
      "addressCountryCode": "CK",
      "addressRegion": "...string...",
      "addressLocality": "...string...",
      "streetAddress": "...string...",
      "postOfficeBoxNumber": "...string...",
      "postalCode": "...string...",
      "geo": {
        "latitude": 0.3111273,
        "longitude": 0.7902304
      }
    },
    {
      "addressType": "mailingAddress",
      "addressCountry": "...string...",
      "addressCountryCode": "TZ",
      "addressRegion": "...string...",
      "addressLocality": "...string...",
      "streetAddress": "...string...",
      "postOfficeBoxNumber": "...string...",
      "postalCode": "...string...",
      "geo": {
        "latitude": 0.30418062,
        "longitude": 0.17345738
      }
    }
  ],
  "dateLastModified": "2025-03-12T02:03:43+02:00",
  "recordStatus": "active"
}

D.1.3 Academic Session Example

{
  "sourcedId": "--_E3",
  "recordLanguage": "vai-Vaii",
  "primaryCode": {
    "identifier": "-1__B-41D",
    "identifierType": "systemId"
  },
  "otherCodes": [
    {
      "identifier": "6C4-_-_9",
      "identifierType": "systemId"
    },
    {
      "identifier": "CEA--_8_",
      "identifierType": "productId"
    }
  ],
  "sessionType": "gradingPeriod",
  "title": [
    {
      "recordLanguage": "sk-Latn-SK",
      "value": "...string..."
    },
    {
      "recordLanguage": "kn-IN",
      "value": "...string..."
    }
  ],
  "startDate": "2025-03-12T02:03:43+02:00",
  "endDate": "2025-03-12T02:03:43+02:00",
  "parent": "-9A2_",
  "children": [
    "D__2-",
    "4__-9"
  ],
  "recordStatus": "active",
  "dateLastModified": "2025-03-12T02:03:43+02:00"
}

D.1.4 Enrollment Example

{
  "sourcedId": "7A8BA",
  "recordLanguage": "ebu",
  "isActive": false,
  "enrollmentStatus": "onLeave",
  "person": "--1_-14-_",
  "role": "member",
  "startDate": "2025-03-12T02:03:43+02:00",
  "endDate": "2025-03-12T02:03:43+02:00",
  "educationOffering": "DF43_--E_",
  "offeringType": "collection",
  "recordStatus": "active",
  "dateLastModified": "2025-03-12T02:03:43+02:00"
}

D.1.5 Affilliation Example

{
  "sourcedId": "-2A3CDC",
  "person": "-_--_-6_6",
  "organization": "-7E33",
  "role": "member",
  "startDate": "2025-03-12T02:03:43+02:00",
  "endDate": "2025-03-12T02:03:43+02:00",
  "affiliationStatus": "active",
  "recordStatus": "active",
  "dateLastModified": "2025-03-12T02:03:43+02:00"
}

D.1.6 Template Example: Course Template

{
  "courseType": "standard",
  "parent": [
    "B1_2D_",
    "63--_-5-_"
  ],
  "sourcedId": "--8-99B",
  "recordLanguage": "ar-IL",
  "title": [
    {
      "recordLanguage": "ms-ID",
      "value": "...string..."
    },
    {
      "recordLanguage": "dz-Tibt-BT",
      "value": "...string..."
    }
  ],
  "description": [
    {
      "recordLanguage": "lv",
      "value": "...string..."
    },
    {
      "recordLanguage": "en-SE",
      "value": "...string..."
    }
  ],
  "primaryCode": {
    "identifier": "9_1_67-",
    "identifierType": "systemId"
  },
  "otherCodes": [
    {
      "identifier": "-2E--__--",
      "identifierType": "systemId"
    },
    {
      "identifier": "66-A2-",
      "identifierType": "productId"
    }
  ],
  "organization": "9C3_7",
  "organizationCode": "...string...",
  "level": "graduate",
  "creditType": "credit",
  "creditsAwarded": "...string...",
  "gradingScheme": {
    "recordLanguage": "luo",
    "value": "...string..."
  },
  "teachingLanguage": "eu",
  "recordStatus": "active",
  "dateLastModified": "2025-03-12T02:03:43+02:00"
}

D.1.7 Offering Example: Course Offering

{
  "offeringType": "standard",
  "course": "-5BA2",
  "parent": [
    "DE-569__D",
    "4__EE"
  ],
  "sourcedId": "-__D_",
  "recordLanguage": "ff-Adlm-GN",
  "title": [
    {
      "recordLanguage": "en-SH",
      "value": "...string..."
    },
    {
      "recordLanguage": "vai-Latn-LR",
      "value": "...string..."
    }
  ],
  "description": [
    {
      "recordLanguage": "ses",
      "value": "...string..."
    },
    {
      "recordLanguage": "en-JE",
      "value": "...string..."
    }
  ],
  "primaryCode": {
    "identifier": "_-----C-8",
    "identifierType": "systemId"
  },
  "otherCodes": [
    {
      "identifier": "7-C_C-",
      "identifierType": "systemId"
    },
    {
      "identifier": "_--BF-C-",
      "identifierType": "productId"
    }
  ],
  "creditType": "credit",
  "locations": [
    {
      "identifier": "949_9FD3",
      "description": [
        {
          "recordLanguage": "lv-LV",
          "value": "...string..."
        },
        {
          "recordLanguage": "sr-Cyrl-ME",
          "value": "...string..."
        }
      ],
      "geoLocation": {
        "latitude": 0.65042543,
        "longitude": 0.45248014
      }
    },
    {
      "identifier": "D_5F_86-",
      "description": [
        {
          "recordLanguage": "ln",
          "value": "...string..."
        },
        {
          "recordLanguage": "uz-UZ",
          "value": "...string..."
        }
      ],
      "geoLocation": {
        "latitude": 0.6725416,
        "longitude": 0.8980463
      }
    }
  ],
  "organization": "-B-_A_",
  "academicSession": "C-_-5--",
  "organizationCode": "...string...",
  "academicSessionCode": "...string...",
  "offeringFormat": "online",
  "paceOfStudy": null,
  "registrationStatus": "open",
  "startDate": "2025-03-12+02:00",
  "endDate": "2025-03-12+02:00",
  "teachingLanguage": "km-Khmr-KH",
  "maxNumberStudents": 0,
  "minNumberStudents": 0,
  "enrolledNumberStudents": 0,
  "pendingNumberStudents": 0,
  "roleEnablement": [
    {
      "role": "member",
      "startDate": "2025-03-12T02:03:43+02:00",
      "endDate": "2025-03-12T02:03:43+02:00"
    },
    {
      "role": "chair",
      "startDate": "2025-03-12T02:03:43+02:00",
      "endDate": "2025-03-12T02:03:43+02:00"
    }
  ],
  "recordStatus": "active",
  "dateLastModified": "2025-03-12T02:03:43+02:00",
  "synchronicity": "hybrid"
}

E. JSON Schema

E.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",
            "doctoral"
          ]
        },
        {
          "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|.|-|_]+"
        }
      ]
    },
    "creditsAwarded": {
      "description": "A description of the credits that the student receives after the completion of the education.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "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",
    "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
    }
  }
}

E.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"
      }
    },
    "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|.|-|_]+"
        }
      ]
    },
    "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
    }
  }
}

E.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",
            "doctoral"
          ]
        },
        {
          "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|.|-|_]+"
        }
      ]
    },
    "creditsAwarded": {
      "description": "A description of the credits that the student receives after the completion of the education.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "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",
    "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
    }
  }
}

E.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",
            "doctoral"
          ]
        },
        {
          "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|.|-|_]+"
        }
      ]
    },
    "creditsAwarded": {
      "description": "A description of the credits that the student receives after the completion of the education.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "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",
    "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
    }
  }
}

E.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",
            "doctoral"
          ]
        },
        {
          "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|.|-|_]+"
        }
      ]
    },
    "creditsAwarded": {
      "description": "A description of the credits that the student receives after the completion of the education.",
      "$comment": "Origin: String (PrimitiveType); Character strings.",
      "type": "string"
    },
    "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",
    "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
    }
  }
}

E.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"
      }
    },
    "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|.|-|_]+"
        }
      ]
    },
    "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
    }
  }
}

E.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"
      }
    },
    "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|.|-|_]+"
        }
      ]
    },
    "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
    }
  }
}

E.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"
      }
    },
    "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|.|-|_]+"
        }
      ]
    },
    "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
    }
  }
}

E.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
    }
  }
}

E.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
}

E.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
    }
  }
}

E.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
    }
  }
}

E.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
    }
  }
}

E.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
}

E.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
    }
  }
}

E.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
    }
  }
}

E.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
}

E.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
    }
  }
}

E.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
}

E.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
    }
  }
}

E.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
    }
  }
}

E.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
    }
  }
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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 equivalent degree.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    },
    "doctoral": {
      "description": "A course of study that awards a PhD's or equivalent degree.",
      "$comment": "Origin: Term (DerivedType); A term in an enumeration. The lexical constraints are the same as for `Token`.",
      "type": "string"
    }
  },
  "required": [
    "graduate",
    "undergraduate",
    "doctoral"
  ],
  "additionalProperties": false
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.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
}

E.48 IdentifierTypeEnum

{
  "$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
}

E.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
}

E.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
}

E.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
}

E.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 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"
    },
    "schoolYear": {
      "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"
    },
    "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
}

E.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
}

E.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
}

E.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
    }
  }
}

E.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
}

E.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
}

E.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
    }
  }
}

E.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
}

E.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
}

E.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
}

E.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
}

F. 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 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.getallstaffforcomponentoffering.operation
  /enrollments:
    get:
      tags:
      - EnrollmentManagement
      summary: The REST GET operation for the getAllEnrollments() API call.
      description: Read all Enrollments for an institution
      operationId: getAllEnrollments
      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 getAllEnrollments() API call.
          headers:
            X-Total-Count:
              $ref: "#/components/headers/X-Total-Count"
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "The contextualized joining of a person and a CourseOffering,\
                  \ CollectionOffering or ComponentOffering."
                items:
                  $ref: "#/components/schemas/Enrollment"
          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.getallenrollments.operation
  /enrollments/{id}:
    get:
      tags:
      - EnrollmentManagement
      summary: The REST GET operation for the getEnrollmentById() API call.
      description: Read Enrollment with a specific id
      operationId: getEnrollmentById
      parameters:
      - name: id
        in: path
        description: The sourcedId of the Enrollment
        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 getEnrollmentById() API call.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Enrollment"
        "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.getenrollmentbyid.operation
  /courseOfferings/{id}/enrollments:
    get:
      tags:
      - EnrollmentManagement
      summary: The REST GET operation for the getAllEnrollmentsForCourseOffering()
        API call.
      description: Read all enrollments for a courseOffering
      operationId: getAllEnrollmentsForCourseOffering
      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 getAllEnrollmentsForCourseOffering()
            API call.
          headers:
            X-Total-Count:
              $ref: "#/components/headers/X-Total-Count"
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "The contextualized joining of a person and a CourseOffering,\
                  \ CollectionOffering or ComponentOffering."
                items:
                  $ref: "#/components/schemas/Enrollment"
          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.getallenrollmentsforcourseoffering.operation
  /collectionOfferings/{id}/enrollments:
    get:
      tags:
      - EnrollmentManagement
      summary: The REST GET operation for the getAllEnrollmentsForCollectionOffering()
        API call.
      description: Read all enrollments for a courseOffering
      operationId: getAllEnrollmentsForCollectionOffering
      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 getAllEnrollmentsForCollectionOffering()
            API call.
          headers:
            X-Total-Count:
              $ref: "#/components/headers/X-Total-Count"
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "The contextualized joining of a person and a CourseOffering,\
                  \ CollectionOffering or ComponentOffering."
                items:
                  $ref: "#/components/schemas/Enrollment"
          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.getallenrollmentsforcollectionoffering.operation
  /componentOfferings/{id}/enrollments:
    get:
      tags:
      - EnrollmentManagement
      summary: The REST GET operation for the getAllEnrollmentsForComponentOffering()
        API call.
      description: Read all enrollments for a courseOffering
      operationId: getAllEnrollmentsForComponentOffering
      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 getAllEnrollmentsForComponentOffering()
            API call.
          headers:
            X-Total-Count:
              $ref: "#/components/headers/X-Total-Count"
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "The contextualized joining of a person and a CourseOffering,\
                  \ CollectionOffering or ComponentOffering."
                items:
                  $ref: "#/components/schemas/Enrollment"
          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.getallenrollmentsforcomponentoffering.operation
  /academicSessions/{id}/enrollments:
    get:
      tags:
      - EnrollmentManagement
      summary: The REST GET operation for the getAllEnrollmentsBySession() API call.
      description: Read all enrollments in a specified academic session
      operationId: getAllEnrollmentsBySession
      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 getAllEnrollmentsBySession() API
            call.
          headers:
            X-Total-Count:
              $ref: "#/components/headers/X-Total-Count"
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                description: "The contextualized joining of a person and a CourseOffering,\
                  \ CollectionOffering or ComponentOffering."
                items:
                  $ref: "#/components/schemas/Enrollment"
          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"
        "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.getallenrollmentsbysession.operation
  /affiliations:
    get:
      tags:
      - AffiliationManagement
      summary: The REST GET operation for the getAllAffiliations() API call.
      description: Read all affiliations for an institution
      operationId: getAllAffiliations
      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 getAllAffiliations() API call.
          headers:
            X-Total-Count:
              $ref: "#/components/headers/X-Total-Count"
          content:
            application/json:
              schema:
                minItems: 1
                type: array
                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.
                items:
                  $ref: "#/components/schemas/Affiliation"
          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.getallaffiliations.operation
  /affiliations/{id}:
    get:
      tags:
      - AffiliationManagement
      summary: The REST GET operation for the getAffiliationById() API call.
      description: Read Affiliation with a specific id
      operationId: getAffiliationById
      parameters:
      - name: id
        in: path
        description: The sourcedId of the Affiliation
        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 getAffiliationById() API call.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Affiliation"
        "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.getaffiliationbyid.operation
components:
  schemas:
    TypedAddress:
      required:
      - addressType
      type: object
      properties:
        addressCountry:
          type: string
          description: A country.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        geo:
          $ref: "#/components/schemas/GeoCoordinates"
        addressCountryCode:
          type: string
          description: "A country code. The value must be a ISO 3166-1 alpha-2 country\
            \ code [[ISO3166-1]]."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.countrycode.class
        streetAddress:
          type: string
          description: A street address within the locality.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        addressType:
          description: The type of address. This is based on an extensible enumerated
            vocabulary.
          anyOf:
          - type: string
            enum:
            - visitingAddress
            - mailingAddress
            - permanentAddress
            - deliveryAddress
            - billingAddress
            - homeAddress
            - workAddress
            - formerAddress
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.addresstypeenum.class
        postalCode:
          type: string
          description: A postal code.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        addressLocality:
          type: string
          description: A locality within the region.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        addressRegion:
          type: string
          description: A region within the country.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        postOfficeBoxNumber:
          type: string
          description: A post office box number for PO box addresses.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
      additionalProperties: false
      description: A typed address.
      x-class-pid: org.1edtech.eduapi.v1p0.typedaddress.class
    TypedPhone:
      required:
      - phoneType
      - phone
      type: object
      properties:
        phoneType:
          description: The type of phone number. This is based on an extensible enumerated
            vocabulary.
          anyOf:
          - type: string
            enum:
            - homePhone
            - workPhone
            - icePhone
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.phonetypeenum.class
        phone:
          type: string
          description: A phone number.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.phonenumber.class
      additionalProperties: false
      description: A typed phone number.
      x-class-pid: org.1edtech.eduapi.v1p0.typedphone.class
    Organization:
      required:
      - sourcedId
      - recordLanguage
      - name
      - organizationType
      - recordStatus
      type: object
      properties:
        sourcedId:
          type: string
          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)."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.guid.class
        otherCodes:
          minItems: 0
          type: array
          description: Human readable codes/identifiers for the entity being described
          items:
            $ref: "#/components/schemas/IdentifierEntry"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.identifierentry.class
        parent:
          type: string
          description: A reference to a parent organization.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.organizationguidref.class
        otherAddresses:
          minItems: 0
          type: array
          description: A list of other addresses.
          items:
            $ref: "#/components/schemas/TypedAddress"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.typedaddress.class
        recordLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The primary language used in the described entity.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        description:
          minItems: 0
          type: array
          description: A set of descriptions of the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        primaryCode:
          $ref: "#/components/schemas/IdentifierEntry"
        organizationType:
          type: string
          description: The type of Organization.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        extensions:
          $ref: "#/components/schemas/organizationExtensions"
        dateLastModified:
          type: string
          description: A timestamp describing when this record was last modified.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        recordStatus:
          type: string
          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."
          enum:
          - active
          - deleted
          - inactive
          x-srcprop-pid: org.1edtech.eduapi.v1p0.recordstatustypeenum.class
        children:
          minItems: 0
          type: array
          description: References to child organizations.
          items:
            type: string
            description: A reference to an `Organization` object that has an allocated
              sourcedId (`GUID`).
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.organizationguidref.class
        name:
          minItems: 1
          type: array
          description: A name for the associated entity with a designated language
            for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        primaryAddress:
          $ref: "#/components/schemas/OptionallyTypedAddress"
      additionalProperties: false
      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."
      x-class-pid: org.1edtech.eduapi.v1p0.organization.class
    educationOfferingExtensions:
      type: object
      properties: {}
      additionalProperties: true
      description: Extension properties related to education offerings
      x-class-pid: org.1edtech.eduapi.v1p0.educationofferingextensions.class
    personExtensions:
      type: object
      properties: {}
      additionalProperties: true
      description: Extension properties related to Edu-API persons
      x-class-pid: org.1edtech.eduapi.v1p0.personextensions.class
    CourseOffering:
      required:
      - offeringType
      - course
      - sourcedId
      - recordLanguage
      - title
      - description
      - primaryCode
      - organization
      - academicSession
      - offeringFormat
      - registrationStatus
      - startDate
      - endDate
      - recordStatus
      type: object
      properties:
        minNumberStudents:
          type: integer
          description: The minimum number of students allowed to enroll for this offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        synchronicity:
          description: An indicator of whether instructor and learner must both be
            present at the same time
          anyOf:
          - type: string
            enum:
            - hybrid
            - asynchronous
            - synchronous
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.synchronicityenum.class
        parent:
          minItems: 0
          type: array
          description: A reference to the parent collectionOffering.
          items:
            type: string
            description: A reference to an `EducationCollectionOffering` object that
              has an allocated sourcedId (`GUID`).
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.collectionofferingguidref.class
        registrationStatus:
          type: string
          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.
          enum:
          - open
          - closed
          - pending
          - waitlist
          x-srcprop-pid: org.1edtech.eduapi.v1p0.registrationstatusenum.class
        roleEnablement:
          minItems: 0
          type: array
          description: "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."
          items:
            $ref: "#/components/schemas/RoleEnablement"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.roleenablement.class
        offeringType:
          description: A representation of what the entity defines. It is based on
            an extensible enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - standard
            - honors
            - research
            - independentStudy
            - practicum
            - internship
            - studyAbroad
            - capstone
            - clinical
            - correspondence
            - fieldExperience
            - seminar
            - thesis
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.coursetypeenum.class
        endDate:
          type: string
          description: The end date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datez.class
        description:
          minItems: 1
          type: array
          description: A set of descriptions of the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        title:
          minItems: 1
          type: array
          description: A set of titles for the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        primaryCode:
          $ref: "#/components/schemas/IdentifierEntry"
        paceOfStudy:
          type: string
          description: The tempo that the course is taught at as a percentage of a
            normal course.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.percentage.class
        creditType:
          description: Reference to what the completion of this entity counts towards.
            This is represented by an extensible enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - credit
            - nonCredit
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.credittypeenum.class
        enrolledNumberStudents:
          type: integer
          description: The number of students that have already enrolled for this
            offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        academicSessionCode:
          type: string
          description: A business code that a system might use to reference an academic
            session.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        offeringFormat:
          description: The modality by which the entity is delivered. This is represented
            by an extensible enumerated vocabulary
          anyOf:
          - type: string
            enum:
            - online
            - blended
            - onGround
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.offeringformatenum.class
        dateLastModified:
          type: string
          description: A timestamp describing when this record was last modified.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        course:
          type: string
          description: A reference to the courseTemplate.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.coursetemplateguidref.class
        teachingLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The main language used to relay the content of the offering.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        sourcedId:
          type: string
          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)."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.guid.class
        otherCodes:
          minItems: 0
          type: array
          description: Human readable codes/identifiers for the entity being described
          items:
            $ref: "#/components/schemas/IdentifierEntry"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.identifierentry.class
        pendingNumberStudents:
          type: integer
          description: The number of students that have a pending enrollment request
            for this offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        recordLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The primary language used in the described entity.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        academicSession:
          type: string
          description: A reference to an Edu-API Academic Session
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.academicsessionguidref.class
        extensions:
          $ref: "#/components/schemas/educationOfferingExtensions"
        maxNumberStudents:
          type: integer
          description: The maximum number of students allowed to enroll for this offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        recordStatus:
          type: string
          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."
          enum:
          - active
          - deleted
          - inactive
          x-srcprop-pid: org.1edtech.eduapi.v1p0.recordstatustypeenum.class
        organizationCode:
          type: string
          description: A business code used to system might use to reference an organization
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        organization:
          type: string
          description: A reference to an Edu-API Organization.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.organizationguidref.class
        locations:
          minItems: 0
          type: array
          description: A container for describing where the entity takes place. This
            could be as a description or as a geo location
          items:
            $ref: "#/components/schemas/Location"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.location.class
        startDate:
          type: string
          description: The start date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datez.class
      additionalProperties: false
      description: Relates a course to one or more delivery scenarios.
      x-class-pid: org.1edtech.eduapi.v1p0.courseoffering.class
    PersonNameEntry:
      required:
      - nameType
      type: object
      properties:
        nameType:
          description: The type of name described in this entry.
          anyOf:
          - type: string
            enum:
            - legalName
            - preferredName
            - phoneticName
            - aliasName
            - formerName
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.personnametypeenum.class
        honorificSuffix:
          type: string
          description: "Honorific suffix(es) following a person's name (e.g. 'M.D,\
            \ PhD')."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        familyName:
          type: string
          description: "Family name. In the western world, often referred to as the\
            \ 'last name' of a person."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        givenName:
          type: string
          description: "Given name. In the western world, often referred to as the\
            \ 'first name' of a person."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        familyNamePrefix:
          type: string
          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')."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        patronymicName:
          type: string
          description: Patronymic name.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        honorificPrefix:
          type: string
          description: "Honorific prefix(es) preceding a person's name (e.g. 'Dr',\
            \ 'Mrs' or 'Mr')."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        additionalName:
          type: string
          description: Additional name. Includes what is often referred to as 'middle
            name' in the western world.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
      additionalProperties: false
      description: The PersonNameEntry complex type.
      x-class-pid: org.1edtech.eduapi.v1p0.personnameentry.class
    IdentifierEntry:
      required:
      - identifier
      - identifierType
      type: object
      properties:
        identifier:
          type: string
          description: An identifier.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.identifier.class
        identifierType:
          description: The identifier type.
          anyOf:
          - type: string
            enum:
            - systemId
            - productId
            - userName
            - accountId
            - emailAddress
            - nationalIdentityNumber
            - isbn
            - issn
            - lisSourcedId
            - oneRosterSourcedId
            - sisSourcedId
            - ltiContextId
            - ltiDeploymentId
            - ltiToolId
            - ltiPlatformId
            - ltiUserId
            - identifier
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.identifiertypeenum.class
      additionalProperties: false
      description: A container to transmit additional needed identifiers
      x-class-pid: org.1edtech.eduapi.v1p0.identifierentry.class
    Imsx_CodeMinorField:
      required:
      - imsx_codeMinorFieldName
      - imsx_codeMinorFieldValue
      type: object
      properties:
        imsx_codeMinorFieldName:
          type: string
          description: This should contain the identity of the system that has produced
            the code minor status code report.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.normalizedstring.class
        imsx_codeMinorFieldValue:
          type: string
          description: The code minor status code (this is a value from the corresponding
            enumerated vocabulary).
          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
          x-srcprop-pid: org.1edtech.eduapi.v1p0.imsx_codeminorfieldvalue.class
      additionalProperties: false
      description: This is the container for a single code minor status code.
      x-class-pid: org.1edtech.eduapi.v1p0.imsx_codeminorfield.class
    OptionallyTypedAddress:
      type: object
      properties:
        addressCountry:
          type: string
          description: A country.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        geo:
          $ref: "#/components/schemas/GeoCoordinates"
        addressCountryCode:
          type: string
          description: "A country code. The value must be a ISO 3166-1 alpha-2 country\
            \ code [[ISO3166-1]]."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.countrycode.class
        streetAddress:
          type: string
          description: A street address within the locality.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        addressType:
          description: The type of address. This is based on an extensible enumerated
            vocabulary.
          anyOf:
          - type: string
            enum:
            - visitingAddress
            - mailingAddress
            - permanentAddress
            - deliveryAddress
            - billingAddress
            - homeAddress
            - workAddress
            - formerAddress
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.addresstypeenum.class
        postalCode:
          type: string
          description: A postal code.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        addressLocality:
          type: string
          description: A locality within the region.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        addressRegion:
          type: string
          description: A region within the country.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        postOfficeBoxNumber:
          type: string
          description: A post office box number for PO box addresses.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
      additionalProperties: false
      description: A optionally typed address.
      x-class-pid: org.1edtech.eduapi.v1p0.optionallytypedaddress.class
    academicSessionExtensions:
      type: object
      properties: {}
      additionalProperties: true
      description: Extension properties related to education academic sessions
      x-class-pid: org.1edtech.eduapi.v1p0.academicsessionextensions.class
    Education:
      required:
      - sourcedId
      - recordLanguage
      - title
      - description
      - primaryCode
      - organization
      - level
      - gradingScheme
      - recordStatus
      type: object
      properties:
        sourcedId:
          type: string
          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)."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.guid.class
        otherCodes:
          minItems: 0
          type: array
          description: Any number of additional human readable codes/identifiers for
            the entity being described
          items:
            $ref: "#/components/schemas/IdentifierEntry"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.identifierentry.class
        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.
          anyOf:
          - type: string
            enum:
            - graduate
            - undergraduate
            - doctoral
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.educationlevelenum.class
        creditsAwarded:
          type: string
          description: A description of the credits that the student receives after
            the completion of the education.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        recordLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The primary language used in the described entity.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        description:
          minItems: 1
          type: array
          description: A set of descriptions of the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        title:
          minItems: 1
          type: array
          description: A set of titles for the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        primaryCode:
          $ref: "#/components/schemas/IdentifierEntry"
        creditType:
          description: Reference to what the completion of this entity counts towards.
            This is represented by an extensible enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - credit
            - nonCredit
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.credittypeenum.class
        extensions:
          $ref: "#/components/schemas/educationExtensions"
        recordStatus:
          type: string
          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."
          enum:
          - active
          - deleted
          - inactive
          x-srcprop-pid: org.1edtech.eduapi.v1p0.recordstatustypeenum.class
        dateLastModified:
          type: string
          description: A timestamp describing when this record was last modified.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        organizationCode:
          type: string
          description: A business code used to system might use to reference an organization
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        organization:
          type: string
          description: A reference to an Edu-API Organization.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.organizationguidref.class
        gradingScheme:
          $ref: "#/components/schemas/LanguageTypedString"
        teachingLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The main language used to relay the content of the offering.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
      additionalProperties: false
      description: A description of an abstract education.
      x-class-pid: org.1edtech.eduapi.v1p0.education.class
    CollectionOffering:
      required:
      - offeringType
      - collection
      - sourcedId
      - recordLanguage
      - title
      - description
      - primaryCode
      - organization
      - academicSession
      - offeringFormat
      - registrationStatus
      - startDate
      - endDate
      - recordStatus
      type: object
      properties:
        minNumberStudents:
          type: integer
          description: The minimum number of students allowed to enroll for this offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        synchronicity:
          description: An indicator of whether instructor and learner must both be
            present at the same time
          anyOf:
          - type: string
            enum:
            - hybrid
            - asynchronous
            - synchronous
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.synchronicityenum.class
        parent:
          minItems: 0
          type: array
          description: A reference to parent collectionOffering (if present).
          items:
            type: string
            description: A reference to an `EducationCollectionOffering` object that
              has an allocated sourcedId (`GUID`).
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.collectionofferingguidref.class
        registrationStatus:
          type: string
          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.
          enum:
          - open
          - closed
          - pending
          - waitlist
          x-srcprop-pid: org.1edtech.eduapi.v1p0.registrationstatusenum.class
        roleEnablement:
          minItems: 0
          type: array
          description: "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."
          items:
            $ref: "#/components/schemas/RoleEnablement"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.roleenablement.class
        offeringType:
          description: A representation of what the entity defines. It is based on
            an extensible enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - program
            - generalEducation
            - requiredCollection
            - electiveCollection
            - capstoneCollection
            - majorCollection
            - minorCollection
            - programSpecialization
            - nonDegreeCollection
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.collectiontypeenum.class
        endDate:
          type: string
          description: The end date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datez.class
        description:
          minItems: 1
          type: array
          description: A set of descriptions of the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        title:
          minItems: 1
          type: array
          description: A set of titles for the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        primaryCode:
          $ref: "#/components/schemas/IdentifierEntry"
        paceOfStudy:
          type: string
          description: The tempo that the course is taught at as a percentage of a
            normal course.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.percentage.class
        creditType:
          description: Reference to what the completion of this entity counts towards.
            This is represented by an extensible enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - credit
            - nonCredit
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.credittypeenum.class
        enrolledNumberStudents:
          type: integer
          description: The number of students that have already enrolled for this
            offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        academicSessionCode:
          type: string
          description: A business code that a system might use to reference an academic
            session.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        offeringFormat:
          description: The modality by which the entity is delivered. This is represented
            by an extensible enumerated vocabulary
          anyOf:
          - type: string
            enum:
            - online
            - blended
            - onGround
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.offeringformatenum.class
        dateLastModified:
          type: string
          description: A timestamp describing when this record was last modified.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        teachingLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The main language used to relay the content of the offering.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        sourcedId:
          type: string
          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)."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.guid.class
        otherCodes:
          minItems: 0
          type: array
          description: Human readable codes/identifiers for the entity being described
          items:
            $ref: "#/components/schemas/IdentifierEntry"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.identifierentry.class
        pendingNumberStudents:
          type: integer
          description: The number of students that have a pending enrollment request
            for this offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        recordLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The primary language used in the described entity.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        collection:
          type: string
          description: A reference to the collectionTemplate.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.collectiontemplateguidref.class
        academicSession:
          type: string
          description: A reference to an Edu-API Academic Session
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.academicsessionguidref.class
        extensions:
          $ref: "#/components/schemas/educationOfferingExtensions"
        maxNumberStudents:
          type: integer
          description: The maximum number of students allowed to enroll for this offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        recordStatus:
          type: string
          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."
          enum:
          - active
          - deleted
          - inactive
          x-srcprop-pid: org.1edtech.eduapi.v1p0.recordstatustypeenum.class
        organizationCode:
          type: string
          description: A business code used to system might use to reference an organization
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        organization:
          type: string
          description: A reference to an Edu-API Organization.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.organizationguidref.class
        locations:
          minItems: 0
          type: array
          description: A container for describing where the entity takes place. This
            could be as a description or as a geo location
          items:
            $ref: "#/components/schemas/Location"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.location.class
        startDate:
          type: string
          description: The start date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datez.class
      additionalProperties: false
      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."
      x-class-pid: org.1edtech.eduapi.v1p0.collectionoffering.class
    Enrollment:
      required:
      - sourcedId
      - recordLanguage
      - isActive
      - enrollmentStatus
      - person
      - role
      - educationOffering
      - offeringType
      - recordStatus
      type: object
      properties:
        sourcedId:
          type: string
          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)."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.guid.class
        role:
          description: The role of the associated person in the given context.
          anyOf:
          - type: string
            enum:
            - member
            - chair
            - staff
            - student
            - administrator
            - aide
            - guardian
            - parent
            - proctor
            - relative
            - teacher
            - advisor
            - teachingAssistant
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.roletypeenum.class
        endDate:
          type: string
          description: The end date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        offeringType:
          description: The type of education being offered. This is based on an enumerated
            vocabulary.
          anyOf:
          - type: string
            enum:
            - collection
            - course
            - component
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.educationofferingtypeenum.class
        educationOffering:
          type: string
          description: A reference to an Edu-API offering entity. This is the instantiated
            Education the person is being enrolled on.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.educationofferingguidref.class
        recordLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The primary language used in the described entity.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        isActive:
          type: boolean
          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."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.boolean.class
        extensions:
          $ref: "#/components/schemas/enrollmentExtensions"
        recordStatus:
          type: string
          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."
          enum:
          - active
          - deleted
          - inactive
          x-srcprop-pid: org.1edtech.eduapi.v1p0.recordstatustypeenum.class
        dateLastModified:
          type: string
          description: A timestamp describing when this record was last modified.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        enrollmentStatus:
          description: The status of this enrollment.
          anyOf:
          - type: string
            enum:
            - onLeave
            - withdrawn
            - accepted
            - pending
            - cancelled
            - registered
            - revoked
            - Interruption
            - finished
            - withdrawnFailing
            - withdrawnPassing
            - dropped
            - suspended
            - enrolled
            - declined
            - deferred
            - onHold
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.enrollmentstatusenum.class
        person:
          type: string
          description: A reference to an Edu-API Person.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.personguidref.class
        startDate:
          type: string
          description: The start date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
      additionalProperties: false
      description: "The contextualized joining of a person and a CourseOffering, CollectionOffering\
        \ or ComponentOffering."
      x-class-pid: org.1edtech.eduapi.v1p0.enrollment.class
    LanguageTypedString:
      required:
      - recordLanguage
      - value
      type: object
      properties:
        recordLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The primary language used in the described entity.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        value:
          type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
      additionalProperties: false
      description: A String with an associated language code.
      x-class-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
    ComponentTemplate:
      required:
      - componentType
      - sourcedId
      - recordLanguage
      - title
      - description
      - primaryCode
      - organization
      - level
      - gradingScheme
      - recordStatus
      type: object
      properties:
        sourcedId:
          type: string
          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)."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.guid.class
        otherCodes:
          minItems: 0
          type: array
          description: Any number of additional human readable codes/identifiers for
            the entity being described
          items:
            $ref: "#/components/schemas/IdentifierEntry"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.identifierentry.class
        componentType:
          description: A representation of what the entity defines. It is based on
            an extensible enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - individualizedInstruction
            - integratedLectureLab
            - laboratory
            - lecture
            - practicum
            - recitation
            - research
            - seminar
            - independentStudy
            - fieldExperience
            - exam
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.componenttypeenum.class
        parent:
          minItems: 0
          type: array
          description: A reference to the parent Course.
          items:
            type: string
            description: A reference to a `Course` object that has an allocated sourcedId
              (`GUID`).
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.coursetemplateguidref.class
        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.
          anyOf:
          - type: string
            enum:
            - graduate
            - undergraduate
            - doctoral
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.educationlevelenum.class
        creditsAwarded:
          type: string
          description: A description of the credits that the student receives after
            the completion of the education.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        recordLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The primary language used in the described entity.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        description:
          minItems: 1
          type: array
          description: A set of descriptions of the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        title:
          minItems: 1
          type: array
          description: A set of titles for the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        primaryCode:
          $ref: "#/components/schemas/IdentifierEntry"
        creditType:
          description: Reference to what the completion of this entity counts towards.
            This is represented by an extensible enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - credit
            - nonCredit
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.credittypeenum.class
        extensions:
          $ref: "#/components/schemas/educationExtensions"
        recordStatus:
          type: string
          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."
          enum:
          - active
          - deleted
          - inactive
          x-srcprop-pid: org.1edtech.eduapi.v1p0.recordstatustypeenum.class
        dateLastModified:
          type: string
          description: A timestamp describing when this record was last modified.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        organizationCode:
          type: string
          description: A business code used to system might use to reference an organization
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        organization:
          type: string
          description: A reference to an Edu-API Organization.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.organizationguidref.class
        gradingScheme:
          $ref: "#/components/schemas/LanguageTypedString"
        teachingLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The main language used to relay the content of the offering.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
      additionalProperties: false
      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."
      x-class-pid: org.1edtech.eduapi.v1p0.componenttemplate.class
    TypedEmail:
      required:
      - emailType
      - email
      type: object
      properties:
        emailType:
          description: The type of email address. This is based on an extensible enumerated
            vocabulary.
          anyOf:
          - type: string
            enum:
            - homeEmail
            - workEmail
            - iceEmail
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.emailtypeenum.class
        email:
          type: string
          description: An email address.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.emailaddress.class
      additionalProperties: false
      description: A typed email address.
      x-class-pid: org.1edtech.eduapi.v1p0.typedemail.class
    AcademicSession:
      required:
      - sourcedId
      - recordLanguage
      - recordStatus
      type: object
      properties:
        sourcedId:
          type: string
          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)."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.guid.class
        otherCodes:
          minItems: 0
          type: array
          description: Human readable codes/identifiers for the entity being described
          items:
            $ref: "#/components/schemas/IdentifierEntry"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.identifierentry.class
        parent:
          type: string
          description: A reference to another Edu-API Academic Session that serves
            as a parent `AcademicSession`.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.academicsessionguidref.class
        endDate:
          type: string
          description: The end date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        recordLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The primary language used in the described entity.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        title:
          minItems: 0
          type: array
          description: A set of titles for the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        primaryCode:
          $ref: "#/components/schemas/IdentifierEntry"
        extensions:
          $ref: "#/components/schemas/academicSessionExtensions"
        recordStatus:
          type: string
          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."
          enum:
          - active
          - deleted
          - inactive
          x-srcprop-pid: org.1edtech.eduapi.v1p0.recordstatustypeenum.class
        dateLastModified:
          type: string
          description: A timestamp describing when this record was last modified.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        children:
          minItems: 0
          type: array
          description: A reference to another Edu-API Academic Session that serves
            as a Child `AcademicSession`s.
          items:
            type: string
            description: A reference to an `AcademicSession` object that has an allocated
              sourcedId (`GUID`).
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.academicsessionguidref.class
        sessionType:
          description: The type of academic session. This is based upon an enumerated
            vocabulary.
          anyOf:
          - type: string
            enum:
            - gradingPeriod
            - semester
            - schoolYear
            - term
            - studyPeriod
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.academicsessiontypeenum.class
        startDate:
          type: string
          description: The start date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
      additionalProperties: false
      description: "A calendar period during which a school or institution schedules\
        \ classes, offerings, or other units of learning for availability."
      x-class-pid: org.1edtech.eduapi.v1p0.academicsession.class
    Imsx_CodeMinor:
      required:
      - imsx_codeMinorField
      type: object
      properties:
        imsx_codeMinorField:
          minItems: 1
          type: array
          description: Each reported code minor status code.
          items:
            $ref: "#/components/schemas/Imsx_CodeMinorField"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.imsx_codeminorfield.class
      additionalProperties: false
      description: This is the container for the set of code minor status codes reported
        in the responses from the Service Provider.
      x-class-pid: org.1edtech.eduapi.v1p0.imsx_codeminor.class
    Affiliation:
      required:
      - sourcedId
      - person
      - organization
      - role
      - affiliationStatus
      - recordStatus
      type: object
      properties:
        sourcedId:
          type: string
          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)."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.guid.class
        extensions:
          minItems: 0
          type: array
          description: A container for extension objects.
          items:
            $ref: "#/components/schemas/affiliationExtensions"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.affiliationextensions.class
        role:
          description: The role of the associated person in the given context.
          anyOf:
          - type: string
            enum:
            - member
            - chair
            - staff
            - student
            - administrator
            - aide
            - guardian
            - parent
            - proctor
            - relative
            - teacher
            - advisor
            - teachingAssistant
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.roletypeenum.class
        recordStatus:
          type: string
          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."
          enum:
          - active
          - deleted
          - inactive
          x-srcprop-pid: org.1edtech.eduapi.v1p0.recordstatustypeenum.class
        dateLastModified:
          type: string
          description: A timestamp describing when this record was last modified.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        affiliationStatus:
          description: The status of the person's affiliation with the organization.
            This is based upon an enumerated vocabulary
          anyOf:
          - type: string
            enum:
            - active
            - inactive
            - auditing
            - withdrawn
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.affiliationstatusenum.class
        endDate:
          type: string
          description: The end date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        person:
          type: string
          description: A reference to an Edu-API Person.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.personguidref.class
        organization:
          type: string
          description: A reference to an Edu-API Organization.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.organizationguidref.class
        startDate:
          type: string
          description: The start date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
      additionalProperties: false
      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.
      x-class-pid: org.1edtech.eduapi.v1p0.affiliation.class
    PersonName:
      type: object
      properties:
        honorificSuffix:
          type: string
          description: "Honorific suffix(es) following a person's name (e.g. 'M.D,\
            \ PhD')."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        familyName:
          type: string
          description: "Family name. In the western world, often referred to as the\
            \ 'last name' of a person."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        givenName:
          type: string
          description: "Given name. In the western world, often referred to as the\
            \ 'first name' of a person."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        familyNamePrefix:
          type: string
          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')."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        patronymicName:
          type: string
          description: Patronymic name.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        honorificPrefix:
          type: string
          description: "Honorific prefix(es) preceding a person's name (e.g. 'Dr',\
            \ 'Mrs' or 'Mr')."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        additionalName:
          type: string
          description: Additional name. Includes what is often referred to as 'middle
            name' in the western world.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
      additionalProperties: false
      description: "The set of parts that are used to define an Edu-API persons name,\
        \ this design attempts to account for international naming needs."
      x-class-pid: org.1edtech.eduapi.v1p0.personname.class
    EducationOffering:
      required:
      - sourcedId
      - offeringType
      - recordLanguage
      - title
      - description
      - primaryCode
      - organization
      - academicSession
      - offeringFormat
      - registrationStatus
      - startDate
      - endDate
      - recordStatus
      type: object
      properties:
        minNumberStudents:
          type: integer
          description: The minimum number of students allowed to enroll for this offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        synchronicity:
          description: An indicator of whether instructor and learner must both be
            present at the same time
          anyOf:
          - type: string
            enum:
            - hybrid
            - asynchronous
            - synchronous
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.synchronicityenum.class
        registrationStatus:
          type: string
          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.
          enum:
          - open
          - closed
          - pending
          - waitlist
          x-srcprop-pid: org.1edtech.eduapi.v1p0.registrationstatusenum.class
        roleEnablement:
          minItems: 0
          type: array
          description: "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."
          items:
            $ref: "#/components/schemas/RoleEnablement"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.roleenablement.class
        offeringType:
          description: The type of education being offered. This is based on an enumerated
            vocabulary.
          anyOf:
          - type: string
            enum:
            - collection
            - course
            - component
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.educationofferingtypeenum.class
        endDate:
          type: string
          description: The end date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datez.class
        description:
          minItems: 1
          type: array
          description: A set of descriptions of the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        title:
          minItems: 1
          type: array
          description: A set of titles for the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        primaryCode:
          $ref: "#/components/schemas/IdentifierEntry"
        paceOfStudy:
          type: string
          description: The tempo that the course is taught at as a percentage of a
            normal course.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.percentage.class
        creditType:
          description: Reference to what the completion of this entity counts towards.
            This is represented by an extensible enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - credit
            - nonCredit
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.credittypeenum.class
        enrolledNumberStudents:
          type: integer
          description: The number of students that have already enrolled for this
            offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        academicSessionCode:
          type: string
          description: A business code that a system might use to reference an academic
            session.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        offeringFormat:
          description: The modality by which the entity is delivered. This is represented
            by an extensible enumerated vocabulary
          anyOf:
          - type: string
            enum:
            - online
            - blended
            - onGround
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.offeringformatenum.class
        dateLastModified:
          type: string
          description: A timestamp describing when this record was last modified.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        teachingLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The main language used to relay the content of the offering.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        sourcedId:
          type: string
          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)."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.guid.class
        otherCodes:
          minItems: 0
          type: array
          description: Human readable codes/identifiers for the entity being described
          items:
            $ref: "#/components/schemas/IdentifierEntry"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.identifierentry.class
        pendingNumberStudents:
          type: integer
          description: The number of students that have a pending enrollment request
            for this offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        recordLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The primary language used in the described entity.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        academicSession:
          type: string
          description: A reference to an Edu-API Academic Session
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.academicsessionguidref.class
        extensions:
          $ref: "#/components/schemas/educationOfferingExtensions"
        maxNumberStudents:
          type: integer
          description: The maximum number of students allowed to enroll for this offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        recordStatus:
          type: string
          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."
          enum:
          - active
          - deleted
          - inactive
          x-srcprop-pid: org.1edtech.eduapi.v1p0.recordstatustypeenum.class
        organizationCode:
          type: string
          description: A business code used to system might use to reference an organization
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        organization:
          type: string
          description: A reference to an Edu-API Organization.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.organizationguidref.class
        locations:
          minItems: 0
          type: array
          description: A container for describing where the entity takes place. This
            could be as a description or as a geo location
          items:
            $ref: "#/components/schemas/Location"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.location.class
        startDate:
          type: string
          description: The start date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datez.class
      additionalProperties: false
      description: A description of an abstract educational offering.
      x-class-pid: org.1edtech.eduapi.v1p0.educationoffering.class
    CourseTemplate:
      required:
      - courseType
      - sourcedId
      - recordLanguage
      - title
      - description
      - primaryCode
      - organization
      - level
      - gradingScheme
      - recordStatus
      type: object
      properties:
        sourcedId:
          type: string
          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)."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.guid.class
        otherCodes:
          minItems: 0
          type: array
          description: Any number of additional human readable codes/identifiers for
            the entity being described
          items:
            $ref: "#/components/schemas/IdentifierEntry"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.identifierentry.class
        parent:
          minItems: 0
          type: array
          description: A reference to the parent EducationCollection.
          items:
            type: string
            description: A reference to an `EducationCollection` object that has an
              allocated sourcedId (`GUID`).
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.collectiontemplateguidref.class
        courseType:
          description: A representation of what the entity defines. It is based on
            an extensible enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - standard
            - honors
            - research
            - independentStudy
            - practicum
            - internship
            - studyAbroad
            - capstone
            - clinical
            - correspondence
            - fieldExperience
            - seminar
            - thesis
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.coursetypeenum.class
        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.
          anyOf:
          - type: string
            enum:
            - graduate
            - undergraduate
            - doctoral
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.educationlevelenum.class
        creditsAwarded:
          type: string
          description: A description of the credits that the student receives after
            the completion of the education.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        recordLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The primary language used in the described entity.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        description:
          minItems: 1
          type: array
          description: A set of descriptions of the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        title:
          minItems: 1
          type: array
          description: A set of titles for the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        primaryCode:
          $ref: "#/components/schemas/IdentifierEntry"
        creditType:
          description: Reference to what the completion of this entity counts towards.
            This is represented by an extensible enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - credit
            - nonCredit
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.credittypeenum.class
        extensions:
          $ref: "#/components/schemas/educationExtensions"
        recordStatus:
          type: string
          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."
          enum:
          - active
          - deleted
          - inactive
          x-srcprop-pid: org.1edtech.eduapi.v1p0.recordstatustypeenum.class
        dateLastModified:
          type: string
          description: A timestamp describing when this record was last modified.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        organizationCode:
          type: string
          description: A business code used to system might use to reference an organization
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        organization:
          type: string
          description: A reference to an Edu-API Organization.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.organizationguidref.class
        gradingScheme:
          $ref: "#/components/schemas/LanguageTypedString"
        teachingLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The main language used to relay the content of the offering.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
      additionalProperties: false
      description: "A time independent description of a learning experience, such\
        \ that it may appear in a catalog."
      x-class-pid: org.1edtech.eduapi.v1p0.coursetemplate.class
    Imsx_StatusInfo:
      required:
      - imsx_codeMajor
      - imsx_severity
      type: object
      properties:
        imsx_codeMinor:
          $ref: "#/components/schemas/Imsx_CodeMinor"
        imsx_codeMajor:
          type: string
          description: The code major value (from the corresponding enumerated vocabulary).
          enum:
          - failure
          - processing
          - success
          - unsupported
          x-srcprop-pid: org.1edtech.eduapi.v1p0.imsx_codemajor.class
        imsx_description:
          type: string
          description: A human readable description supplied by the entity creating
            the status code information.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        imsx_severity:
          type: string
          description: The severity value (from the corresponding enumerated vocabulary).
          enum:
          - error
          - status
          - warning
          x-srcprop-pid: org.1edtech.eduapi.v1p0.imsx_severity.class
      additionalProperties: false
      description: This is the container for the status code and associated information
        returned within the HTTP messages received from the Service Provider.
      x-class-pid: org.1edtech.eduapi.v1p0.imsx_statusinfo.class
    CollectionTemplate:
      required:
      - collectionType
      - sourcedId
      - recordLanguage
      - title
      - description
      - primaryCode
      - organization
      - level
      - gradingScheme
      - recordStatus
      type: object
      properties:
        sourcedId:
          type: string
          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)."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.guid.class
        otherCodes:
          minItems: 0
          type: array
          description: Any number of additional human readable codes/identifiers for
            the entity being described
          items:
            $ref: "#/components/schemas/IdentifierEntry"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.identifierentry.class
        parent:
          minItems: 0
          type: array
          description: A reference to a parent EducationCollection (if present).
          items:
            type: string
            description: A reference to an `EducationCollection` object that has an
              allocated sourcedId (`GUID`).
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.collectiontemplateguidref.class
        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.
          anyOf:
          - type: string
            enum:
            - graduate
            - undergraduate
            - doctoral
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.educationlevelenum.class
        creditsAwarded:
          type: string
          description: A description of the credits that the student receives after
            the completion of the education.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        recordLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The primary language used in the described entity.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        description:
          minItems: 1
          type: array
          description: A set of descriptions of the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        title:
          minItems: 1
          type: array
          description: A set of titles for the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        primaryCode:
          $ref: "#/components/schemas/IdentifierEntry"
        creditType:
          description: Reference to what the completion of this entity counts towards.
            This is represented by an extensible enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - credit
            - nonCredit
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.credittypeenum.class
        collectionType:
          description: A representation of what the entity defines. It is based on
            an extensible enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - program
            - generalEducation
            - requiredCollection
            - electiveCollection
            - capstoneCollection
            - majorCollection
            - minorCollection
            - programSpecialization
            - nonDegreeCollection
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.collectiontypeenum.class
        extensions:
          $ref: "#/components/schemas/educationExtensions"
        recordStatus:
          type: string
          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."
          enum:
          - active
          - deleted
          - inactive
          x-srcprop-pid: org.1edtech.eduapi.v1p0.recordstatustypeenum.class
        dateLastModified:
          type: string
          description: A timestamp describing when this record was last modified.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        organizationCode:
          type: string
          description: A business code used to system might use to reference an organization
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        organization:
          type: string
          description: A reference to an Edu-API Organization.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.organizationguidref.class
        gradingScheme:
          $ref: "#/components/schemas/LanguageTypedString"
        teachingLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The main language used to relay the content of the offering.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
      additionalProperties: false
      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."
      x-class-pid: org.1edtech.eduapi.v1p0.collectiontemplate.class
    ComponentOffering:
      required:
      - offeringType
      - component
      - sourcedId
      - recordLanguage
      - title
      - description
      - primaryCode
      - organization
      - academicSession
      - offeringFormat
      - registrationStatus
      - startDate
      - endDate
      - recordStatus
      type: object
      properties:
        minNumberStudents:
          type: integer
          description: The minimum number of students allowed to enroll for this offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        synchronicity:
          description: An indicator of whether instructor and learner must both be
            present at the same time
          anyOf:
          - type: string
            enum:
            - hybrid
            - asynchronous
            - synchronous
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.synchronicityenum.class
        parent:
          minItems: 0
          type: array
          description: A reference to the parent courseOffering.
          items:
            type: string
            description: A reference to a `CourseOffering` object that has an allocated
              sourcedId (`GUID`).
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.courseofferingguidref.class
        registrationStatus:
          type: string
          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.
          enum:
          - open
          - closed
          - pending
          - waitlist
          x-srcprop-pid: org.1edtech.eduapi.v1p0.registrationstatusenum.class
        roleEnablement:
          minItems: 0
          type: array
          description: "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."
          items:
            $ref: "#/components/schemas/RoleEnablement"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.roleenablement.class
        offeringType:
          description: A representation of what the entity defines. It is based on
            an extensible enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - individualizedInstruction
            - integratedLectureLab
            - laboratory
            - lecture
            - practicum
            - recitation
            - research
            - seminar
            - independentStudy
            - fieldExperience
            - exam
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.componenttypeenum.class
        endDate:
          type: string
          description: The end date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datez.class
        description:
          minItems: 1
          type: array
          description: A set of descriptions of the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        title:
          minItems: 1
          type: array
          description: A set of titles for the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        primaryCode:
          $ref: "#/components/schemas/IdentifierEntry"
        paceOfStudy:
          type: string
          description: The tempo that the course is taught at as a percentage of a
            normal course.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.percentage.class
        creditType:
          description: Reference to what the completion of this entity counts towards.
            This is represented by an extensible enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - credit
            - nonCredit
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.credittypeenum.class
        enrolledNumberStudents:
          type: integer
          description: The number of students that have already enrolled for this
            offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        academicSessionCode:
          type: string
          description: A business code that a system might use to reference an academic
            session.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        offeringFormat:
          description: The modality by which the entity is delivered. This is represented
            by an extensible enumerated vocabulary
          anyOf:
          - type: string
            enum:
            - online
            - blended
            - onGround
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.offeringformatenum.class
        dateLastModified:
          type: string
          description: A timestamp describing when this record was last modified.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        teachingLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The main language used to relay the content of the offering.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        sourcedId:
          type: string
          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)."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.guid.class
        otherCodes:
          minItems: 0
          type: array
          description: Human readable codes/identifiers for the entity being described
          items:
            $ref: "#/components/schemas/IdentifierEntry"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.identifierentry.class
        pendingNumberStudents:
          type: integer
          description: The number of students that have a pending enrollment request
            for this offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        recordLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The primary language used in the described entity.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        academicSession:
          type: string
          description: A reference to an Edu-API Academic Session
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.academicsessionguidref.class
        component:
          type: string
          description: A reference to the componentTemplate.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.componenttemplateguidref.class
        extensions:
          $ref: "#/components/schemas/educationOfferingExtensions"
        maxNumberStudents:
          type: integer
          description: The maximum number of students allowed to enroll for this offering
          format: int32
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.integer.class
        recordStatus:
          type: string
          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."
          enum:
          - active
          - deleted
          - inactive
          x-srcprop-pid: org.1edtech.eduapi.v1p0.recordstatustypeenum.class
        organizationCode:
          type: string
          description: A business code used to system might use to reference an organization
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        organization:
          type: string
          description: A reference to an Edu-API Organization.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.organizationguidref.class
        locations:
          minItems: 0
          type: array
          description: A container for describing where the entity takes place. This
            could be as a description or as a geo location
          items:
            $ref: "#/components/schemas/Location"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.location.class
        startDate:
          type: string
          description: The start date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datez.class
      additionalProperties: false
      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"
      x-class-pid: org.1edtech.eduapi.v1p0.componentoffering.class
    Agents:
      required:
      - agentType
      - person
      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.
          anyOf:
          - type: string
            enum:
            - parent
            - guardian
            - emergencyContact
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.agenttypeenum.class
        person:
          type: string
          description: A reference to an Edu-API person. This represents the person
            acting in an agency capacity.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.personguidref.class
        domain:
          type: string
          description: The context within which the person can act as an agent in.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        description:
          minItems: 0
          type: array
          description: A set of descriptions of the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
      additionalProperties: false
      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.
      x-class-pid: org.1edtech.eduapi.v1p0.agents.class
    RoleEnablement:
      required:
      - role
      type: object
      properties:
        role:
          description: The role of the associated person in the given context.
          anyOf:
          - type: string
            enum:
            - member
            - chair
            - staff
            - student
            - administrator
            - aide
            - guardian
            - parent
            - proctor
            - relative
            - teacher
            - advisor
            - teachingAssistant
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.roletypeenum.class
        endDate:
          type: string
          description: The end date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        startDate:
          type: string
          description: The start date of the associated event.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
      additionalProperties: false
      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."
      x-class-pid: org.1edtech.eduapi.v1p0.roleenablement.class
    OptionallyTypedEmail:
      required:
      - email
      type: object
      properties:
        emailType:
          description: The type of email address.
          anyOf:
          - type: string
            enum:
            - homeEmail
            - workEmail
            - iceEmail
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.emailtypeenum.class
        email:
          type: string
          description: An email address.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.emailaddress.class
      additionalProperties: false
      description: An optionally typed email address.
      x-class-pid: org.1edtech.eduapi.v1p0.optionallytypedemail.class
    affiliationExtensions:
      type: object
      properties: {}
      additionalProperties: true
      description: Extension properties related to affiliations
      x-class-pid: org.1edtech.eduapi.v1p0.affiliationextensions.class
    enrollmentExtensions:
      type: object
      properties: {}
      additionalProperties: true
      description: Extension properties related to enrollments
      x-class-pid: org.1edtech.eduapi.v1p0.enrollmentextensions.class
    organizationExtensions:
      type: object
      properties: {}
      additionalProperties: true
      description: Extension properties related to education organizations
      x-class-pid: org.1edtech.eduapi.v1p0.organizationextensions.class
    GeoCoordinates:
      required:
      - latitude
      - longitude
      type: object
      properties:
        latitude:
          type: number
          description: "The latitude of the location [[WGS-84]]."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.float.class
        longitude:
          type: number
          description: "The longitude of the location [[WGS-84]]."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.float.class
      additionalProperties: false
      description: The geographic coordinates of a location.
      x-class-pid: org.1edtech.eduapi.v1p0.geocoordinates.class
    educationExtensions:
      type: object
      properties: {}
      additionalProperties: true
      description: Extension properties related to education templates
      x-class-pid: org.1edtech.eduapi.v1p0.educationextensions.class
    OptionallyTypedPhone:
      required:
      - phone
      type: object
      properties:
        phoneType:
          description: The type of address. This is based on an extensible enumerated
            vocabulary.
          anyOf:
          - type: string
            enum:
            - homePhone
            - workPhone
            - icePhone
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.phonetypeenum.class
        phone:
          type: string
          description: A phone number.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.phonenumber.class
      additionalProperties: false
      description: An optionally typed phone number.
      x-class-pid: org.1edtech.eduapi.v1p0.optionallytypedphone.class
    Person:
      required:
      - sourcedId
      - recordLanguage
      - recordStatus
      type: object
      properties:
        sourcedId:
          type: string
          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)."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.guid.class
        otherEmails:
          minItems: 0
          type: array
          description: Additional email addresses of a subject.
          items:
            $ref: "#/components/schemas/TypedEmail"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.typedemail.class
        placeOfBirth:
          type: string
          description: The place of birth. Commonly a city or municipality.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        gender:
          description: The gender of the individual. It is based on an extensible
            enumerated vocabulary.
          anyOf:
          - type: string
            enum:
            - male
            - female
            - unspecified
            - other
          - pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
            type: string
          x-srcprop-pid: org.1edtech.eduapi.v1p0.genderenum.class
        otherAddresses:
          minItems: 0
          type: array
          description: A list of other addresses.
          items:
            $ref: "#/components/schemas/TypedAddress"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.typedaddress.class
        dateOfDeath:
          type: string
          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."
          format: date
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.date.class
        recordLanguage:
          pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
          type: string
          description: The primary language used in the described entity.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        formattedName:
          type: string
          description: "the long form formatted name, this will often be dependent\
            \ on region or system requirements."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.nfcstring.class
        dateOfBirth:
          type: string
          description: The date of birth.
          format: date
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.date.class
        agents:
          minItems: 0
          type: array
          description: 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.
          items:
            $ref: "#/components/schemas/Agents"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.agents.class
        legalName:
          $ref: "#/components/schemas/PersonName"
        isDeceased:
          type: boolean
          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."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.boolean.class
        primaryPhone:
          $ref: "#/components/schemas/OptionallyTypedPhone"
        extensions:
          $ref: "#/components/schemas/personExtensions"
        otherIdentifiers:
          minItems: 0
          type: array
          description: A list of additional identifiers for the described entity.
          items:
            $ref: "#/components/schemas/IdentifierEntry"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.identifierentry.class
        otherNames:
          minItems: 0
          type: array
          description: A list of other names for this person.
          items:
            $ref: "#/components/schemas/PersonNameEntry"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.personnameentry.class
        dateLastModified:
          type: string
          description: A timestamp describing when this record was last modified.
          format: date-time
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.datetimez.class
        recordStatus:
          type: string
          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."
          enum:
          - active
          - deleted
          - inactive
          x-srcprop-pid: org.1edtech.eduapi.v1p0.recordstatustypeenum.class
        countryOfBirth:
          type: string
          description: The country of birth.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.primitive.string.class
        otherPhones:
          minItems: 0
          type: array
          description: A list of other phone numbers
          items:
            $ref: "#/components/schemas/TypedPhone"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.typedphone.class
        pronouns:
          minItems: 0
          type: array
          description: "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."
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
        languagesSpoken:
          minItems: 0
          type: array
          description: The list of languages that this person speaks.
          items:
            pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$"
            type: string
            description: "A language code [[BCP47]]."
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.languagecode.class
        primaryAddress:
          $ref: "#/components/schemas/OptionallyTypedAddress"
        primaryEmail:
          $ref: "#/components/schemas/OptionallyTypedEmail"
      additionalProperties: false
      description: "A Person represents a human being, alive or deceased, real or\
        \ imaginary."
      x-class-pid: org.1edtech.eduapi.v1p0.person.class
    Location:
      type: object
      properties:
        identifier:
          type: string
          description: An identifier.
          x-srcprop-pid: org.1edtech.eduapi.v1p0.derived.identifier.class
        geoLocation:
          $ref: "#/components/schemas/GeoCoordinates"
        description:
          minItems: 0
          type: array
          description: A set of descriptions of the associated entity with a designated
            language for each entry.
          items:
            $ref: "#/components/schemas/LanguageTypedString"
          x-srcprop-pid: org.1edtech.eduapi.v1p0.languagetypedstring.class
      additionalProperties: false
      description: A container for describing the location an entity takes place at.
      x-class-pid: org.1edtech.eduapi.v1p0.location.class
  parameters:
    filter:
      name: filter
      in: query
      description: Specifies that the returned collection should be filtered using
        the supplied criteria.
      required: false
      allowEmptyValue: false
      style: form
      schema:
        type: string
        description: Character strings.
    offset:
      name: offset
      in: query
      description: "Specifices the number of the first record to be supplied in the\
        \ segmented response message. Default: 0."
      required: false
      allowEmptyValue: false
      style: form
      schema:
        minimum: 0
        type: integer
        format: int32
    limit:
      name: limit
      in: query
      description: "Specifices the download segmentation value i.e. the maximum number\
        \ of records to be contained in the response. Default: 100."
      required: false
      allowEmptyValue: false
      style: form
      schema:
        minimum: 1
        type: integer
        format: int32
    orderBy:
      name: orderBy
      in: query
      description: Specifies whether the collection should be ordered ascending (asc)
        or descending (desc).
      required: false
      allowEmptyValue: false
      style: form
      schema:
        type: string
        description: Character strings.
    sort:
      name: sort
      in: query
      description: 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.
      required: false
      allowEmptyValue: false
      style: form
      schema:
        type: string
        description: Character strings.
  headers:
    X-Total-Count:
      description: The total number of resources that are available to be returned
      schema:
        type: integer
        format: int32
  securitySchemes:
    CCGSecurity:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://www.example.com/eduapi/ccg/token/
          scopes:
            http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly: Default
              read-only scope. Enables access to all GET operations except those in
              PersonManagement
            http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly.privacy: Enables
              access to all GET operations in PersonManagement
  links:
    next:
      operationId: getEducationTemplates
      parameters:
        limit: $request.path.limit
        offset: $request.path.offset
      description: Get the next set of resources i.e. from offset to offset+limit
    last:
      operationId: getEducationTemplates
      parameters:
        limit: $request.path.limit
        offset: $request.path.offset
      description: Get the last set of resources i.e. from offset to end
    prev:
      operationId: getEducationTemplates
      parameters:
        limit: $request.path.limit
        offset: $request.path.offset
      description: Get the previous set of resources i.e. from last_offset to last_offset+limit
    first:
      operationId: getEducationTemplates
      parameters:
        limit: $request.path.limit
        offset: $request.path.offset
      description: Get the first set of resources i.e. from first to limit

G. OpenAPI Schema: JSON

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 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.getallstaffforcomponentoffering.operation"
      }
    },
    "/enrollments" : {
      "get" : {
        "tags" : [ "EnrollmentManagement" ],
        "summary" : "The REST GET operation for the getAllEnrollments() API call.",
        "description" : "Read all Enrollments for an institution",
        "operationId" : "getAllEnrollments",
        "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 getAllEnrollments() API call.",
            "headers" : {
              "X-Total-Count" : {
                "$ref" : "#/components/headers/X-Total-Count"
              }
            },
            "content" : {
              "application/json" : {
                "schema" : {
                  "minItems" : 1,
                  "type" : "array",
                  "description" : "The contextualized joining of a person and a CourseOffering, CollectionOffering or ComponentOffering.",
                  "items" : {
                    "$ref" : "#/components/schemas/Enrollment"
                  }
                }
              }
            },
            "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.getallenrollments.operation"
      }
    },
    "/enrollments/{id}" : {
      "get" : {
        "tags" : [ "EnrollmentManagement" ],
        "summary" : "The REST GET operation for the getEnrollmentById() API call.",
        "description" : "Read Enrollment with a specific id",
        "operationId" : "getEnrollmentById",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The sourcedId of the Enrollment",
          "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 getEnrollmentById() API call.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Enrollment"
                }
              }
            }
          },
          "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.getenrollmentbyid.operation"
      }
    },
    "/courseOfferings/{id}/enrollments" : {
      "get" : {
        "tags" : [ "EnrollmentManagement" ],
        "summary" : "The REST GET operation for the getAllEnrollmentsForCourseOffering() API call.",
        "description" : "Read all enrollments for a courseOffering",
        "operationId" : "getAllEnrollmentsForCourseOffering",
        "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 getAllEnrollmentsForCourseOffering() API call.",
            "headers" : {
              "X-Total-Count" : {
                "$ref" : "#/components/headers/X-Total-Count"
              }
            },
            "content" : {
              "application/json" : {
                "schema" : {
                  "minItems" : 1,
                  "type" : "array",
                  "description" : "The contextualized joining of a person and a CourseOffering, CollectionOffering or ComponentOffering.",
                  "items" : {
                    "$ref" : "#/components/schemas/Enrollment"
                  }
                }
              }
            },
            "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.getallenrollmentsforcourseoffering.operation"
      }
    },
    "/collectionOfferings/{id}/enrollments" : {
      "get" : {
        "tags" : [ "EnrollmentManagement" ],
        "summary" : "The REST GET operation for the getAllEnrollmentsForCollectionOffering() API call.",
        "description" : "Read all enrollments for a courseOffering",
        "operationId" : "getAllEnrollmentsForCollectionOffering",
        "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 getAllEnrollmentsForCollectionOffering() API call.",
            "headers" : {
              "X-Total-Count" : {
                "$ref" : "#/components/headers/X-Total-Count"
              }
            },
            "content" : {
              "application/json" : {
                "schema" : {
                  "minItems" : 1,
                  "type" : "array",
                  "description" : "The contextualized joining of a person and a CourseOffering, CollectionOffering or ComponentOffering.",
                  "items" : {
                    "$ref" : "#/components/schemas/Enrollment"
                  }
                }
              }
            },
            "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.getallenrollmentsforcollectionoffering.operation"
      }
    },
    "/componentOfferings/{id}/enrollments" : {
      "get" : {
        "tags" : [ "EnrollmentManagement" ],
        "summary" : "The REST GET operation for the getAllEnrollmentsForComponentOffering() API call.",
        "description" : "Read all enrollments for a courseOffering",
        "operationId" : "getAllEnrollmentsForComponentOffering",
        "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 getAllEnrollmentsForComponentOffering() API call.",
            "headers" : {
              "X-Total-Count" : {
                "$ref" : "#/components/headers/X-Total-Count"
              }
            },
            "content" : {
              "application/json" : {
                "schema" : {
                  "minItems" : 1,
                  "type" : "array",
                  "description" : "The contextualized joining of a person and a CourseOffering, CollectionOffering or ComponentOffering.",
                  "items" : {
                    "$ref" : "#/components/schemas/Enrollment"
                  }
                }
              }
            },
            "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.getallenrollmentsforcomponentoffering.operation"
      }
    },
    "/academicSessions/{id}/enrollments" : {
      "get" : {
        "tags" : [ "EnrollmentManagement" ],
        "summary" : "The REST GET operation for the getAllEnrollmentsBySession() API call.",
        "description" : "Read all enrollments in a specified academic session",
        "operationId" : "getAllEnrollmentsBySession",
        "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 getAllEnrollmentsBySession() API call.",
            "headers" : {
              "X-Total-Count" : {
                "$ref" : "#/components/headers/X-Total-Count"
              }
            },
            "content" : {
              "application/json" : {
                "schema" : {
                  "minItems" : 1,
                  "type" : "array",
                  "description" : "The contextualized joining of a person and a CourseOffering, CollectionOffering or ComponentOffering.",
                  "items" : {
                    "$ref" : "#/components/schemas/Enrollment"
                  }
                }
              }
            },
            "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"
                }
              }
            }
          },
          "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.getallenrollmentsbysession.operation"
      }
    },
    "/affiliations" : {
      "get" : {
        "tags" : [ "AffiliationManagement" ],
        "summary" : "The REST GET operation for the getAllAffiliations() API call.",
        "description" : "Read all affiliations for an institution",
        "operationId" : "getAllAffiliations",
        "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 getAllAffiliations() API call.",
            "headers" : {
              "X-Total-Count" : {
                "$ref" : "#/components/headers/X-Total-Count"
              }
            },
            "content" : {
              "application/json" : {
                "schema" : {
                  "minItems" : 1,
                  "type" : "array",
                  "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.",
                  "items" : {
                    "$ref" : "#/components/schemas/Affiliation"
                  }
                }
              }
            },
            "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.getallaffiliations.operation"
      }
    },
    "/affiliations/{id}" : {
      "get" : {
        "tags" : [ "AffiliationManagement" ],
        "summary" : "The REST GET operation for the getAffiliationById() API call.",
        "description" : "Read Affiliation with a specific id",
        "operationId" : "getAffiliationById",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The sourcedId of the Affiliation",
          "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 getAffiliationById() API call.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Affiliation"
                }
              }
            }
          },
          "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.getaffiliationbyid.operation"
      }
    }
  },
  "components" : {
    "schemas" : {
      "TypedAddress" : {
        "required" : [ "addressType" ],
        "type" : "object",
        "properties" : {
          "addressCountry" : {
            "type" : "string",
            "description" : "A country.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "geo" : {
            "$ref" : "#/components/schemas/GeoCoordinates"
          },
          "addressCountryCode" : {
            "type" : "string",
            "description" : "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.countrycode.class"
          },
          "streetAddress" : {
            "type" : "string",
            "description" : "A street address within the locality.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "addressType" : {
            "description" : "The type of address. This is based on an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "visitingAddress", "mailingAddress", "permanentAddress", "deliveryAddress", "billingAddress", "homeAddress", "workAddress", "formerAddress" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.addresstypeenum.class"
          },
          "postalCode" : {
            "type" : "string",
            "description" : "A postal code.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "addressLocality" : {
            "type" : "string",
            "description" : "A locality within the region.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "addressRegion" : {
            "type" : "string",
            "description" : "A region within the country.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "postOfficeBoxNumber" : {
            "type" : "string",
            "description" : "A post office box number for PO box addresses.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          }
        },
        "additionalProperties" : false,
        "description" : "A typed address.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.typedaddress.class"
      },
      "TypedPhone" : {
        "required" : [ "phoneType", "phone" ],
        "type" : "object",
        "properties" : {
          "phoneType" : {
            "description" : "The type of phone number. This is based on an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "homePhone", "workPhone", "icePhone" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.phonetypeenum.class"
          },
          "phone" : {
            "type" : "string",
            "description" : "A phone number.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.phonenumber.class"
          }
        },
        "additionalProperties" : false,
        "description" : "A typed phone number.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.typedphone.class"
      },
      "Organization" : {
        "required" : [ "sourcedId", "recordLanguage", "name", "organizationType", "recordStatus" ],
        "type" : "object",
        "properties" : {
          "sourcedId" : {
            "type" : "string",
            "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).",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.guid.class"
          },
          "otherCodes" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "Human readable codes/identifiers for the entity being described",
            "items" : {
              "$ref" : "#/components/schemas/IdentifierEntry"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.identifierentry.class"
          },
          "parent" : {
            "type" : "string",
            "description" : "A reference to a parent organization.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.organizationguidref.class"
          },
          "otherAddresses" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A list of other addresses.",
            "items" : {
              "$ref" : "#/components/schemas/TypedAddress"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.typedaddress.class"
          },
          "recordLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The primary language used in the described entity.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "description" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A set of descriptions of the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "primaryCode" : {
            "$ref" : "#/components/schemas/IdentifierEntry"
          },
          "organizationType" : {
            "type" : "string",
            "description" : "The type of Organization.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "extensions" : {
            "$ref" : "#/components/schemas/organizationExtensions"
          },
          "dateLastModified" : {
            "type" : "string",
            "description" : "A timestamp describing when this record was last modified.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "recordStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "active", "deleted", "inactive" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.recordstatustypeenum.class"
          },
          "children" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "References to child organizations.",
            "items" : {
              "type" : "string",
              "description" : "A reference to an `Organization` object that has an allocated sourcedId (`GUID`)."
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.organizationguidref.class"
          },
          "name" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A name for the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "primaryAddress" : {
            "$ref" : "#/components/schemas/OptionallyTypedAddress"
          }
        },
        "additionalProperties" : false,
        "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.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.organization.class"
      },
      "educationOfferingExtensions" : {
        "type" : "object",
        "properties" : { },
        "additionalProperties" : true,
        "description" : "Extension properties related to education offerings",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.educationofferingextensions.class"
      },
      "personExtensions" : {
        "type" : "object",
        "properties" : { },
        "additionalProperties" : true,
        "description" : "Extension properties related to Edu-API persons",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.personextensions.class"
      },
      "CourseOffering" : {
        "required" : [ "offeringType", "course", "sourcedId", "recordLanguage", "title", "description", "primaryCode", "organization", "academicSession", "offeringFormat", "registrationStatus", "startDate", "endDate", "recordStatus" ],
        "type" : "object",
        "properties" : {
          "minNumberStudents" : {
            "type" : "integer",
            "description" : "The minimum number of students allowed to enroll for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "synchronicity" : {
            "description" : "An indicator of whether instructor and learner must both be present at the same time",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "hybrid", "asynchronous", "synchronous" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.synchronicityenum.class"
          },
          "parent" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A reference to the parent collectionOffering.",
            "items" : {
              "type" : "string",
              "description" : "A reference to an `EducationCollectionOffering` object that has an allocated sourcedId (`GUID`)."
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.collectionofferingguidref.class"
          },
          "registrationStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "open", "closed", "pending", "waitlist" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.registrationstatusenum.class"
          },
          "roleEnablement" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "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.",
            "items" : {
              "$ref" : "#/components/schemas/RoleEnablement"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.roleenablement.class"
          },
          "offeringType" : {
            "description" : "A representation of what the entity defines. It is based on an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "standard", "honors", "research", "independentStudy", "practicum", "internship", "studyAbroad", "capstone", "clinical", "correspondence", "fieldExperience", "seminar", "thesis" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.coursetypeenum.class"
          },
          "endDate" : {
            "type" : "string",
            "description" : "The end date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datez.class"
          },
          "description" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of descriptions of the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "title" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of titles for the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "primaryCode" : {
            "$ref" : "#/components/schemas/IdentifierEntry"
          },
          "paceOfStudy" : {
            "type" : "string",
            "description" : "The tempo that the course is taught at as a percentage of a normal course.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.percentage.class"
          },
          "creditType" : {
            "description" : "Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "credit", "nonCredit" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.credittypeenum.class"
          },
          "enrolledNumberStudents" : {
            "type" : "integer",
            "description" : "The number of students that have already enrolled for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "academicSessionCode" : {
            "type" : "string",
            "description" : "A business code that a system might use to reference an academic session.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "offeringFormat" : {
            "description" : "The modality by which the entity is delivered. This is represented by an extensible enumerated vocabulary",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "online", "blended", "onGround" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.offeringformatenum.class"
          },
          "dateLastModified" : {
            "type" : "string",
            "description" : "A timestamp describing when this record was last modified.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "course" : {
            "type" : "string",
            "description" : "A reference to the courseTemplate.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.coursetemplateguidref.class"
          },
          "teachingLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The main language used to relay the content of the offering.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "sourcedId" : {
            "type" : "string",
            "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).",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.guid.class"
          },
          "otherCodes" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "Human readable codes/identifiers for the entity being described",
            "items" : {
              "$ref" : "#/components/schemas/IdentifierEntry"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.identifierentry.class"
          },
          "pendingNumberStudents" : {
            "type" : "integer",
            "description" : "The number of students that have a pending enrollment request for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "recordLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The primary language used in the described entity.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "academicSession" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Academic Session",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.academicsessionguidref.class"
          },
          "extensions" : {
            "$ref" : "#/components/schemas/educationOfferingExtensions"
          },
          "maxNumberStudents" : {
            "type" : "integer",
            "description" : "The maximum number of students allowed to enroll for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "recordStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "active", "deleted", "inactive" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.recordstatustypeenum.class"
          },
          "organizationCode" : {
            "type" : "string",
            "description" : "A business code used to system might use to reference an organization",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "organization" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Organization.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.organizationguidref.class"
          },
          "locations" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A container for describing where the entity takes place. This could be as a description or as a geo location",
            "items" : {
              "$ref" : "#/components/schemas/Location"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.location.class"
          },
          "startDate" : {
            "type" : "string",
            "description" : "The start date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datez.class"
          }
        },
        "additionalProperties" : false,
        "description" : "Relates a course to one or more delivery scenarios.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.courseoffering.class"
      },
      "PersonNameEntry" : {
        "required" : [ "nameType" ],
        "type" : "object",
        "properties" : {
          "nameType" : {
            "description" : "The type of name described in this entry.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "legalName", "preferredName", "phoneticName", "aliasName", "formerName" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.personnametypeenum.class"
          },
          "honorificSuffix" : {
            "type" : "string",
            "description" : "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "familyName" : {
            "type" : "string",
            "description" : "Family name. In the western world, often referred to as the 'last name' of a person.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "givenName" : {
            "type" : "string",
            "description" : "Given name. In the western world, often referred to as the 'first name' of a person.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "familyNamePrefix" : {
            "type" : "string",
            "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').",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "patronymicName" : {
            "type" : "string",
            "description" : "Patronymic name.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "honorificPrefix" : {
            "type" : "string",
            "description" : "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "additionalName" : {
            "type" : "string",
            "description" : "Additional name. Includes what is often referred to as 'middle name' in the western world.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          }
        },
        "additionalProperties" : false,
        "description" : "The PersonNameEntry complex type.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.personnameentry.class"
      },
      "IdentifierEntry" : {
        "required" : [ "identifier", "identifierType" ],
        "type" : "object",
        "properties" : {
          "identifier" : {
            "type" : "string",
            "description" : "An identifier.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.identifier.class"
          },
          "identifierType" : {
            "description" : "The identifier type.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "systemId", "productId", "userName", "accountId", "emailAddress", "nationalIdentityNumber", "isbn", "issn", "lisSourcedId", "oneRosterSourcedId", "sisSourcedId", "ltiContextId", "ltiDeploymentId", "ltiToolId", "ltiPlatformId", "ltiUserId", "identifier" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.identifiertypeenum.class"
          }
        },
        "additionalProperties" : false,
        "description" : "A container to transmit additional needed identifiers",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.identifierentry.class"
      },
      "Imsx_CodeMinorField" : {
        "required" : [ "imsx_codeMinorFieldName", "imsx_codeMinorFieldValue" ],
        "type" : "object",
        "properties" : {
          "imsx_codeMinorFieldName" : {
            "type" : "string",
            "description" : "This should contain the identity of the system that has produced the code minor status code report.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.normalizedstring.class"
          },
          "imsx_codeMinorFieldValue" : {
            "type" : "string",
            "description" : "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
            "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" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.imsx_codeminorfieldvalue.class"
          }
        },
        "additionalProperties" : false,
        "description" : "This is the container for a single code minor status code.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.imsx_codeminorfield.class"
      },
      "OptionallyTypedAddress" : {
        "type" : "object",
        "properties" : {
          "addressCountry" : {
            "type" : "string",
            "description" : "A country.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "geo" : {
            "$ref" : "#/components/schemas/GeoCoordinates"
          },
          "addressCountryCode" : {
            "type" : "string",
            "description" : "A country code. The value must be a ISO 3166-1 alpha-2 country code [[ISO3166-1]].",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.countrycode.class"
          },
          "streetAddress" : {
            "type" : "string",
            "description" : "A street address within the locality.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "addressType" : {
            "description" : "The type of address. This is based on an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "visitingAddress", "mailingAddress", "permanentAddress", "deliveryAddress", "billingAddress", "homeAddress", "workAddress", "formerAddress" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.addresstypeenum.class"
          },
          "postalCode" : {
            "type" : "string",
            "description" : "A postal code.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "addressLocality" : {
            "type" : "string",
            "description" : "A locality within the region.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "addressRegion" : {
            "type" : "string",
            "description" : "A region within the country.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "postOfficeBoxNumber" : {
            "type" : "string",
            "description" : "A post office box number for PO box addresses.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          }
        },
        "additionalProperties" : false,
        "description" : "A optionally typed address.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.optionallytypedaddress.class"
      },
      "academicSessionExtensions" : {
        "type" : "object",
        "properties" : { },
        "additionalProperties" : true,
        "description" : "Extension properties related to education academic sessions",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.academicsessionextensions.class"
      },
      "Education" : {
        "required" : [ "sourcedId", "recordLanguage", "title", "description", "primaryCode", "organization", "level", "gradingScheme", "recordStatus" ],
        "type" : "object",
        "properties" : {
          "sourcedId" : {
            "type" : "string",
            "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).",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.guid.class"
          },
          "otherCodes" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "Any number of additional human readable codes/identifiers for the entity being described",
            "items" : {
              "$ref" : "#/components/schemas/IdentifierEntry"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.identifierentry.class"
          },
          "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.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "graduate", "undergraduate", "doctoral" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.educationlevelenum.class"
          },
          "creditsAwarded" : {
            "type" : "string",
            "description" : "A description of the credits that the student receives after the completion of the education.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "recordLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The primary language used in the described entity.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "description" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of descriptions of the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "title" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of titles for the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "primaryCode" : {
            "$ref" : "#/components/schemas/IdentifierEntry"
          },
          "creditType" : {
            "description" : "Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "credit", "nonCredit" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.credittypeenum.class"
          },
          "extensions" : {
            "$ref" : "#/components/schemas/educationExtensions"
          },
          "recordStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "active", "deleted", "inactive" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.recordstatustypeenum.class"
          },
          "dateLastModified" : {
            "type" : "string",
            "description" : "A timestamp describing when this record was last modified.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "organizationCode" : {
            "type" : "string",
            "description" : "A business code used to system might use to reference an organization",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "organization" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Organization.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.organizationguidref.class"
          },
          "gradingScheme" : {
            "$ref" : "#/components/schemas/LanguageTypedString"
          },
          "teachingLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The main language used to relay the content of the offering.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          }
        },
        "additionalProperties" : false,
        "description" : "A description of an abstract education.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.education.class"
      },
      "CollectionOffering" : {
        "required" : [ "offeringType", "collection", "sourcedId", "recordLanguage", "title", "description", "primaryCode", "organization", "academicSession", "offeringFormat", "registrationStatus", "startDate", "endDate", "recordStatus" ],
        "type" : "object",
        "properties" : {
          "minNumberStudents" : {
            "type" : "integer",
            "description" : "The minimum number of students allowed to enroll for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "synchronicity" : {
            "description" : "An indicator of whether instructor and learner must both be present at the same time",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "hybrid", "asynchronous", "synchronous" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.synchronicityenum.class"
          },
          "parent" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A reference to parent collectionOffering (if present).",
            "items" : {
              "type" : "string",
              "description" : "A reference to an `EducationCollectionOffering` object that has an allocated sourcedId (`GUID`)."
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.collectionofferingguidref.class"
          },
          "registrationStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "open", "closed", "pending", "waitlist" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.registrationstatusenum.class"
          },
          "roleEnablement" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "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.",
            "items" : {
              "$ref" : "#/components/schemas/RoleEnablement"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.roleenablement.class"
          },
          "offeringType" : {
            "description" : "A representation of what the entity defines. It is based on an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "program", "generalEducation", "requiredCollection", "electiveCollection", "capstoneCollection", "majorCollection", "minorCollection", "programSpecialization", "nonDegreeCollection" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.collectiontypeenum.class"
          },
          "endDate" : {
            "type" : "string",
            "description" : "The end date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datez.class"
          },
          "description" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of descriptions of the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "title" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of titles for the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "primaryCode" : {
            "$ref" : "#/components/schemas/IdentifierEntry"
          },
          "paceOfStudy" : {
            "type" : "string",
            "description" : "The tempo that the course is taught at as a percentage of a normal course.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.percentage.class"
          },
          "creditType" : {
            "description" : "Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "credit", "nonCredit" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.credittypeenum.class"
          },
          "enrolledNumberStudents" : {
            "type" : "integer",
            "description" : "The number of students that have already enrolled for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "academicSessionCode" : {
            "type" : "string",
            "description" : "A business code that a system might use to reference an academic session.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "offeringFormat" : {
            "description" : "The modality by which the entity is delivered. This is represented by an extensible enumerated vocabulary",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "online", "blended", "onGround" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.offeringformatenum.class"
          },
          "dateLastModified" : {
            "type" : "string",
            "description" : "A timestamp describing when this record was last modified.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "teachingLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The main language used to relay the content of the offering.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "sourcedId" : {
            "type" : "string",
            "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).",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.guid.class"
          },
          "otherCodes" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "Human readable codes/identifiers for the entity being described",
            "items" : {
              "$ref" : "#/components/schemas/IdentifierEntry"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.identifierentry.class"
          },
          "pendingNumberStudents" : {
            "type" : "integer",
            "description" : "The number of students that have a pending enrollment request for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "recordLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The primary language used in the described entity.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "collection" : {
            "type" : "string",
            "description" : "A reference to the collectionTemplate.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.collectiontemplateguidref.class"
          },
          "academicSession" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Academic Session",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.academicsessionguidref.class"
          },
          "extensions" : {
            "$ref" : "#/components/schemas/educationOfferingExtensions"
          },
          "maxNumberStudents" : {
            "type" : "integer",
            "description" : "The maximum number of students allowed to enroll for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "recordStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "active", "deleted", "inactive" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.recordstatustypeenum.class"
          },
          "organizationCode" : {
            "type" : "string",
            "description" : "A business code used to system might use to reference an organization",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "organization" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Organization.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.organizationguidref.class"
          },
          "locations" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A container for describing where the entity takes place. This could be as a description or as a geo location",
            "items" : {
              "$ref" : "#/components/schemas/Location"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.location.class"
          },
          "startDate" : {
            "type" : "string",
            "description" : "The start date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datez.class"
          }
        },
        "additionalProperties" : false,
        "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.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.collectionoffering.class"
      },
      "Enrollment" : {
        "required" : [ "sourcedId", "recordLanguage", "isActive", "enrollmentStatus", "person", "role", "educationOffering", "offeringType", "recordStatus" ],
        "type" : "object",
        "properties" : {
          "sourcedId" : {
            "type" : "string",
            "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).",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.guid.class"
          },
          "role" : {
            "description" : "The role of the associated person in the given context.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "member", "chair", "staff", "student", "administrator", "aide", "guardian", "parent", "proctor", "relative", "teacher", "advisor", "teachingAssistant" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.roletypeenum.class"
          },
          "endDate" : {
            "type" : "string",
            "description" : "The end date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "offeringType" : {
            "description" : "The type of education being offered. This is based on an enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "collection", "course", "component" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.educationofferingtypeenum.class"
          },
          "educationOffering" : {
            "type" : "string",
            "description" : "A reference to an Edu-API offering entity. This is the instantiated Education the person is being enrolled on.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.educationofferingguidref.class"
          },
          "recordLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The primary language used in the described entity.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "isActive" : {
            "type" : "boolean",
            "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.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.boolean.class"
          },
          "extensions" : {
            "$ref" : "#/components/schemas/enrollmentExtensions"
          },
          "recordStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "active", "deleted", "inactive" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.recordstatustypeenum.class"
          },
          "dateLastModified" : {
            "type" : "string",
            "description" : "A timestamp describing when this record was last modified.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "enrollmentStatus" : {
            "description" : "The status of this enrollment.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "onLeave", "withdrawn", "accepted", "pending", "cancelled", "registered", "revoked", "Interruption", "finished", "withdrawnFailing", "withdrawnPassing", "dropped", "suspended", "enrolled", "declined", "deferred", "onHold" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.enrollmentstatusenum.class"
          },
          "person" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Person.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.personguidref.class"
          },
          "startDate" : {
            "type" : "string",
            "description" : "The start date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          }
        },
        "additionalProperties" : false,
        "description" : "The contextualized joining of a person and a CourseOffering, CollectionOffering or ComponentOffering.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.enrollment.class"
      },
      "LanguageTypedString" : {
        "required" : [ "recordLanguage", "value" ],
        "type" : "object",
        "properties" : {
          "recordLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The primary language used in the described entity.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "value" : {
            "type" : "string",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          }
        },
        "additionalProperties" : false,
        "description" : "A String with an associated language code.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
      },
      "ComponentTemplate" : {
        "required" : [ "componentType", "sourcedId", "recordLanguage", "title", "description", "primaryCode", "organization", "level", "gradingScheme", "recordStatus" ],
        "type" : "object",
        "properties" : {
          "sourcedId" : {
            "type" : "string",
            "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).",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.guid.class"
          },
          "otherCodes" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "Any number of additional human readable codes/identifiers for the entity being described",
            "items" : {
              "$ref" : "#/components/schemas/IdentifierEntry"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.identifierentry.class"
          },
          "componentType" : {
            "description" : "A representation of what the entity defines. It is based on an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "individualizedInstruction", "integratedLectureLab", "laboratory", "lecture", "practicum", "recitation", "research", "seminar", "independentStudy", "fieldExperience", "exam" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.componenttypeenum.class"
          },
          "parent" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A reference to the parent Course.",
            "items" : {
              "type" : "string",
              "description" : "A reference to a `Course` object that has an allocated sourcedId (`GUID`)."
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.coursetemplateguidref.class"
          },
          "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.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "graduate", "undergraduate", "doctoral" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.educationlevelenum.class"
          },
          "creditsAwarded" : {
            "type" : "string",
            "description" : "A description of the credits that the student receives after the completion of the education.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "recordLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The primary language used in the described entity.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "description" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of descriptions of the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "title" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of titles for the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "primaryCode" : {
            "$ref" : "#/components/schemas/IdentifierEntry"
          },
          "creditType" : {
            "description" : "Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "credit", "nonCredit" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.credittypeenum.class"
          },
          "extensions" : {
            "$ref" : "#/components/schemas/educationExtensions"
          },
          "recordStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "active", "deleted", "inactive" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.recordstatustypeenum.class"
          },
          "dateLastModified" : {
            "type" : "string",
            "description" : "A timestamp describing when this record was last modified.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "organizationCode" : {
            "type" : "string",
            "description" : "A business code used to system might use to reference an organization",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "organization" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Organization.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.organizationguidref.class"
          },
          "gradingScheme" : {
            "$ref" : "#/components/schemas/LanguageTypedString"
          },
          "teachingLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The main language used to relay the content of the offering.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          }
        },
        "additionalProperties" : false,
        "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.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.componenttemplate.class"
      },
      "TypedEmail" : {
        "required" : [ "emailType", "email" ],
        "type" : "object",
        "properties" : {
          "emailType" : {
            "description" : "The type of email address. This is based on an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "homeEmail", "workEmail", "iceEmail" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.emailtypeenum.class"
          },
          "email" : {
            "type" : "string",
            "description" : "An email address.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.emailaddress.class"
          }
        },
        "additionalProperties" : false,
        "description" : "A typed email address.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.typedemail.class"
      },
      "AcademicSession" : {
        "required" : [ "sourcedId", "recordLanguage", "recordStatus" ],
        "type" : "object",
        "properties" : {
          "sourcedId" : {
            "type" : "string",
            "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).",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.guid.class"
          },
          "otherCodes" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "Human readable codes/identifiers for the entity being described",
            "items" : {
              "$ref" : "#/components/schemas/IdentifierEntry"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.identifierentry.class"
          },
          "parent" : {
            "type" : "string",
            "description" : "A reference to another Edu-API Academic Session that serves as a parent `AcademicSession`.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.academicsessionguidref.class"
          },
          "endDate" : {
            "type" : "string",
            "description" : "The end date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "recordLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The primary language used in the described entity.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "title" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A set of titles for the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "primaryCode" : {
            "$ref" : "#/components/schemas/IdentifierEntry"
          },
          "extensions" : {
            "$ref" : "#/components/schemas/academicSessionExtensions"
          },
          "recordStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "active", "deleted", "inactive" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.recordstatustypeenum.class"
          },
          "dateLastModified" : {
            "type" : "string",
            "description" : "A timestamp describing when this record was last modified.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "children" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A reference to another Edu-API Academic Session that serves as a Child `AcademicSession`s.",
            "items" : {
              "type" : "string",
              "description" : "A reference to an `AcademicSession` object that has an allocated sourcedId (`GUID`)."
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.academicsessionguidref.class"
          },
          "sessionType" : {
            "description" : "The type of academic session. This is based upon an enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "gradingPeriod", "semester", "schoolYear", "term", "studyPeriod" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.academicsessiontypeenum.class"
          },
          "startDate" : {
            "type" : "string",
            "description" : "The start date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          }
        },
        "additionalProperties" : false,
        "description" : "A calendar period during which a school or institution schedules classes, offerings, or other units of learning for availability.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.academicsession.class"
      },
      "Imsx_CodeMinor" : {
        "required" : [ "imsx_codeMinorField" ],
        "type" : "object",
        "properties" : {
          "imsx_codeMinorField" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "Each reported code minor status code.",
            "items" : {
              "$ref" : "#/components/schemas/Imsx_CodeMinorField"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.imsx_codeminorfield.class"
          }
        },
        "additionalProperties" : false,
        "description" : "This is the container for the set of code minor status codes reported in the responses from the Service Provider.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.imsx_codeminor.class"
      },
      "Affiliation" : {
        "required" : [ "sourcedId", "person", "organization", "role", "affiliationStatus", "recordStatus" ],
        "type" : "object",
        "properties" : {
          "sourcedId" : {
            "type" : "string",
            "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).",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.guid.class"
          },
          "extensions" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A container for extension objects.",
            "items" : {
              "$ref" : "#/components/schemas/affiliationExtensions"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.affiliationextensions.class"
          },
          "role" : {
            "description" : "The role of the associated person in the given context.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "member", "chair", "staff", "student", "administrator", "aide", "guardian", "parent", "proctor", "relative", "teacher", "advisor", "teachingAssistant" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.roletypeenum.class"
          },
          "recordStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "active", "deleted", "inactive" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.recordstatustypeenum.class"
          },
          "dateLastModified" : {
            "type" : "string",
            "description" : "A timestamp describing when this record was last modified.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "affiliationStatus" : {
            "description" : "The status of the person's affiliation with the organization. This is based upon an enumerated vocabulary",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "active", "inactive", "auditing", "withdrawn" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.affiliationstatusenum.class"
          },
          "endDate" : {
            "type" : "string",
            "description" : "The end date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "person" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Person.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.personguidref.class"
          },
          "organization" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Organization.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.organizationguidref.class"
          },
          "startDate" : {
            "type" : "string",
            "description" : "The start date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          }
        },
        "additionalProperties" : false,
        "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.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.affiliation.class"
      },
      "PersonName" : {
        "type" : "object",
        "properties" : {
          "honorificSuffix" : {
            "type" : "string",
            "description" : "Honorific suffix(es) following a person's name (e.g. 'M.D, PhD').",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "familyName" : {
            "type" : "string",
            "description" : "Family name. In the western world, often referred to as the 'last name' of a person.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "givenName" : {
            "type" : "string",
            "description" : "Given name. In the western world, often referred to as the 'first name' of a person.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "familyNamePrefix" : {
            "type" : "string",
            "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').",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "patronymicName" : {
            "type" : "string",
            "description" : "Patronymic name.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "honorificPrefix" : {
            "type" : "string",
            "description" : "Honorific prefix(es) preceding a person's name (e.g. 'Dr', 'Mrs' or 'Mr').",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "additionalName" : {
            "type" : "string",
            "description" : "Additional name. Includes what is often referred to as 'middle name' in the western world.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          }
        },
        "additionalProperties" : false,
        "description" : "The set of parts that are used to define an Edu-API persons name, this design attempts to account for international naming needs.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.personname.class"
      },
      "EducationOffering" : {
        "required" : [ "sourcedId", "offeringType", "recordLanguage", "title", "description", "primaryCode", "organization", "academicSession", "offeringFormat", "registrationStatus", "startDate", "endDate", "recordStatus" ],
        "type" : "object",
        "properties" : {
          "minNumberStudents" : {
            "type" : "integer",
            "description" : "The minimum number of students allowed to enroll for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "synchronicity" : {
            "description" : "An indicator of whether instructor and learner must both be present at the same time",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "hybrid", "asynchronous", "synchronous" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.synchronicityenum.class"
          },
          "registrationStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "open", "closed", "pending", "waitlist" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.registrationstatusenum.class"
          },
          "roleEnablement" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "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.",
            "items" : {
              "$ref" : "#/components/schemas/RoleEnablement"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.roleenablement.class"
          },
          "offeringType" : {
            "description" : "The type of education being offered. This is based on an enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "collection", "course", "component" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.educationofferingtypeenum.class"
          },
          "endDate" : {
            "type" : "string",
            "description" : "The end date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datez.class"
          },
          "description" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of descriptions of the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "title" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of titles for the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "primaryCode" : {
            "$ref" : "#/components/schemas/IdentifierEntry"
          },
          "paceOfStudy" : {
            "type" : "string",
            "description" : "The tempo that the course is taught at as a percentage of a normal course.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.percentage.class"
          },
          "creditType" : {
            "description" : "Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "credit", "nonCredit" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.credittypeenum.class"
          },
          "enrolledNumberStudents" : {
            "type" : "integer",
            "description" : "The number of students that have already enrolled for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "academicSessionCode" : {
            "type" : "string",
            "description" : "A business code that a system might use to reference an academic session.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "offeringFormat" : {
            "description" : "The modality by which the entity is delivered. This is represented by an extensible enumerated vocabulary",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "online", "blended", "onGround" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.offeringformatenum.class"
          },
          "dateLastModified" : {
            "type" : "string",
            "description" : "A timestamp describing when this record was last modified.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "teachingLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The main language used to relay the content of the offering.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "sourcedId" : {
            "type" : "string",
            "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).",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.guid.class"
          },
          "otherCodes" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "Human readable codes/identifiers for the entity being described",
            "items" : {
              "$ref" : "#/components/schemas/IdentifierEntry"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.identifierentry.class"
          },
          "pendingNumberStudents" : {
            "type" : "integer",
            "description" : "The number of students that have a pending enrollment request for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "recordLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The primary language used in the described entity.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "academicSession" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Academic Session",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.academicsessionguidref.class"
          },
          "extensions" : {
            "$ref" : "#/components/schemas/educationOfferingExtensions"
          },
          "maxNumberStudents" : {
            "type" : "integer",
            "description" : "The maximum number of students allowed to enroll for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "recordStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "active", "deleted", "inactive" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.recordstatustypeenum.class"
          },
          "organizationCode" : {
            "type" : "string",
            "description" : "A business code used to system might use to reference an organization",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "organization" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Organization.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.organizationguidref.class"
          },
          "locations" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A container for describing where the entity takes place. This could be as a description or as a geo location",
            "items" : {
              "$ref" : "#/components/schemas/Location"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.location.class"
          },
          "startDate" : {
            "type" : "string",
            "description" : "The start date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datez.class"
          }
        },
        "additionalProperties" : false,
        "description" : "A description of an abstract educational offering.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.educationoffering.class"
      },
      "CourseTemplate" : {
        "required" : [ "courseType", "sourcedId", "recordLanguage", "title", "description", "primaryCode", "organization", "level", "gradingScheme", "recordStatus" ],
        "type" : "object",
        "properties" : {
          "sourcedId" : {
            "type" : "string",
            "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).",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.guid.class"
          },
          "otherCodes" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "Any number of additional human readable codes/identifiers for the entity being described",
            "items" : {
              "$ref" : "#/components/schemas/IdentifierEntry"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.identifierentry.class"
          },
          "parent" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A reference to the parent EducationCollection.",
            "items" : {
              "type" : "string",
              "description" : "A reference to an `EducationCollection` object that has an allocated sourcedId (`GUID`)."
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.collectiontemplateguidref.class"
          },
          "courseType" : {
            "description" : "A representation of what the entity defines. It is based on an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "standard", "honors", "research", "independentStudy", "practicum", "internship", "studyAbroad", "capstone", "clinical", "correspondence", "fieldExperience", "seminar", "thesis" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.coursetypeenum.class"
          },
          "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.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "graduate", "undergraduate", "doctoral" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.educationlevelenum.class"
          },
          "creditsAwarded" : {
            "type" : "string",
            "description" : "A description of the credits that the student receives after the completion of the education.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "recordLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The primary language used in the described entity.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "description" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of descriptions of the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "title" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of titles for the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "primaryCode" : {
            "$ref" : "#/components/schemas/IdentifierEntry"
          },
          "creditType" : {
            "description" : "Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "credit", "nonCredit" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.credittypeenum.class"
          },
          "extensions" : {
            "$ref" : "#/components/schemas/educationExtensions"
          },
          "recordStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "active", "deleted", "inactive" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.recordstatustypeenum.class"
          },
          "dateLastModified" : {
            "type" : "string",
            "description" : "A timestamp describing when this record was last modified.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "organizationCode" : {
            "type" : "string",
            "description" : "A business code used to system might use to reference an organization",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "organization" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Organization.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.organizationguidref.class"
          },
          "gradingScheme" : {
            "$ref" : "#/components/schemas/LanguageTypedString"
          },
          "teachingLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The main language used to relay the content of the offering.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          }
        },
        "additionalProperties" : false,
        "description" : "A time independent description of a learning experience, such that it may appear in a catalog.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.coursetemplate.class"
      },
      "Imsx_StatusInfo" : {
        "required" : [ "imsx_codeMajor", "imsx_severity" ],
        "type" : "object",
        "properties" : {
          "imsx_codeMinor" : {
            "$ref" : "#/components/schemas/Imsx_CodeMinor"
          },
          "imsx_codeMajor" : {
            "type" : "string",
            "description" : "The code major value (from the corresponding enumerated vocabulary).",
            "enum" : [ "failure", "processing", "success", "unsupported" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.imsx_codemajor.class"
          },
          "imsx_description" : {
            "type" : "string",
            "description" : "A human readable description supplied by the entity creating the status code information.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "imsx_severity" : {
            "type" : "string",
            "description" : "The severity value (from the corresponding enumerated vocabulary).",
            "enum" : [ "error", "status", "warning" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.imsx_severity.class"
          }
        },
        "additionalProperties" : false,
        "description" : "This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.imsx_statusinfo.class"
      },
      "CollectionTemplate" : {
        "required" : [ "collectionType", "sourcedId", "recordLanguage", "title", "description", "primaryCode", "organization", "level", "gradingScheme", "recordStatus" ],
        "type" : "object",
        "properties" : {
          "sourcedId" : {
            "type" : "string",
            "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).",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.guid.class"
          },
          "otherCodes" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "Any number of additional human readable codes/identifiers for the entity being described",
            "items" : {
              "$ref" : "#/components/schemas/IdentifierEntry"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.identifierentry.class"
          },
          "parent" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A reference to a parent EducationCollection (if present).",
            "items" : {
              "type" : "string",
              "description" : "A reference to an `EducationCollection` object that has an allocated sourcedId (`GUID`)."
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.collectiontemplateguidref.class"
          },
          "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.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "graduate", "undergraduate", "doctoral" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.educationlevelenum.class"
          },
          "creditsAwarded" : {
            "type" : "string",
            "description" : "A description of the credits that the student receives after the completion of the education.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "recordLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The primary language used in the described entity.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "description" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of descriptions of the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "title" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of titles for the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "primaryCode" : {
            "$ref" : "#/components/schemas/IdentifierEntry"
          },
          "creditType" : {
            "description" : "Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "credit", "nonCredit" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.credittypeenum.class"
          },
          "collectionType" : {
            "description" : "A representation of what the entity defines. It is based on an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "program", "generalEducation", "requiredCollection", "electiveCollection", "capstoneCollection", "majorCollection", "minorCollection", "programSpecialization", "nonDegreeCollection" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.collectiontypeenum.class"
          },
          "extensions" : {
            "$ref" : "#/components/schemas/educationExtensions"
          },
          "recordStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "active", "deleted", "inactive" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.recordstatustypeenum.class"
          },
          "dateLastModified" : {
            "type" : "string",
            "description" : "A timestamp describing when this record was last modified.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "organizationCode" : {
            "type" : "string",
            "description" : "A business code used to system might use to reference an organization",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "organization" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Organization.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.organizationguidref.class"
          },
          "gradingScheme" : {
            "$ref" : "#/components/schemas/LanguageTypedString"
          },
          "teachingLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The main language used to relay the content of the offering.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          }
        },
        "additionalProperties" : false,
        "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.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.collectiontemplate.class"
      },
      "ComponentOffering" : {
        "required" : [ "offeringType", "component", "sourcedId", "recordLanguage", "title", "description", "primaryCode", "organization", "academicSession", "offeringFormat", "registrationStatus", "startDate", "endDate", "recordStatus" ],
        "type" : "object",
        "properties" : {
          "minNumberStudents" : {
            "type" : "integer",
            "description" : "The minimum number of students allowed to enroll for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "synchronicity" : {
            "description" : "An indicator of whether instructor and learner must both be present at the same time",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "hybrid", "asynchronous", "synchronous" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.synchronicityenum.class"
          },
          "parent" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A reference to the parent courseOffering.",
            "items" : {
              "type" : "string",
              "description" : "A reference to a `CourseOffering` object that has an allocated sourcedId (`GUID`)."
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.courseofferingguidref.class"
          },
          "registrationStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "open", "closed", "pending", "waitlist" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.registrationstatusenum.class"
          },
          "roleEnablement" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "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.",
            "items" : {
              "$ref" : "#/components/schemas/RoleEnablement"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.roleenablement.class"
          },
          "offeringType" : {
            "description" : "A representation of what the entity defines. It is based on an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "individualizedInstruction", "integratedLectureLab", "laboratory", "lecture", "practicum", "recitation", "research", "seminar", "independentStudy", "fieldExperience", "exam" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.componenttypeenum.class"
          },
          "endDate" : {
            "type" : "string",
            "description" : "The end date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datez.class"
          },
          "description" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of descriptions of the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "title" : {
            "minItems" : 1,
            "type" : "array",
            "description" : "A set of titles for the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "primaryCode" : {
            "$ref" : "#/components/schemas/IdentifierEntry"
          },
          "paceOfStudy" : {
            "type" : "string",
            "description" : "The tempo that the course is taught at as a percentage of a normal course.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.percentage.class"
          },
          "creditType" : {
            "description" : "Reference to what the completion of this entity counts towards. This is represented by an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "credit", "nonCredit" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.credittypeenum.class"
          },
          "enrolledNumberStudents" : {
            "type" : "integer",
            "description" : "The number of students that have already enrolled for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "academicSessionCode" : {
            "type" : "string",
            "description" : "A business code that a system might use to reference an academic session.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "offeringFormat" : {
            "description" : "The modality by which the entity is delivered. This is represented by an extensible enumerated vocabulary",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "online", "blended", "onGround" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.offeringformatenum.class"
          },
          "dateLastModified" : {
            "type" : "string",
            "description" : "A timestamp describing when this record was last modified.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "teachingLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The main language used to relay the content of the offering.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "sourcedId" : {
            "type" : "string",
            "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).",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.guid.class"
          },
          "otherCodes" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "Human readable codes/identifiers for the entity being described",
            "items" : {
              "$ref" : "#/components/schemas/IdentifierEntry"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.identifierentry.class"
          },
          "pendingNumberStudents" : {
            "type" : "integer",
            "description" : "The number of students that have a pending enrollment request for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "recordLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The primary language used in the described entity.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "academicSession" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Academic Session",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.academicsessionguidref.class"
          },
          "component" : {
            "type" : "string",
            "description" : "A reference to the componentTemplate.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.componenttemplateguidref.class"
          },
          "extensions" : {
            "$ref" : "#/components/schemas/educationOfferingExtensions"
          },
          "maxNumberStudents" : {
            "type" : "integer",
            "description" : "The maximum number of students allowed to enroll for this offering",
            "format" : "int32",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.integer.class"
          },
          "recordStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "active", "deleted", "inactive" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.recordstatustypeenum.class"
          },
          "organizationCode" : {
            "type" : "string",
            "description" : "A business code used to system might use to reference an organization",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "organization" : {
            "type" : "string",
            "description" : "A reference to an Edu-API Organization.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.organizationguidref.class"
          },
          "locations" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A container for describing where the entity takes place. This could be as a description or as a geo location",
            "items" : {
              "$ref" : "#/components/schemas/Location"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.location.class"
          },
          "startDate" : {
            "type" : "string",
            "description" : "The start date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datez.class"
          }
        },
        "additionalProperties" : false,
        "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",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.componentoffering.class"
      },
      "Agents" : {
        "required" : [ "agentType", "person" ],
        "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.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "parent", "guardian", "emergencyContact" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.agenttypeenum.class"
          },
          "person" : {
            "type" : "string",
            "description" : "A reference to an Edu-API person. This represents the person acting in an agency capacity.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.personguidref.class"
          },
          "domain" : {
            "type" : "string",
            "description" : "The context within which the person can act as an agent in.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "description" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A set of descriptions of the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          }
        },
        "additionalProperties" : false,
        "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.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.agents.class"
      },
      "RoleEnablement" : {
        "required" : [ "role" ],
        "type" : "object",
        "properties" : {
          "role" : {
            "description" : "The role of the associated person in the given context.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "member", "chair", "staff", "student", "administrator", "aide", "guardian", "parent", "proctor", "relative", "teacher", "advisor", "teachingAssistant" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.roletypeenum.class"
          },
          "endDate" : {
            "type" : "string",
            "description" : "The end date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "startDate" : {
            "type" : "string",
            "description" : "The start date of the associated event.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          }
        },
        "additionalProperties" : false,
        "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.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.roleenablement.class"
      },
      "OptionallyTypedEmail" : {
        "required" : [ "email" ],
        "type" : "object",
        "properties" : {
          "emailType" : {
            "description" : "The type of email address.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "homeEmail", "workEmail", "iceEmail" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.emailtypeenum.class"
          },
          "email" : {
            "type" : "string",
            "description" : "An email address.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.emailaddress.class"
          }
        },
        "additionalProperties" : false,
        "description" : "An optionally typed email address.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.optionallytypedemail.class"
      },
      "affiliationExtensions" : {
        "type" : "object",
        "properties" : { },
        "additionalProperties" : true,
        "description" : "Extension properties related to affiliations",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.affiliationextensions.class"
      },
      "enrollmentExtensions" : {
        "type" : "object",
        "properties" : { },
        "additionalProperties" : true,
        "description" : "Extension properties related to enrollments",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.enrollmentextensions.class"
      },
      "organizationExtensions" : {
        "type" : "object",
        "properties" : { },
        "additionalProperties" : true,
        "description" : "Extension properties related to education organizations",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.organizationextensions.class"
      },
      "GeoCoordinates" : {
        "required" : [ "latitude", "longitude" ],
        "type" : "object",
        "properties" : {
          "latitude" : {
            "type" : "number",
            "description" : "The latitude of the location [[WGS-84]].",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.float.class"
          },
          "longitude" : {
            "type" : "number",
            "description" : "The longitude of the location [[WGS-84]].",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.float.class"
          }
        },
        "additionalProperties" : false,
        "description" : "The geographic coordinates of a location.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.geocoordinates.class"
      },
      "educationExtensions" : {
        "type" : "object",
        "properties" : { },
        "additionalProperties" : true,
        "description" : "Extension properties related to education templates",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.educationextensions.class"
      },
      "OptionallyTypedPhone" : {
        "required" : [ "phone" ],
        "type" : "object",
        "properties" : {
          "phoneType" : {
            "description" : "The type of address. This is based on an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "homePhone", "workPhone", "icePhone" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.phonetypeenum.class"
          },
          "phone" : {
            "type" : "string",
            "description" : "A phone number.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.phonenumber.class"
          }
        },
        "additionalProperties" : false,
        "description" : "An optionally typed phone number.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.optionallytypedphone.class"
      },
      "Person" : {
        "required" : [ "sourcedId", "recordLanguage", "recordStatus" ],
        "type" : "object",
        "properties" : {
          "sourcedId" : {
            "type" : "string",
            "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).",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.guid.class"
          },
          "otherEmails" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "Additional email addresses of a subject.",
            "items" : {
              "$ref" : "#/components/schemas/TypedEmail"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.typedemail.class"
          },
          "placeOfBirth" : {
            "type" : "string",
            "description" : "The place of birth. Commonly a city or municipality.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "gender" : {
            "description" : "The gender of the individual. It is based on an extensible enumerated vocabulary.",
            "anyOf" : [ {
              "type" : "string",
              "enum" : [ "male", "female", "unspecified", "other" ]
            }, {
              "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+",
              "type" : "string"
            } ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.genderenum.class"
          },
          "otherAddresses" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A list of other addresses.",
            "items" : {
              "$ref" : "#/components/schemas/TypedAddress"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.typedaddress.class"
          },
          "dateOfDeath" : {
            "type" : "string",
            "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.",
            "format" : "date",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.date.class"
          },
          "recordLanguage" : {
            "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
            "type" : "string",
            "description" : "The primary language used in the described entity.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "formattedName" : {
            "type" : "string",
            "description" : "the long form formatted name, this will often be dependent on region or system requirements.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.nfcstring.class"
          },
          "dateOfBirth" : {
            "type" : "string",
            "description" : "The date of birth.",
            "format" : "date",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.date.class"
          },
          "agents" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "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.",
            "items" : {
              "$ref" : "#/components/schemas/Agents"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.agents.class"
          },
          "legalName" : {
            "$ref" : "#/components/schemas/PersonName"
          },
          "isDeceased" : {
            "type" : "boolean",
            "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.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.boolean.class"
          },
          "primaryPhone" : {
            "$ref" : "#/components/schemas/OptionallyTypedPhone"
          },
          "extensions" : {
            "$ref" : "#/components/schemas/personExtensions"
          },
          "otherIdentifiers" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A list of additional identifiers for the described entity.",
            "items" : {
              "$ref" : "#/components/schemas/IdentifierEntry"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.identifierentry.class"
          },
          "otherNames" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A list of other names for this person.",
            "items" : {
              "$ref" : "#/components/schemas/PersonNameEntry"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.personnameentry.class"
          },
          "dateLastModified" : {
            "type" : "string",
            "description" : "A timestamp describing when this record was last modified.",
            "format" : "date-time",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.datetimez.class"
          },
          "recordStatus" : {
            "type" : "string",
            "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.",
            "enum" : [ "active", "deleted", "inactive" ],
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.recordstatustypeenum.class"
          },
          "countryOfBirth" : {
            "type" : "string",
            "description" : "The country of birth.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.primitive.string.class"
          },
          "otherPhones" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A list of other phone numbers",
            "items" : {
              "$ref" : "#/components/schemas/TypedPhone"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.typedphone.class"
          },
          "pronouns" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "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.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          },
          "languagesSpoken" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "The list of languages that this person speaks.",
            "items" : {
              "pattern" : "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$",
              "type" : "string",
              "description" : "A language code [[BCP47]]."
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.languagecode.class"
          },
          "primaryAddress" : {
            "$ref" : "#/components/schemas/OptionallyTypedAddress"
          },
          "primaryEmail" : {
            "$ref" : "#/components/schemas/OptionallyTypedEmail"
          }
        },
        "additionalProperties" : false,
        "description" : "A Person represents a human being, alive or deceased, real or imaginary.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.person.class"
      },
      "Location" : {
        "type" : "object",
        "properties" : {
          "identifier" : {
            "type" : "string",
            "description" : "An identifier.",
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.derived.identifier.class"
          },
          "geoLocation" : {
            "$ref" : "#/components/schemas/GeoCoordinates"
          },
          "description" : {
            "minItems" : 0,
            "type" : "array",
            "description" : "A set of descriptions of the associated entity with a designated language for each entry.",
            "items" : {
              "$ref" : "#/components/schemas/LanguageTypedString"
            },
            "x-srcprop-pid" : "org.1edtech.eduapi.v1p0.languagetypedstring.class"
          }
        },
        "additionalProperties" : false,
        "description" : "A container for describing the location an entity takes place at.",
        "x-class-pid" : "org.1edtech.eduapi.v1p0.location.class"
      }
    },
    "parameters" : {
      "filter" : {
        "name" : "filter",
        "in" : "query",
        "description" : "Specifies that the returned collection should be filtered using the supplied criteria.",
        "required" : false,
        "allowEmptyValue" : false,
        "style" : "form",
        "schema" : {
          "type" : "string",
          "description" : "Character strings."
        }
      },
      "offset" : {
        "name" : "offset",
        "in" : "query",
        "description" : "Specifices the number of the first record to be supplied in the segmented response message. Default: 0.",
        "required" : false,
        "allowEmptyValue" : false,
        "style" : "form",
        "schema" : {
          "minimum" : 0,
          "type" : "integer",
          "format" : "int32"
        }
      },
      "limit" : {
        "name" : "limit",
        "in" : "query",
        "description" : "Specifices the download segmentation value i.e. the maximum number of records to be contained in the response. Default: 100.",
        "required" : false,
        "allowEmptyValue" : false,
        "style" : "form",
        "schema" : {
          "minimum" : 1,
          "type" : "integer",
          "format" : "int32"
        }
      },
      "orderBy" : {
        "name" : "orderBy",
        "in" : "query",
        "description" : "Specifies whether the collection should be ordered ascending (asc) or descending (desc).",
        "required" : false,
        "allowEmptyValue" : false,
        "style" : "form",
        "schema" : {
          "type" : "string",
          "description" : "Character strings."
        }
      },
      "sort" : {
        "name" : "sort",
        "in" : "query",
        "description" : "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.",
        "required" : false,
        "allowEmptyValue" : false,
        "style" : "form",
        "schema" : {
          "type" : "string",
          "description" : "Character strings."
        }
      }
    },
    "headers" : {
      "X-Total-Count" : {
        "description" : "The total number of resources that are available to be returned",
        "schema" : {
          "type" : "integer",
          "format" : "int32"
        }
      }
    },
    "securitySchemes" : {
      "CCGSecurity" : {
        "type" : "oauth2",
        "flows" : {
          "clientCredentials" : {
            "tokenUrl" : "https://www.example.com/eduapi/ccg/token/",
            "scopes" : {
              "http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly" : "Default read-only scope. Enables access to all GET operations except those in PersonManagement",
              "http://purl.1edtech.org/spec/eduapi/v1p0/scope/core.readonly.privacy" : "Enables access to all GET operations in PersonManagement"
            }
          }
        }
      }
    },
    "links" : {
      "next" : {
        "operationId" : "getEducationTemplates",
        "parameters" : {
          "limit" : "$request.path.limit",
          "offset" : "$request.path.offset"
        },
        "description" : "Get the next set of resources i.e. from offset to offset+limit"
      },
      "last" : {
        "operationId" : "getEducationTemplates",
        "parameters" : {
          "limit" : "$request.path.limit",
          "offset" : "$request.path.offset"
        },
        "description" : "Get the last set of resources i.e. from offset to end"
      },
      "prev" : {
        "operationId" : "getEducationTemplates",
        "parameters" : {
          "limit" : "$request.path.limit",
          "offset" : "$request.path.offset"
        },
        "description" : "Get the previous set of resources i.e. from last_offset to last_offset+limit"
      },
      "first" : {
        "operationId" : "getEducationTemplates",
        "parameters" : {
          "limit" : "$request.path.limit",
          "offset" : "$request.path.offset"
        },
        "description" : "Get the first set of resources i.e. from first to limit"
      }
    }
  }
}

H. Revision History

Doc Name Document Version No. Release Date Comments
Edu-API Base Document 1.0 January 01, 2022 First release of Edu-API 1.0 Base Document.
Edu-API Candidate Final Draft Document 1.0 March 01, 2022 First release of Edu-API 1.0 Candidate Final Draft Document.
Edu-API Candidate Final 2.0 June 13, 2022 Second release of Edu-API 1.0 Candidate Final.
Edu-API Candidate Final 3.0 April 12, 2023 Primary and Other Code properties added to the Academic Session class.
Edu-API Candidate Final 4.0 March 4, 2024
  • 4th Doc release of Candite Final
    • Added section for alignment with 1EdTech Framework documents for privacy, security, localization, and asynchronous binding.
Edu-API Candidate Final 5.0 March 4, 2024
  • 5th Doc release of Candite Final
    • dateLastModified made optional in parallel with delta mode being made optional in v1
    • date properties on collectionOffering made optional to represent that not all programs are time bound
Edu-API Candidate Final 6.0 July 18, 2024
  • 6th Doc release of Candite Final
    • sourcedID changed from a UUID to a GUID
    • Affiliation added as a first class object
    • Affiliation property removed from the person class
    • base url pattern updated to match reference tooling
Edu-API Candidate Final 7.0 August 19, 2024
  • 7th Doc release of Candite Final
    • offeringType added to the Enrollment class
    • Service model responses and response codes cleaned up
    • Response code 204 added for no content
    • Regrouped all education operations under educations management
Edu-API Candidate Final 8.0 September 11, 2024
  • 8th Doc release of Candite Final
    • DateZ Properties changed to DateTimeZ P Properties
    • Class specific Extension containers added to each 1st class object, e.g. persons has a container of type personExtensions. This change was done to prevent confusion of multiple classes have extension classes of the same type.
    • Added some editorial text to describe expectations for vocabulary support.
    • Added some definitions to classes that were missing definitions
    • Changed vocabulary for recordStatusTypeEnum from "active, toBeDeleted" to "active, inactive, deleted" to better align with real world scenarios.
Edu-API Candidate Final 9.0 November 21, 2024
  • 9th Doc release of Candite Final
    • Fixed multiplicity and casing issues in the model & service descriptions
    • Updated discovery URL
    • Aligned Edu-API with 1Edtech Versioning Framework
    • Updated description of Localization Framework
    • Updated URLS for OpenAPI and JSON Schema Files
Edu-API Candidate Final 9.0 March 06, 2025
  • 10th Doc release of Candite Final
    • Query parameter handling section added
    • Updated discovery URL
    • Aligned Edu-API with 1Edtech Versioning Framework
    • Updated description of Localization Framework
    • Updated URLS for OpenAPI and JSON Schema Files
    • Added 'doctoral' to the education type vocabulary
    • Updated URLS for OpenAPI and JSON Schema Files
This is a preview of the 1EdTech Edu-API Specification v1.0

This version is made available to enable early implemenations of the specificaton to begin. This should be considered a work in progress until it is final.

I. References

I.1 Normative references

[BCP47]
Tags for Identifying Languages. A. Phillips, Ed.; M. Davis, Ed.. IETF. September 2009. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc5646
[IPA]
International Phonetic Alphabet. URL: http://www.internationalphoneticassociation.org/content/ipa-chart
[ISO3166-1]
Codes for the representation of names of countries and their subdivisions — Part 1: Country code. International Organization for Standardization (ISO). August 2020. Published. URL: https://www.iso.org/standard/72482.html
[ISO8601]
Representation of dates and times. ISO 8601:2004.. International Organization for Standardization (ISO). 2004. ISO 8601:2004. URL: http://www.iso.org/iso/catalogue_detail?csnumber=40874
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC4122]
A Universally Unique IDentifier (UUID) URN Namespace. P. Leach; M. Mealling; R. Salz. IETF. July 2005. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc4122
[rfc6585]
Additional HTTP Status Codes. M. Nottingham; R. Fielding. IETF. April 2012. Proposed Standard. URL: https://httpwg.org/specs/rfc6585.html
[rfc9110]
HTTP Semantics. R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed.. IETF. June 2022. Internet Standard. URL: https://httpwg.org/specs/rfc9110.html
[UAX15]
Unicode Normalization Forms. Ken Whistler. Unicode Consortium. 14 August 2024. Unicode Standard Annex #15. URL: https://www.unicode.org/reports/tr15/tr15-56.html
[UNICODE, 16]
Reference not found.
[WGS-84]
NGA Geomatics - WGS 84. URL: http://earth-info.nga.mil/GandG/update/index.php?dir=wgs84&action=wgs84
[XMLSCHEMA-2]
XML Schema Part 2: Datatypes Second Edition. Paul V. Biron; Ashok Malhotra. W3C. 28 October 2004. W3C Recommendation. URL: https://www.w3.org/TR/xmlschema-2/

J. List of Contributors

The following individuals contributed to the development of this document:

Name Organization Role
Joshua McGhee1EdTechEditor
Colin Smythe1EdTechEditor
Markus Gylling1EdTech
Linda FengD2L CorporationCo-Chair, Editor
Jared KosanovicUniversity of WisconsinCo-Chair, Editor
Cary BrownUnicon
Johan PlanmoSUNET
Ola LundgrenSUNET
Viktor HaagD2L Corporation
Gene GarciaMicrosoft
Mark de JongSURF
Stephen BrawnOracle Corporation
Stephen MichaudUniversity of British Columbia
Miguel FernandezOregon State University
Mary-Ellen KreherUniversity of California Systems
Catherine LondonSouthern New Hampshire University/College for America
John WhitmanUniversity of California San Diego
Amin QaziUniversity of California San Diego
Tom BenderUnicon
Rob DittoUniversity of Pennsylvania
Kirk BunteEllucian
Mattias SallstromLadok
Dan ConleyeLumen
Sean TuckerHutchinson Community College
Thomas SellandeLumen
Eric PrestonBlackboard
Joel DunnN2N Services
Jeremy PerkinsInstructure
Chad StrunkN2N Services
Per HörnbladUmeå University
Ronald HamSURF
Tommy LarssonUmeå University
Grace ZhuSouthern New Hampshire University/College for America
Zak WilsonD2L Corporation
Samuel GoertzHutchinson Community College

1EdTech™ Consortium, Inc. ("1EdTech") is publishing the information contained in this document ("Specification") for purposes of scientific, experimental, and scholarly collaboration only.

1EdTech makes no warranty or representation regarding the accuracy or completeness of the Specification.

This material is provided on an "As Is" and "As Available" basis.

The Specification is at all times subject to change and revision without notice.

It is your sole responsibility to evaluate the usefulness, accuracy, and completeness of the Specification as it relates to you.

1EdTech would appreciate receiving your comments and suggestions.

Please contact 1EdTech through our website at www.1edtech.org

Please refer to Document Name: Edu-API Specification 1.0

Date: July 27 2022

Specification Images: