1EdTech Assessment Results Profile for Gradebook Service
Abstract
The 'Assessment Results Profile for Gradebook Service' (ARP-GS) is a formal subset of the OneRoster (OR) 1.2 Gradebook Service. The OneRoster standard addresses the exchange of student data (primarily about people, courses, enrollments and grades) between different educational systems for the specific needs of K-12. The OR 1.2 Gradebook Service, one service within the full OR 1.2 specification, provides the ability to manage the exchange of information about gradebooks in the form of results, lineItems, collections of lineItems (categories) and score-scales. It is also possible to exchange information about assessment activities in the form of assessment lineItems and assessment results. ARP-GS is designed to enable the exchange of detailed results that are assigned as part of some form of assessment activity i.e. the assessment lineItems and assessment results parts of the OR 1.2 Gradebook Service.
This single document contains the consolidated core information about the exchange of assessment lineItems and assessment results: in the OR 1.2 Gradebook Service this information is contained in four separate documents. This document does NOT contain all of the information in those four source documents; it is a synthesis of the key information. The ARP-GS can be adopted without implementing any other part of the OR 1.2 specification. A separate certification process is also available (certification for ARP-GS is also avauilable as part of the certification process for the full OR 1.2 specification).
Introduction
Scope and Context
This document is the reference source for the 1EdTech Assessment Results Profile for Gradebook Service 1.0. This profile is a small subset of the full OneRoster 1.2 Gradebook Service. A separate specification document (and separate conformance test systems) was created so that vendors who want to adopt and certify for only this subset can use a single primary reference. It has been created by taking and synthesizing the relevant parts from the following documents:
- OneRoster 1.2 Gradebook Service Model 1EdTech OneRoster 1.2 Gradebook Services Final Release 1.0
- OneRoster 1.2 Gradebook Service REST/JSON Binding IMS OneRoster 1.2 Gradebook Service REST/JSON Binding Final Release 1.0
- OneRoster 1.2 Implementation Guide 1EdTech OneRoster 1.2 Implementation Guide Final Release 1.0
- OneRoster 1.2 Conformance & Certification 1EdTech OneRoster 1.2 Conformance and Certification Final Release 1.0
There has been no attempt to duplicate ALL of the relevant information in this one document. Further details should be obtained by using the four source documents listed above.
Profile Differences with Respect to the OneRoster 1.2 Gradebook Service
As a formal profile of the 1EdTech OneRoster 1.2 Gradebook Service specification IMS OneRoster 1.2 Gradebook Service REST/JSON Binding Final Release 1.0, IMS OneRoster 1.2 Gradebook Service REST/JSON Binding Final Release 1.0, the Assessment Results Profile for Gradebook Service is a subset of the full Gradebook Service. This subset is:
- Only the AssessmentLineItems Management and the AssessmentResults Management interfaces remain i.e. eight endpoints. The endpoints for Categories Management, LineItems Management, Results Management and ScoreScales Management have been removed;
- Only the AssessmentLineItems and the AssessmentResults data models remain. The data models for Categories, LineItems, Results and ScoreScales have been removed;
- There has been NO change to the AssessmentLineItems and the AsssessmentResults data models.
Structure of this Document
The structure of the rest of this document is:
| Chapter | Description |
|---|---|
| 2. Service Description | The logical description of the service. This makes use of UML as the representation and visualization technique for the service and data models; |
| 3. REST/JSON Binding | Definition of how the information is to be exchanged using a REST-oriented servcie with JSON payloads. This includes the use of OpenAPI files OpenAPI Specification (version 2)OpenAPI Specification (version 3) to provide a machine-readable form of the REST/JSON binding; |
| 4. Implementation Guide | Recommendations regarding adoption of this specification. This includes a description of how to use the OneRoster 1.2 CSV Binding OneRoster 1.2.1 CSV Binding 1.0 to exchange the assessment results data using CSV files; |
| 5. Conformance and Certification | The conformance and certification process to be used to obtauin certification against this specification; |
| Appendix A OpenAPI Listings | The listings of the OpenAPI(JSON) and OpenAPI(YAML) files that have been created to define the REST/JSON binding in a machine-readable format i.e. conforming to the OpenAPI 2.0 and OpenAPI 3.0 specifications. |
| Appendix B JSON Schema Listings | The listings of the set of JSON Schema files (based upon IETF JSON Schema Draft 7) that have been created for the validation of the set of JSON payloads that are exchanged as part of this service. |
| Appendix C Summary of Conformance Tests for a Consumer | A summary of the set of tests to which a consumer claiming compliance will be subjected. An implementation MUST pass all of the relevant tests; |
| Appendix D Summary of Conformance Tests for a Service Provider | A summary of the set of tests to which a service provider claiming compliance will be subjected. An implementation MUST pass all of the relevant tests; |
| Appendix E Data Model Details | The information model details for the AssessmentLineItem and AssessamentResults data models. It is these models that are the basis for the JSON paylaods that are exchanged. |
Conformance Statements
As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.
The key words MAY, MUST, MUST NOT, OPTIONAL, RECOMMENDED, REQUIRED, SHALL, SHALL NOT, SHOULD, and SHOULD NOT in this document are to be interpreted as described in [RFC2119].
An implementation of this specification that fails to implement a MUST/REQUIRED/SHALL requirement or fails to abide by a MUST NOT/SHALL NOT prohibition is considered nonconformant. SHOULD/SHOULD NOT/RECOMMENDED statements constitute a best practice. Ignoring a best practice does not violate conformance but a decision to disregard such guidance should be carefully considered. MAY/OPTIONAL statements indicate that implementers are entirely free to choose whether or not to implement the option.
The Conformance and Certification Guide may introduce greater normative constraints than those defined here for specific service or implementation categories.
Terminology and Acronyms
- API
- Application Programming Interface
- Consumer
- The entity that is contained with an application/system/tool to obtain data from a Service Provider.
- CSV
- Comma Separated Values
- GUID
- Globally Unique Identifier
- HTTP
- HyperText Transfer Protocol
- I-BAT
- IMS Binding Autogeneration Toolkit
- IETF
- Internet Engineering Task Force
- IUT
- Implementation Under Test. An IUT may be claiming compliance as a Consumer and/or a Service Provider.
- JSON
- Java Script Object Notation
- OAS
- OpenAPI Specification
- REST
- Representational State Transfer
- RFC
- Request for Comments
- Service Provider
- The entity that is responsible for supplying data to a Consumer. In general a Service Provider will support many Consumers concurrently.
- TLS
- Transport Layer Security
- UML
- Unified Modeling Language
- URI
- Uniform Resource Identifier
- URL
- Uniform Resource Locator
- UTC
- Coordinated Universal Time
- YAML
- Yet Another Markup Language
Service Description
Service Architecture
An Abstract Representation
It is important to remember that this document contains a description of the underlying service model in terms of the abstract Application Programming Interface (API). The manner in which this abstract representation is visualized is not intended to dictate the implementation form of the Service. The breakdown of the service into its interface classes is a convenient way to document the set of behaviors. The objective for producing these interfaces is to identify and define the messages that are exchanged between the end-systems to realize the system behaviors required of the service.
The internal organization of an implementation of the full abstract API is beyond the scope of this specification. The only constraint is that the external behavior of the abstract API complies with this specification. This means that a .NET, J2EE, etc. physical implementation of this abstract API does not have to represent the functionality using the same breakdown of operations/methods. This physical implementation is not subject to the conformance specification.
It is important to note that the UML representation of the interfaces is used to help develop and document the Service Model and various Bindings. It is not a requirement for a system to implement this interface as defined i.e. to use the same parameters, etc. Conformance against this specification will be confirmed by inspecting the appropriate binding of the information model and ensuring that the relevant information is present and that different sequences of activity result in the predicted and mandated behavior. It is essential that the behaviors described by each of the operations are fully supported and that the behaviors described by different sequences are also maintained.
Assessment Results
A schematic representation of the structure for assessment results is shown in the Figure below.

This structure is based around an Assessment: this may be a Question and Test Interoperability (QTI) test. The assessment results structure enables the exchange of detailed scores for a simple and complex assessment. The Assessment is composed of a set of AssessmentLineItems (similar to LineItems) for which there is a set of AssessmentResults. The key differences between a LineItem and an AssessmentLineItem are:
- A LineItem MUST be aligned to a 'class' whereas an AssessmentLineItem is aligned to an assessment activity and MAY be aligned with a 'class';
- An AssessmentLineItem can reference a parent AssessmentLineItem i.e. hierarchical AssessmentLineItem structures are possible.
The management of AssessmentLineItems and AssessmentResults is achieved using a separate set of operations i.e. not using the original LineItem and Result operations.
Behavior Model
Service Definition
The definition of the operations of the service. This focuses on the description of the behaviors supported by the service. The behaviors are grouped as interfaces;
| Interface | Description |
|---|---|
| AssessmentLineItemsManagement | This enables the management of the assessment lineItems i.e. lineitems that are used to store results about tests/assessments and where these test/assessments are not aligned to a class. |
| AssessmentResultsManagement | This enables the management of the assessment results i.e. results that are used to store scores for tests/assessments and where these test/assessments are not aligned to a class. |
AssessmentLineItemsManagement Interface
This enables the management of the assessment lineItems i.e. lineitems that are used to store results about tests/assessments and where these test/assessments are not aligned to a class.
getAllAssessmentLineItems
Get all of the Assessment Line Items on the service provider.
Request
GET /ims/oneroster/gradebook/v1p2/assessmentLineItems?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}&fields={fields}
Request header, path, and query parameters
| Parameter | Parameter Type | Description | Required | Confidentiality Level |
|---|---|---|---|---|
limit query |
PositiveInteger |
To define the download segmentation value i.e. the maximum number of records to be contained in the response. | Optional | Unrestricted |
offset query |
NonNegativeInteger |
The number of the first record to be supplied in the segmented response message. | Optional | Unrestricted |
sort query |
String |
Identifies the sort criteria to be used for the records in the response message. Use with the orderBy parameter. The sort order should follow the [UNICODE, 16] standard. | Optional | Unrestricted |
orderBy query |
OrderByEnum Enumeration |
The form of ordering for response to the sorted request i.e. ascending (asc) or descending (desc). The sort order should follow the [UNICODE, 16] standard. | Optional | Unrestricted |
filter query |
String |
The filtering rules to be applied when identifying the records to be supplied in the response message. | Optional | Unrestricted |
fields query |
String |
To identify the range of fields that should be supplied in the response message. | Optional | Unrestricted |
Responses
Allowed response codes and content types
| Status Code | Content-Type Header | Content Type | Content Description | Content Required | Confidentiality Level |
|---|---|---|---|---|---|
| 200 | application/json | AssessmentLineItemSet |
Required | Unrestricted | |
| DEFAULT | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 400 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 401 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 403 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 422 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 429 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 500 | application/json | imsx_StatusInfo |
Required | Unrestricted |
getAssessmentLineItem
Get a specific Assessment LineItem on the service provider. If the corresponding record cannot be located then an 'unknown' error code is returned.
Request
GET /ims/oneroster/gradebook/v1p2/assessmentLineItems/{sourcedId}?fields={fields}
Request header, path, and query parameters
| Parameter | Parameter Type | Description | Required | Confidentiality Level |
|---|---|---|---|---|
sourcedId path |
GUID |
The unique identifier, GUID, for this assessment lineItem. | Required | Unrestricted |
fields query |
String |
To identify the range of fields that should be supplied in the response message. | Optional | Unrestricted |
Responses
Allowed response codes and content types
| Status Code | Content-Type Header | Content Type | Content Description | Content Required | Confidentiality Level |
|---|---|---|---|---|---|
| 200 | application/json | SingleAssessmentLineItem |
Required | Unrestricted | |
| DEFAULT | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 400 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 401 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 403 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 404 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 422 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 429 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 500 | application/json | imsx_StatusInfo |
Required | Unrestricted |
deleteAssessmentLineItem
Delete a specific Assessment LineItem on the service provider. If the corresponding record cannot be located then an 'unknown' error code is returned.
Request
DELETE /ims/oneroster/gradebook/v1p2/assessmentLineItems/{sourcedId}
Request header, path, and query parameters
| Parameter | Parameter Type | Description | Required | Confidentiality Level |
|---|---|---|---|---|
sourcedId path |
GUID |
The unique identifier, GUID, for the assessment lineItem to be deleted. | Required | Unrestricted |
Responses
Allowed response codes and content types
| Status Code | Content-Type Header | Content Type | Content Description | Content Required | Confidentiality Level |
|---|---|---|---|---|---|
| 204 | application/json | Void |
Required | Unrestricted | |
| DEFAULT | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 401 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 403 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 404 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 422 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 429 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 500 | application/json | imsx_StatusInfo |
Required | Unrestricted |
putAssessmentLineItem
To create a new Assessment LineItem. The associated sourcedId for this new record is supplied by the requesting system.
Request
PUT /ims/oneroster/gradebook/v1p2/assessmentLineItems/{sourcedId}
Request header, path, and query parameters
| Parameter | Parameter Type | Description | Required | Confidentiality Level |
|---|---|---|---|---|
sourcedId path |
GUID |
The unique identifier, GUID, to be allocated to this new assessment lineItem. | Required | Unrestricted |
Allowed request content types
| Content-Type Header | Content Type | Description | Required | Confidentiality Level |
|---|---|---|---|---|
| application/json | SingleAssessmentLineItem |
Required | Unrestricted |
Responses
Allowed response codes and content types
| Status Code | Content-Type Header | Content Type | Content Description | Content Required | Confidentiality Level |
|---|---|---|---|---|---|
| 201 | application/json | Void |
Required | Unrestricted | |
| DEFAULT | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 401 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 403 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 404 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 422 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 429 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 500 | application/json | imsx_StatusInfo |
Required | Unrestricted |
AssessmentResultsManagement Interface
This enables the management of the assessment results i.e. results that are used to store scores for tests/assessments and where these test/assessments are not aligned to a class.
getAllAssessmentResults
Get all of the Assessment Results on the service provider.
Request
GET /ims/oneroster/gradebook/v1p2/assessmentResults?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}&fields={fields}
Request header, path, and query parameters
| Parameter | Parameter Type | Description | Required | Confidentiality Level |
|---|---|---|---|---|
limit query |
PositiveInteger |
To define the download segmentation value i.e. the maximum number of records to be contained in the response. | Optional | Unrestricted |
offset query |
NonNegativeInteger |
The number of the first record to be supplied in the segmented response message. | Optional | Unrestricted |
sort query |
String |
Identifies the sort criteria to be used for the records in the response message. Use with the orderBy parameter. The sort order should follow the [UNICODE, 16] standard. | Optional | Unrestricted |
orderBy query |
OrderByEnum Enumeration |
The form of ordering for response to the sorted request i.e. ascending (asc) or descending (desc). The sort order should follow the [UNICODE, 16] standard. | Optional | Unrestricted |
filter query |
String |
The filtering rules to be applied when identifying the records to be supplied in the response message. | Optional | Unrestricted |
fields query |
String |
To identify the range of fields that should be supplied in the response message. | Optional | Unrestricted |
Responses
Allowed response codes and content types
| Status Code | Content-Type Header | Content Type | Content Description | Content Required | Confidentiality Level |
|---|---|---|---|---|---|
| 200 | application/json | AssessmentResultSet |
Required | Unrestricted | |
| DEFAULT | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 400 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 401 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 403 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 422 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 429 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 500 | application/json | imsx_StatusInfo |
Required | Unrestricted |
getAssessmentResult
Get a specific Assessment Result on the service provider. If the corresponding record cannot be located then an 'unknown' error code is returned.
Request
GET /ims/oneroster/gradebook/v1p2/assessmentResults/{sourcedId}?fields={fields}
Request header, path, and query parameters
| Parameter | Parameter Type | Description | Required | Confidentiality Level |
|---|---|---|---|---|
sourcedId path |
GUID |
Tthe unique identifier, GUID, for this assessment result. | Required | Unrestricted |
fields query |
String |
To identify the range of fields that should be supplied in the response message. | Optional | Unrestricted |
Responses
Allowed response codes and content types
| Status Code | Content-Type Header | Content Type | Content Description | Content Required | Confidentiality Level |
|---|---|---|---|---|---|
| 200 | application/json | SingleAssessmentResult |
Required | Unrestricted | |
| DEFAULT | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 400 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 401 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 403 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 404 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 422 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 429 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 500 | application/json | imsx_StatusInfo |
Required | Unrestricted |
deleteAssessmentResult
Delete a specific Assessment Result on the service provider. If the corresponding record cannot be located then an 'unknown' error code is returned.
Request
DELETE /ims/oneroster/gradebook/v1p2/assessmentResults/{sourcedId}
Request header, path, and query parameters
| Parameter | Parameter Type | Description | Required | Confidentiality Level |
|---|---|---|---|---|
sourcedId path |
GUID |
The unique identifier, GUID, for the assessment result to be deleted. | Required | Unrestricted |
Responses
Allowed response codes and content types
| Status Code | Content-Type Header | Content Type | Content Description | Content Required | Confidentiality Level |
|---|---|---|---|---|---|
| 204 | application/json | Void |
Required | Unrestricted | |
| DEFAULT | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 401 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 403 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 404 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 422 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 429 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 500 | application/json | imsx_StatusInfo |
Required | Unrestricted |
putAssessmentResult
To create a new Assessment Result. The associated sourcedId for this new record is supplied by the requesting system.
Request
PUT /ims/oneroster/gradebook/v1p2/assessmentResults/{sourcedId}
Request header, path, and query parameters
| Parameter | Parameter Type | Description | Required | Confidentiality Level |
|---|---|---|---|---|
sourcedId path |
GUID |
The unique identifier, GUID, to be allocated to this new assessment result. | Required | Unrestricted |
Allowed request content types
| Content-Type Header | Content Type | Description | Required | Confidentiality Level |
|---|---|---|---|---|
| application/json | SingleAssessmentResult |
Required | Unrestricted |
Responses
Allowed response codes and content types
| Status Code | Content-Type Header | Content Type | Content Description | Content Required | Confidentiality Level |
|---|---|---|---|---|---|
| 201 | application/json | Void |
Required | Unrestricted | |
| DEFAULT | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 401 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 403 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 404 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 422 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 429 | application/json | imsx_StatusInfo |
Required | Unrestricted | |
| 500 | application/json | imsx_StatusInfo |
Required | Unrestricted |
REST/JSON Binding
REST Endpoints
Mapping of the Service Operations to the REST Endpoints
The mapping between the service operations and the REST Endpoint URL-leaf values are listed in the Table below. The syntax and semantics for this mapping are described in IMS OneRoster 1.2 Gradebook Service REST/JSON Binding Final Release 1.0.
undefined Service Operations
| Operation | Method | Path | Description | Confidentiality Level |
|---|---|---|---|---|
| deleteAssessmentLineItem | DELETE | /ims/oneroster/gradebook/v1p2/assessmentLineItems/{sourcedId} |
Delete a specific Assessment LineItem on the service provider. If the corresponding record cannot be located then an 'unknown' error code is returned. | N/A |
| deleteAssessmentResult | DELETE | /ims/oneroster/gradebook/v1p2/assessmentResults/{sourcedId} |
Delete a specific Assessment Result on the service provider. If the corresponding record cannot be located then an 'unknown' error code is returned. | N/A |
| getAllAssessmentLineItems | GET | /ims/oneroster/gradebook/v1p2/assessmentLineItems?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}&fields={fields} |
Get all of the Assessment Line Items on the service provider. | N/A |
| getAllAssessmentResults | GET | /ims/oneroster/gradebook/v1p2/assessmentResults?limit={limit}&offset={offset}&sort={sort}&orderBy={orderBy}&filter={filter}&fields={fields} |
Get all of the Assessment Results on the service provider. | N/A |
| getAssessmentLineItem | GET | /ims/oneroster/gradebook/v1p2/assessmentLineItems/{sourcedId}?fields={fields} |
Get a specific Assessment LineItem on the service provider. If the corresponding record cannot be located then an 'unknown' error code is returned. | N/A |
| getAssessmentResult | GET | /ims/oneroster/gradebook/v1p2/assessmentResults/{sourcedId}?fields={fields} |
Get a specific Assessment Result on the service provider. If the corresponding record cannot be located then an 'unknown' error code is returned. | N/A |
| putAssessmentLineItem | PUT | /ims/oneroster/gradebook/v1p2/assessmentLineItems/{sourcedId} |
To create a new Assessment LineItem. The associated sourcedId for this new record is supplied by the requesting system. | N/A |
| putAssessmentResult | PUT | /ims/oneroster/gradebook/v1p2/assessmentResults/{sourcedId} |
To create a new Assessment Result. The associated sourcedId for this new record is supplied by the requesting system. | N/A |
API Root URL and Versioning
All of the paths MUST also contain, as the base of the path, excluding the host name, the string: "/ims/oneroster/gradebook/v1p2".
Service Discovery
A Service Provider MUST provide a localized version of the OpenAPI file (version 3 JSON file format) to enable service discovery IMS Global Security Framework v1.1
This file MUST be located at: "...hostname.../ims/oneroster/gradebook/v1p2/discovery/".
The OpenAPI file MUST have the name: "assessmentresultv1p0service_openapi3_v1p0".
Therefore the full URL for this service discovery file is: "...hostname.../ims/oneroster/gradebook/v1p2/discovery/assessmentresultv1p0service_openapi3_v1p0.json".
Using the Endpoint Parameters
Pagination
For requests of collections i.e. the response for the 'getAllAssessmentLineItems()', etc. call, there is a danger of data overload. To avoid this, implementations should adopt a pagination mechanism. Pagination is controlled via two parameters that are appended to the request:
- '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).
An example of a request to return the first 10 resources in a collection of lineItems:
GET https://imsglobal.org/ims/oneroster/gradebook/v1p2/lineItems?limit=10
An example of a request to return the second 10 resources in a collection of lineItems:
GET https://imsglobal.org/ims/oneroster/gradebook/v1p2/lineItems?limit=10&offset=10
It is RECOMMENDED that implementations pass the total resource count in collection back to the requester. This MUST be provided in the custom HTTP header: X-Total-Count.
It is RECOMMENDED that implementers pass back next, previous, first and last links in the HTTP Link Header.
Consider the requests for the example where 503 resources exist in the collection. The pagination is in units of 10.
Link:
<https://imsglobal.org/ims/oneroster/gradebook/v1p2/assessmentLineItems?limit=10&offset=20>; rel="next",
<https://imsglobal.org/ims/oneroster/gradebook/v1p2/assessmentLineItems?limit=3&offset=500>; rel="last",
<https://imsglobal.org/ims/oneroster/gradebook/v1p2/assessmentLineItems?limit=10&offset=0>; rel="first",
<https://imsglobal.org/ims/oneroster/gradebook/v1p2/assessmentLineItems?limit=10&offset=0>; rel="prev"
Sorting
It should be possible for collections, i.e. the response for the 'getAllAssessmentResults()', etc. calls, to be returned in a sorted order. It should be possible to sort the collection based on any single data element in the core description of the resource. Sort requests MUST make use of the reserved word "sort" (?sort= data_field), and optionally the reserved word orderBy for which:
- 'data_field' MUST be used in the request to ask for the collection to be sorted on data field. The form of ordering is implementation dependent if the 'orderBy' attribute is not used;
- 'orderBy' MAY be used in the request to ask for the collection to be ordered ascending (asc) or descending (desc).
An example of a request to ask for a list of students sorted into ascending familyName order:
GET https://imsglobal.org/ims/oneroster/gradebook/v1p2/results?sort=score&orderBy=asc
Sorting should conform to the use of the Unicode Collation Algorithm The Unicode Standard when using the relevant comparisons.
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.
To sort/order on the properties of nested objects, (for example, with metadata properties), a dot-notation approach MUST be used. The format for this is:
?sort=<Nested_Object>.<Property>
Filtering
For the calls that request collections e.g. 'getAllLineItems()', etc. call, it should be possible to filter collections for elements matching a certain criteria. It should be possible to filter collections based on any data element in the core description of the resource.Filter requests MUST take the form:
?filter=<data_field><predicate><value>
or
?filter=<data_field><predicate><value><logical><data_field><predicate><value>
The data fields that can be used are those present in the class definition being filtered. So for example in 'results', it MUST be possible to filter on: 'sourcedId', 'score, 'dateLastModified', etc.
Predicates MUST be chosen from those listed in the Table below:
| Predicate | Representation |
|---|---|
| Equal | = |
| Not Equal | != |
| Greater Than | > |
| Greater Than or Equal | >= |
| Lesser Than | < |
| Lesser Than or Equal | <= |
| Contains | ~ |
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 <logical> parameters allow more complex queries to be created. For version 1.0, it is RECOMMENDED that logical operations are limited to " 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.
To query on the properties of nested objects, (for example, with metadata properties), a dot-notation approach MUST be used. The format for this is:
?filter=<Nested_Object>.<Property>
Note then when querying on metadata, the property is loosely typed. An example or a request to find 'lineItems' with a 'dueDate' of '2017-01-01T00:00:00Z' is:
GET https://imsglobal.org/ims/oneroster/gradebook/v1p2/lineItems?filter=dueDate='2017-01-01T00:00:00Z'
URL encoded as:
GET https://imsglobal.org/ims/oneroster/gradebook/v1p2/lineItems?filter=role%3D%272017-01-01T00:00:00Z%27
Filter queries MUST be URL encoded.
An example of a complex query for all 'lineItems' with a dueDate='2017-01-01T00:00:00Z' AND dateLastModified>'2016-12-12T00:00:00Z' is:
GET https://imsglobal.org/ims/oneroster/gradebook/v1p2/lineItems?filter=dueDate%3D%272017%3D01%3D01T00%3A00%3A00Z%27%20AND%20dateLastModified%3E%272016%3D12%3D12T00%3A00%3A00Z%27
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 'subject' (this is not a field in 'lineItem' but is used as a generic example of filters for arrays) field when the value of the field is "subject1,subject2,subject3" the following filters would return:
- ?filter=subject='subject1' - record not returned;
- ?filter=subject='subject1,subject2' - record not returned;
- ?filter=subject='subject1,subject2,subject3' - record returned;
- ?filter=subject~'subject1' - record returned;
- ?filter=subject~'subject1,subject2' - record returned;
- ?filter=subject~'subject1,subject2,subject3' - record returned.
This means filtering using the '=' has 'AND' semantics and for '~' has 'OR' semantics. Filtering rules should conform to the use of the Unicode Collation Algorithm The Unicode Standard when using the relevant comparisons.
If the consumer requests that data be 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'.
Field Selection
For the read collection calls, such as 'getAllAssessmentResults()', etc. it should be possible for requesters to select the range of fields to be returned. By default, all mandatory and optional fields from the core description of the resource MUST be returned. If any fields are specified in the request then the implementation should return those fields AND ONLY those fields i.e. the multiplicity rules for an element are overridden. Any field or fields from the Data Model MAY be requested.
Field selection request MUST make use of the reserved word 'fields'. The value of fields is a comma delimited list of the fields to return. An example of a request message to ask for a list of Results returning only the 'sourcedId' and 'score':
GET https://imsglobal.org/ims/oneroster/gradebook/v1p2/assessmentResults?fields=sourcedId,score
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'.
Security Framework
The information in this section is taken from the IMS Security Framework IMS Global Security Framework v1.1: that document describes the security approaches to be adopted in all IMS specifications.
Transport Security
As the service will be exposing personal data related to students and their grades, it is important that only authorized users have access to that data. Further, data exchanges should be encrypted to ensure that packet sniffing cannot be used to read the data in transit.
All Requests and Responses MUST be sent using Transport Layer Security (TLS). Exchange of the signed certificates for endpoints between clients and servers is beyond the scope of this specification. Implementers of clients and servers are advised to look at the various 3rd party certificate signing services in order to obtain signed certificates.
Support for TLS 1.2 and/or TLS 1.3 is REQUIRED and SSL MUST NOT be used.
Authorization
The use of OAuth 2.0 Client Credentials with the Bearer Token obtained using the mechanism described in The OAuth 2.0 Authorization Framework (Section 4.4) is REQUIRED. Details of this are given in the IMS Security Framework IMS Global Security Framework v1.1.
Authorization will use the OAuth 2.0 Client Credentials Grant mechanism. In this mechanism the client can request an access token using only its client credentials (using the consumer key and secret information) when the client is requesting access to the protected resources under its control, or those of another resource owner that have been previously arranged with the authorization server. In this approach the client issues a client authentication request and receives in response an access token. Issuing of an access token is defined in Section 5 of The OAuth 2.0 Authorization Framework.
The request for an access token, including three scopes (scopename1, scopename2 and scopenamex) takes the form of (this uses TLS):
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&scope=scopename1%20scopename2%20scopenamex
The inclusion of scopes is REQUIRED and the set of scopes available for this service are defined in the following subsection. The authorization encoding is produced using the consumer key and secret. Success results in the granting of the access token with a response of:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token" : "2YotnFZFEjr1zCsicMWpAA",
"token_type" : "bearer",
"expires_in" : 3600,
"scope" : "scopename1 scopename2 scopenamex"
}
The recommended default value for the "expires_in" is 3600s. The authorization server MUST provide the scopes which are made available (either all or a subset of the scopes supplied in the request).
The client utilizes the access token to authenticate with the resource using the HTTP "Authorization" request header field HTTP Authentication: Basic and Digest Access Authentication with an authentication scheme defined by the specification of the access token type used, such as The OAuth 2.0 Authorization Framework: Bearer Token Usage. An example of the use of the bearer token is:
GET /resource/1 HTTP/1.1
Host: provider.example.com
Authorization: Bearer 2YotnFZFEjr1zCsicMWpAA
NOTE: This exchange assumes that TLS is used to secure the link.
Scopes
The set of scopes available in this service are listed in the following Tables.
"https://purl.imsglobal.org/spec/or/v1p2/scope/assessment.createput" Scope
Access to all of the write assessment operations that permit the creation of a new single object in which the 'sourcedId' is supplied. The set of service operations covered by this scope are listed in the Table below.
| Operation | HTTP Verb | Endpoint |
|---|---|---|
| putAssessmentLineItem | PUT | /assessmentLineItems/{sourcedId} |
| putAssessmentResult | PUT | /assessmentResults/{sourcedId} |
"https://purl.imsglobal.org/spec/or/v1p2/scope/assessment.delete" Scope
Access to the set of assessment operations that permit an object to be deleted. The set of service operations covered by this scope are listed in the Table below.
| Operation | HTTP Verb | Endpoint |
|---|---|---|
| deleteAssessmentLineItem | DELETE | /assessmentLineItems/{sourcedId} |
| deleteAssessmentResult | DELETE | /assessmentResults/{sourcedId} |
"https://purl.imsglobal.org/spec/or/v1p2/scope/assessment.readonly" Scope
Access to ALL of the assessment read operations. The set of service operations covered by this scope are listed in the Table below.
| Operation | HTTP Verb | Endpoint |
|---|---|---|
| getAllAssessmentLineItems | GET | /assessmentLineItems |
| getAllAssessmentResults | GET | /assessmentResults |
| getAssessmentLineItem | GET | /assessmentLineItems/{sourcedId} |
| getAssessmentResult | GET | /assessmentResults/{sourcedId} |
Implementation Guide
Relationship to Other IMS Specifications
To be completed in a later version of this Document.
Realizing the Use-cases
To be completed in a later version of this Document.
REST-based Best Practices
To be completed in a later version of this Document.
Integrating with CSV-based Exchange
To be completed in a later version of this Document.
Conformance and Certification
Conformance Testing Process
The process for conformance testing implementations of Assessment Results Management Profile includes the following:
- Go to the IMS Conformance Test Suite for the Assessment Results Management Profile. Conformance Test Suite links are available in the 1EdTech OneRoster/Learning Information Services Alliance and the relevant link details are given in Sections 5.2 Service Provider and 5.3 Consumer certification) of this document;
- Follow the onscreen instructions to run the tests;
- Once the test has been successfully run, submit a print out of the test results along with the following information to conformance@1edtech.org: Your Name Your Organization Your Product Name and Version Date the Product was tested Whether you are a Service/Data Provider or a Service/Data Consumer.
All Tests for the appropriate operational modes must be passed successfully to be considered IMS compliant.
Requirements for Assessment Result Management Profile v1.0 Conformance
All tests must be passed successfully to be considered 1EdTech Assessment Result Management Profile compliant.
Conformance Mark
After you have submitted your successful conformance information to conformance@1edtech.org, and received confirmation and a registration number from 1EdTech you may then apply the appropriate conformance mark. The 1EdTech conformance chart will list your conformance details. If you have any questions, please feel free to contact us at any point.
Membership in the OneRoster/Learning Information Services Alliance is the only way to achieve official conformance to the Assessment Result Management Profile standard. Products without a 1EdTech conformance Registration Number are not considered to be compliant by 1EdTech.
Service Provider Compliance
For service provider conformance the endpoints listed in the Tables below MUST be supported reflecting support for 'pull' (where the consumer reads the data from the provider) and push' (where the provider writes the endpoints into the consumer) modes.
| Service Call | Endpoint | HTTP Verb | Mode |
|---|---|---|---|
| getAllAssessmentLineItems | /assessmentLineItems |
GET | Resp |
| getAssessmentLineItem | /assessmentLineItems/{id} |
GET | Resp |
| getAllAssessmentResults | /assessmentResults |
GET | Resp |
| getAssessmentResult | /assessmentResults/{id} |
GET | Resp |
Support for ANY of the other endpoints and service modes is OPTIONAL. For a 'GET' request a service provider must supply all of the required data fields for the action and may supply any of the optional data fields.
| Service Call | Endpoint | HTTP Verb | Mode |
|---|---|---|---|
| putAssessmentLineItem | /assessmentLineItems/{id} |
PUT | Init |
| putAssessmentResult | /assessmentResults/{id} |
PUT | Init |
Support for ANY of the other endpoints and service modes is OPTIONAL.
Service Consumer Compliance
For service consumer conformance the endpoints listed in the Tables below MUST be supported reflecting support for 'pull' (where the consumer reads the data from the provider) and push' (where the consumer writes the data into the provider) modes.
| Service Call | Endpoint | HTTP Verb | Mode |
|---|---|---|---|
| getAllAssessmentLineItems | /assessmentLineItems |
GET | Init |
| getAllAssessmentResults | /assessmentResults |
GET | Init |
Support for ANY of the other endpoints and service modes is OPTIONAL. For a 'GET' request a service provider must supply all of the required data fields for the action and may supply any of the optional data fields.
| Service Call | Endpoint | HTTP Verb | Mode |
|---|---|---|---|
| putAssessmentLineItem | /assessmentLineItems/{id} |
PUT | Resp |
| putAssessmentResult | /assessmentResults/{id} |
PUT | Resp |
Support for ANY of the other endpoints and service modes is OPTIONAL.
Service Certification
Service Provider Certification
The functional capabilities of such systems are:
- They MUST support the assessment results management profile set of endpoints;
- All of either the pull or the push modes required endpoints MUST be supported;
- Any of the optional endpoints MAY be supported (from both the pull and push modes);
- They MUST supply all of the required data fields;
- They MAY supply any of the optional data fields;
- They MAY provide extension data fields;
- They MUST support the endpoint payload pagination mechanism for all responses that provide a collection in the payload;
- They MUST support the endpoint payload filtering mechanism for all responses that provide a collection in the payload;
- They MUST support the endpoint payload sorting mechanism for all responses that provide a collection in the payload;
- They MUST support the endpoint payload field selection mechanism for all responses that provide a collection or a singleton in the payload;
- They MUST support the OAuth 2.0 Bearer Token authentication mechanism;
- The OpenAPI file that describes the functionality of the available ARP-GS services MUST be published at the endpoint base URL. This MUST be a valid OpenAPI 3.0 JSON file at the URL: "...hostname..."/ims/oneroster/gradebook/v1p2/discovery/assessmentresultv1p0service_openapi3_v1p0.json.
Systems that wish to undertake conformance testing as a Service Provider should use the conformance test system located at: https://www.imsglobal.org/oneroster-conformance-testing.
Service Consumer Certification
The functional capabilities of such systems are:
- They MUST support the assessment results management profile set of endpoints;
- All of either the pull or the push modes required endpoints MUST be supported;
- Any of the optional endpoints MAY be supported (from both the pull and push modes);
- They MUST support all of the required data fields;
- They MAY support any of the optional data fields;
- They MAY process extension data fields;
- They MUST support the endpoint payload pagination mechanism for all requests that provide a collection in the response payload;
- They MUST support the endpoint payload filtering mechanism for all requests that provide a collection in the response payload;
- They MUST support the endpoint payload sorting mechanism for all requests that provide a collection in the response payload;
- They MUST support the endpoint payload field selection mechanism for all requests that provide a collection or a singleton in the response payload;
- They MUST support the OAuth 2.0 Bearer Token authentication mechanism.
Systems that wish to undertake conformance testing as a Service Consumer should use the conformance test system located at: https://www.imsglobal.org/oneroster-conformance-testing.
Comparison of the Certifications
A comparison of the available certifications for the defined OneRoster endpoints is shown in the Table below. The key for this Table is:
- 'C' denotes a service consumer;
- 'P' denotes a service provider;
- 'Init' denotes that the end-system issues the request (a shaded box denotes that support for the endpoint is required for that mode);
- 'Resp' denotes that the end-system responds to the request (a shaded box denotes that support for the endpoint is required for that mode)-
- '-' denotes that the endpoint is not available to that operational mode.
| Service Call | Endpoint | HTTP Verb | Consumer | Provider |
|---|---|---|---|---|
| getAllAssessmentLineItems | /assessmentLineItems | GET | Init(Pull) | Resp(Pull) |
| getAssessmentLineItem | /assessmentLineItems/{id} | GET | Init(Pull) | Resp(Pull) |
| putAssessmentLineItem | /assessmentLineItems/{id} | PUT | Resp(Push) | Init(Push) |
| deleteAssessmentLineItem | /assessmentLineItems/{id} | DELETE | Resp(Push) | Init(Push) |
| getAllAssessmentResults | /assessmentResults | GET | Init(Pull) | Resp(Pull) |
| getAssessmentResult | /assessmentResults/{id} | GET | Init(Pull) | Resp(Pull) |
| putAssessmentResult | /assessmentResults/{id} | PUT | Resp(Push) | Init(Push) |
| deleteAssessmentResult | /assessmentResults/{id} | DELETE | Resp(Push) | Init(Push) |
OpenAPI Listings
Listing of the OpenAPI (JSON) File
OpenAPI 2.0 JSON Listing
The OpenAPI 2 (JSON) listing (based upon OpenAPI Specification (version 2)) is available at: https://purl.imsglobal.org/spec/or/v1p2/schema/openapi/assessmentresultv1p0service_openapi2_v1p0.json.
OpenAPI 3.0 JSON Listing
The OpenAPI 3 (JSON) listing (based upon OpenAPI Specification (version 3)) is available at: https://purl.imsglobal.org/spec/or/v1p2/schema/openapi/assessmentresultv1p0service_openapi3_v1p0.json.
Listing of the OpenAPI (YAML) File
OpenAPI 2.0 YAML Listing
The OpenAPI 2 (YAML) listing (based upon OpenAPI Specification (version 2)) is available at: https://purl.imsglobal.org/spec/or/v1p2/schema/openapi/assessmentresultv1p0service_openapi2_v1p0.yaml.
OpenAPI 3.0 YAML Listing
The OpenAPI 3 (YAML) listing (based upon OpenAPI Specification (version 3)) is available at: https://purl.imsglobal.org/spec/or/v1p2/schema/openapi/assessmentresultv1p0service_openapi3_v1p0.yaml.
JSON Schema Listings
JSON Schemas for Assessment Result Profile of the Gradebook Service
The Assessment Result Profile provides the exchange of detailed results arranged as a set of lineItems. This profile is derived from the OneRoster (OR) 1.2 Gradebook Service. The OR Gradebook service enables the exchange of K-12 oriented gradebook data. The service provides a number of operations, collected as several endpoints, primarily based upon read, create and delete of the first class objects.
AcadSessionGUIDRef
This is the container for reference to a OneRoster 'Academic Session' object that has an allocated sourcedId (GUID).
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_acadsessionguidref-jsonschema1.json",
"title": "JSON Schema for the AcadSessionGUIDRef class.",
"description": "This is the container for reference to a OneRoster 'Academic Session' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. an 'academicSession'.",
"$comment": "Origin: AcadSessionGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'Academic Session'. ",
"type": "string",
"enum": [
"academicSession"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
AcadSessionGUIDRefTypeEnum
This is the fixed enumeration for a GUIDRef that points to an 'Academic Session'.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_acadsessionguidreftypeenum-jsonschema1.json",
"title": "JSON Schema for the AcadSessionGUIDRefTypeEnum class.",
"description": "This is the fixed enumeration for a GUIDRef that points to an 'Academic Session'. ",
"type": "object",
"properties": {
"academicSession": {
"description": "An object that is an 'Academic Session'.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"academicSession"
],
"additionalProperties": false
}
AssessmentLineItem
This is the container for the definition of an assessment lineItem. An assessment lineItem is a collection of results for a set of students who are completing an assignment.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_assessmentlineitem-jsonschema1.json",
"title": "JSON Schema for the AssessmentLineItem class.",
"description": "This is the container for the definition of an assessment lineItem. An assessment lineItem is a collection of results for a set of students who are completing an assignment.",
"type": "object",
"properties": {
"title": {
"description": "The title, human readable, for the assessment lineItem. This should allow the assessment lineItem to be distinguished from its peer assessment lineItems.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
},
"description": {
"description": "A human readable description of the usage of the assessment lineItem.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"class": {
"$ref": "#/$defs/ClassGUIDRef"
},
"parentAssessmentLineItem": {
"$ref": "#/$defs/AssessmentLineItemGUIDRef"
},
"scoreScale": {
"$ref": "#/$defs/ScoreScaleGUIDRef"
},
"resultValueMin": {
"description": "The minimum value (numeric) that can be assigned to the score attribute in a result. The score scale mapping should be used to map to other scores.",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"resultValueMax": {
"description": "The maximum value (numeric) that can be assigned to the score attribute in a result. The score scale mapping should be used to map to other scores.",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"learningObjectiveSet": {
"type": "array",
"items": {
"$ref": "#/$defs/LearningObjectiveSet"
}
},
"sourcedId": {
"description": "The sourcedId of the object. All objects MUST be identified by a Source Identifier. This is a GUID System ID for an object. This is the GUID that SYSTEMS will refer to when making API calls, or when needing to identify an object. It is RECOMMENDED that systems are able to map whichever local ids (e.g. database key fields) they use to SourcedId. The sourcedId of an object is considered an addressable property of an entity and as such will not be treated as Personally Identifiable Information (PII) by certified products. Therefore, as a part of certification, vendors will be required to declare that they will notify customers via documentation or other formal and documented agreement that sourcedIds should never contain PII in general, but particularly users. This means that if a customer includes a student name in an enrollment.sourcedId, it will not fall to any certified product to protect the enrollment.sourcedId as PII, or even the userSourcedId field in the enrollment record.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
},
"status": {
"description": "All objects MUST BE either 'active' or 'tobedeleted'. Something 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 under any compulsion to do so. In v1.1 the enumeration value of 'inactive' was removed and so for backwards compatibility all such marked objects should be interpreted as 'tobedeleted'.",
"$comment": "Origin: BaseStatusEnum (Enumeration); The set of permitted values for the type of status of a record. ",
"type": "string",
"enum": [
"active",
"tobedeleted"
]
},
"dateLastModified": {
"description": "All objects MUST be annotated with the dateTime upon which they were last modified. This enables requesters to query for just the latest objects. DateTimes MUST be expressed in W3C profile of [ISO 8601] and MUST contain the UTC timezone.",
"$comment": "Origin: DateTime (PrimitiveType)",
"type": "string",
"format": "date-time"
},
"metadata": {
"$ref": "#/$defs/Metadata"
}
},
"required": [
"title",
"sourcedId",
"status",
"dateLastModified"
],
"additionalProperties": false,
"$defs": {
"AssessmentLineItemGUIDRef": {
"description": "This is the container for reference to a OneRoster 'AssessmentLineItem' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. an 'assessmentLineItem'.",
"$comment": "Origin: AssessmentLineItemGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'AssessmentLineItem'. ",
"type": "string",
"enum": [
"assessmentLineItem"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
},
"LearningObjectiveSet": {
"description": "This is the container for the set of learning objective identifiers that are from a single source responsible for creating those identifiers.",
"type": "object",
"properties": {
"source": {
"description": "The source responsible for creating the learning objective identifiers. The permitted values are from an extensible vocabulary.",
"$comment": "Origin: SourceExtEnum (Union); This is an extensible vocabulary data-type for the source creating the learning objective identifiers.",
"oneOf": [
{
"type": "string",
"enum": [
"case",
"unknown"
]
},
{
"type": "string",
"pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
}
]
},
"learningObjectiveIds": {
"type": "array",
"minItems": 1,
"items": {
"description": "The set of unique identifiers for the associated learning objectives. If these are CASE identifiers they MUST be valid UUIDs.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
}
}
},
"required": [
"source",
"learningObjectiveIds"
],
"additionalProperties": false
},
"ClassGUIDRef": {
"description": "This is the container for reference to a OneRoster 'Class' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'class'.",
"$comment": "Origin: ClassGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'Class'. ",
"type": "string",
"enum": [
"class"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
},
"Metadata": {
"description": "The container for the proprietary extensions.",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"ScoreScaleGUIDRef": {
"description": "This is the container for reference to a OneRoster 'ScoreScale' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'scoreScale'.",
"$comment": "Origin: ScoreScaleGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'ScoreScale'. ",
"type": "string",
"enum": [
"scoreScale"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
}
}
AssessmentLineItemGUIDRef
This is the container for reference to a OneRoster 'AssessmentLineItem' object that has an allocated sourcedId (GUID).
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_assessmentlineitemguidref-jsonschema1.json",
"title": "JSON Schema for the AssessmentLineItemGUIDRef class.",
"description": "This is the container for reference to a OneRoster 'AssessmentLineItem' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. an 'assessmentLineItem'.",
"$comment": "Origin: AssessmentLineItemGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'AssessmentLineItem'. ",
"type": "string",
"enum": [
"assessmentLineItem"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
AssessmentLineItemGUIDRefTypeEnum
This is the fixed enumeration for a GUIDRef that points to an 'AssessmentLineItem'.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_assessmentlineitemguidreftypeenum-jsonschema1.json",
"title": "JSON Schema for the AssessmentLineItemGUIDRefTypeEnum class.",
"description": "This is the fixed enumeration for a GUIDRef that points to an 'AssessmentLineItem'. ",
"type": "object",
"properties": {
"assessmentLineItem": {
"description": "An object that is an 'AssessmentLineItem'. ",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"assessmentLineItem"
],
"additionalProperties": false
}
AssessmentLineItemSet
This is the container for a collection of assessment lineItem instances for a message payload. This may be empty if no instances are found that sustain the applied query constraints. The order is not significant.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_assessmentlineitemset-jsonschema1.json",
"title": "JSON Schema for the AssessmentLineItemSet class.",
"description": "This is the container for a collection of assessment lineItem instances for a message payload. This may be empty if no instances are found that sustain the applied query constraints. The order is not significant.",
"type": "object",
"properties": {
"assessmentLineItems": {
"type": "array",
"items": {
"$ref": "#/$defs/AssessmentLineItem"
}
}
},
"required": [],
"additionalProperties": false,
"$defs": {
"AssessmentLineItem": {
"description": "This is the container for the definition of an assessment lineItem. An assessment lineItem is a collection of results for a set of students who are completing an assignment.",
"type": "object",
"properties": {
"title": {
"description": "The title, human readable, for the assessment lineItem. This should allow the assessment lineItem to be distinguished from its peer assessment lineItems.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
},
"description": {
"description": "A human readable description of the usage of the assessment lineItem.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"class": {
"$ref": "#/$defs/ClassGUIDRef"
},
"parentAssessmentLineItem": {
"$ref": "#/$defs/AssessmentLineItemGUIDRef"
},
"scoreScale": {
"$ref": "#/$defs/ScoreScaleGUIDRef"
},
"resultValueMin": {
"description": "The minimum value (numeric) that can be assigned to the score attribute in a result. The score scale mapping should be used to map to other scores.",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"resultValueMax": {
"description": "The maximum value (numeric) that can be assigned to the score attribute in a result. The score scale mapping should be used to map to other scores.",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"learningObjectiveSet": {
"type": "array",
"items": {
"$ref": "#/$defs/LearningObjectiveSet"
}
},
"sourcedId": {
"description": "The sourcedId of the object. All objects MUST be identified by a Source Identifier. This is a GUID System ID for an object. This is the GUID that SYSTEMS will refer to when making API calls, or when needing to identify an object. It is RECOMMENDED that systems are able to map whichever local ids (e.g. database key fields) they use to SourcedId. The sourcedId of an object is considered an addressable property of an entity and as such will not be treated as Personally Identifiable Information (PII) by certified products. Therefore, as a part of certification, vendors will be required to declare that they will notify customers via documentation or other formal and documented agreement that sourcedIds should never contain PII in general, but particularly users. This means that if a customer includes a student name in an enrollment.sourcedId, it will not fall to any certified product to protect the enrollment.sourcedId as PII, or even the userSourcedId field in the enrollment record.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
},
"status": {
"description": "All objects MUST BE either 'active' or 'tobedeleted'. Something 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 under any compulsion to do so. In v1.1 the enumeration value of 'inactive' was removed and so for backwards compatibility all such marked objects should be interpreted as 'tobedeleted'.",
"$comment": "Origin: BaseStatusEnum (Enumeration); The set of permitted values for the type of status of a record. ",
"type": "string",
"enum": [
"active",
"tobedeleted"
]
},
"dateLastModified": {
"description": "All objects MUST be annotated with the dateTime upon which they were last modified. This enables requesters to query for just the latest objects. DateTimes MUST be expressed in W3C profile of [ISO 8601] and MUST contain the UTC timezone.",
"$comment": "Origin: DateTime (PrimitiveType)",
"type": "string",
"format": "date-time"
},
"metadata": {
"$ref": "#/$defs/Metadata"
}
},
"required": [
"title",
"sourcedId",
"status",
"dateLastModified"
],
"additionalProperties": false
},
"AssessmentLineItemGUIDRef": {
"description": "This is the container for reference to a OneRoster 'AssessmentLineItem' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. an 'assessmentLineItem'.",
"$comment": "Origin: AssessmentLineItemGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'AssessmentLineItem'. ",
"type": "string",
"enum": [
"assessmentLineItem"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
},
"LearningObjectiveSet": {
"description": "This is the container for the set of learning objective identifiers that are from a single source responsible for creating those identifiers.",
"type": "object",
"properties": {
"source": {
"description": "The source responsible for creating the learning objective identifiers. The permitted values are from an extensible vocabulary.",
"$comment": "Origin: SourceExtEnum (Union); This is an extensible vocabulary data-type for the source creating the learning objective identifiers.",
"oneOf": [
{
"type": "string",
"enum": [
"case",
"unknown"
]
},
{
"type": "string",
"pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
}
]
},
"learningObjectiveIds": {
"type": "array",
"minItems": 1,
"items": {
"description": "The set of unique identifiers for the associated learning objectives. If these are CASE identifiers they MUST be valid UUIDs.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
}
}
},
"required": [
"source",
"learningObjectiveIds"
],
"additionalProperties": false
},
"ClassGUIDRef": {
"description": "This is the container for reference to a OneRoster 'Class' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'class'.",
"$comment": "Origin: ClassGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'Class'. ",
"type": "string",
"enum": [
"class"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
},
"Metadata": {
"description": "The container for the proprietary extensions.",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"ScoreScaleGUIDRef": {
"description": "This is the container for reference to a OneRoster 'ScoreScale' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'scoreScale'.",
"$comment": "Origin: ScoreScaleGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'ScoreScale'. ",
"type": "string",
"enum": [
"scoreScale"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
}
}
AssessmentResult
This is the container for the AssessmentResult record. An assessment result consists of the assigned score plus the context for that score.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_assessmentresult-jsonschema1.json",
"title": "JSON Schema for the AssessmentResult class.",
"description": "This is the container for the AssessmentResult record. An assessment result consists of the assigned score plus the context for that score.",
"type": "object",
"properties": {
"assessmentLineItem": {
"$ref": "#/$defs/AssessmentLineItemGUIDRef"
},
"student": {
"$ref": "#/$defs/UserGUIDRef"
},
"score": {
"description": "The score for the result. If a scoreScale is assigned then the value must align with the scale.",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"textScore": {
"description": "An optional non-numeric score value. If a scoreScale is assigned then the value must align with the scale.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
},
"scoreDate": {
"description": "The date at which the score is assigned or there is an update to the result e.g. change in the 'scoreStatus'.. The format is YYYY-MM-DD as defined in [ISO 8601].",
"$comment": "Origin: Date (PrimitiveType)",
"type": "string",
"format": "date"
},
"scoreScale": {
"$ref": "#/$defs/ScoreScaleGUIDRef"
},
"scorePercentile": {
"description": "The percentile rank of a score is the percentage of scores in its frequency distribution that are equal to or lower than it.",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"scoreStatus": {
"description": "The status of the score. The value is from an extensible enumerated vocabulary.",
"$comment": "Origin: ScoreStatusExtEnum (Union); This is an extensible vocabulary data-type for the status of the score being submitted.",
"oneOf": [
{
"type": "string",
"enum": [
"exempt",
"fully graded",
"not submitted",
"partially graded",
"submitted"
]
},
{
"type": "string",
"pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
}
]
},
"comment": {
"description": "A human readable comment about the score.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"learningObjectiveSet": {
"type": "array",
"items": {
"$ref": "#/$defs/LearningObjectiveScoreSet"
}
},
"inProgress": {
"description": "This is used to indicate that the associated work activity has been assigned and student's work product is not yet expected to have been submitted.",
"$comment": "Origin: BooleanTrueFalseEnum (Enumeration); This enumeration is used to limit the permitted tokens for a Boolean data-type to values of 'true' or 'false' ONLY.",
"type": "string",
"enum": [
"true",
"false"
]
},
"incomplete": {
"description": "This is used to indicate that the student's work product has been submitted but it is deemed incomplete by the teacher.",
"$comment": "Origin: BooleanTrueFalseEnum (Enumeration); This enumeration is used to limit the permitted tokens for a Boolean data-type to values of 'true' or 'false' ONLY.",
"type": "string",
"enum": [
"true",
"false"
]
},
"late": {
"description": "This is used to indicate that the student's work product is either past due or it has been submitted past the due date. The score on this result may be impacted as as result of this flag.",
"$comment": "Origin: BooleanTrueFalseEnum (Enumeration); This enumeration is used to limit the permitted tokens for a Boolean data-type to values of 'true' or 'false' ONLY.",
"type": "string",
"enum": [
"true",
"false"
]
},
"missing": {
"description": "This is used to indicate that the student's work product as not been submitted.",
"$comment": "Origin: BooleanTrueFalseEnum (Enumeration); This enumeration is used to limit the permitted tokens for a Boolean data-type to values of 'true' or 'false' ONLY.",
"type": "string",
"enum": [
"true",
"false"
]
},
"sourcedId": {
"description": "The sourcedId of the object. All objects MUST be identified by a Source Identifier. This is a GUID System ID for an object. This is the GUID that SYSTEMS will refer to when making API calls, or when needing to identify an object. It is RECOMMENDED that systems are able to map whichever local ids (e.g. database key fields) they use to SourcedId. The sourcedId of an object is considered an addressable property of an entity and as such will not be treated as Personally Identifiable Information (PII) by certified products. Therefore, as a part of certification, vendors will be required to declare that they will notify customers via documentation or other formal and documented agreement that sourcedIds should never contain PII in general, but particularly users. This means that if a customer includes a student name in an enrollment.sourcedId, it will not fall to any certified product to protect the enrollment.sourcedId as PII, or even the userSourcedId field in the enrollment record.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
},
"status": {
"description": "All objects MUST BE either 'active' or 'tobedeleted'. Something 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 under any compulsion to do so. In v1.1 the enumeration value of 'inactive' was removed and so for backwards compatibility all such marked objects should be interpreted as 'tobedeleted'.",
"$comment": "Origin: BaseStatusEnum (Enumeration); The set of permitted values for the type of status of a record. ",
"type": "string",
"enum": [
"active",
"tobedeleted"
]
},
"dateLastModified": {
"description": "All objects MUST be annotated with the dateTime upon which they were last modified. This enables requesters to query for just the latest objects. DateTimes MUST be expressed in W3C profile of [ISO 8601] and MUST contain the UTC timezone.",
"$comment": "Origin: DateTime (PrimitiveType)",
"type": "string",
"format": "date-time"
},
"metadata": {
"$ref": "#/$defs/Metadata"
}
},
"required": [
"assessmentLineItem",
"student",
"scoreDate",
"scoreStatus",
"sourcedId",
"status",
"dateLastModified"
],
"additionalProperties": false,
"$defs": {
"AssessmentLineItemGUIDRef": {
"description": "This is the container for reference to a OneRoster 'AssessmentLineItem' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. an 'assessmentLineItem'.",
"$comment": "Origin: AssessmentLineItemGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'AssessmentLineItem'. ",
"type": "string",
"enum": [
"assessmentLineItem"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
},
"LearningObjectiveScoreSet": {
"description": "This is the container for the set of learning objective identifiers that are from a single source responsible for creating those identifiers. This also allows a mastery score to be aligned with a learning objective.",
"type": "object",
"properties": {
"source": {
"description": "The source responsible for creating the learning objective identifiers. The permitted values are from an extensible vocabulary.",
"$comment": "Origin: SourceExtEnum (Union); This is an extensible vocabulary data-type for the source creating the learning objective identifiers.",
"oneOf": [
{
"type": "string",
"enum": [
"case",
"unknown"
]
},
{
"type": "string",
"pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
}
]
},
"learningObjectiveResults": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/LearningObjectiveResults"
}
}
},
"required": [
"source",
"learningObjectiveResults"
],
"additionalProperties": false
},
"LearningObjectiveResults": {
"description": "This is the container for a learning objective identifier. This also allows a mastery score to be aligned with the learning objective.",
"type": "object",
"properties": {
"learningObjectiveId": {
"description": "The unique identifier for the associated learning objective. If this is a CASE identifier it MUST be a valid UUID.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
},
"score": {
"description": "The optional mastery score supplied as a numeric value. ",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"textScore": {
"description": "The optional mastery score supplied in a non-numeric form. ",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
}
},
"required": [
"learningObjectiveId"
],
"additionalProperties": false
},
"Metadata": {
"description": "The container for the proprietary extensions.",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"UserGUIDRef": {
"description": "This is the container for reference to a OneRoster 'User' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'user'.",
"$comment": "Origin: UserGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'User'. ",
"type": "string",
"enum": [
"user"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
},
"ScoreScaleGUIDRef": {
"description": "This is the container for reference to a OneRoster 'ScoreScale' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'scoreScale'.",
"$comment": "Origin: ScoreScaleGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'ScoreScale'. ",
"type": "string",
"enum": [
"scoreScale"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
}
}
AssessmentResultSet
This is the container for a collection of assessment result instances for a message payload. This may be empty if no instances are found that sustain the applied query constraints. The order is not significant.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_assessmentresultset-jsonschema1.json",
"title": "JSON Schema for the AssessmentResultSet class.",
"description": "This is the container for a collection of assessment result instances for a message payload. This may be empty if no instances are found that sustain the applied query constraints. The order is not significant.",
"type": "object",
"properties": {
"assessmentResults": {
"type": "array",
"items": {
"$ref": "#/$defs/AssessmentResult"
}
}
},
"required": [],
"additionalProperties": false,
"$defs": {
"AssessmentResult": {
"description": "This is the container for the AssessmentResult record. An assessment result consists of the assigned score plus the context for that score.",
"type": "object",
"properties": {
"assessmentLineItem": {
"$ref": "#/$defs/AssessmentLineItemGUIDRef"
},
"student": {
"$ref": "#/$defs/UserGUIDRef"
},
"score": {
"description": "The score for the result. If a scoreScale is assigned then the value must align with the scale.",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"textScore": {
"description": "An optional non-numeric score value. If a scoreScale is assigned then the value must align with the scale.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
},
"scoreDate": {
"description": "The date at which the score is assigned or there is an update to the result e.g. change in the 'scoreStatus'.. The format is YYYY-MM-DD as defined in [ISO 8601].",
"$comment": "Origin: Date (PrimitiveType)",
"type": "string",
"format": "date"
},
"scoreScale": {
"$ref": "#/$defs/ScoreScaleGUIDRef"
},
"scorePercentile": {
"description": "The percentile rank of a score is the percentage of scores in its frequency distribution that are equal to or lower than it.",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"scoreStatus": {
"description": "The status of the score. The value is from an extensible enumerated vocabulary.",
"$comment": "Origin: ScoreStatusExtEnum (Union); This is an extensible vocabulary data-type for the status of the score being submitted.",
"oneOf": [
{
"type": "string",
"enum": [
"exempt",
"fully graded",
"not submitted",
"partially graded",
"submitted"
]
},
{
"type": "string",
"pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
}
]
},
"comment": {
"description": "A human readable comment about the score.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"learningObjectiveSet": {
"type": "array",
"items": {
"$ref": "#/$defs/LearningObjectiveScoreSet"
}
},
"inProgress": {
"description": "This is used to indicate that the associated work activity has been assigned and student's work product is not yet expected to have been submitted.",
"$comment": "Origin: BooleanTrueFalseEnum (Enumeration); This enumeration is used to limit the permitted tokens for a Boolean data-type to values of 'true' or 'false' ONLY.",
"type": "string",
"enum": [
"true",
"false"
]
},
"incomplete": {
"description": "This is used to indicate that the student's work product has been submitted but it is deemed incomplete by the teacher.",
"$comment": "Origin: BooleanTrueFalseEnum (Enumeration); This enumeration is used to limit the permitted tokens for a Boolean data-type to values of 'true' or 'false' ONLY.",
"type": "string",
"enum": [
"true",
"false"
]
},
"late": {
"description": "This is used to indicate that the student's work product is either past due or it has been submitted past the due date. The score on this result may be impacted as as result of this flag.",
"$comment": "Origin: BooleanTrueFalseEnum (Enumeration); This enumeration is used to limit the permitted tokens for a Boolean data-type to values of 'true' or 'false' ONLY.",
"type": "string",
"enum": [
"true",
"false"
]
},
"missing": {
"description": "This is used to indicate that the student's work product as not been submitted.",
"$comment": "Origin: BooleanTrueFalseEnum (Enumeration); This enumeration is used to limit the permitted tokens for a Boolean data-type to values of 'true' or 'false' ONLY.",
"type": "string",
"enum": [
"true",
"false"
]
},
"sourcedId": {
"description": "The sourcedId of the object. All objects MUST be identified by a Source Identifier. This is a GUID System ID for an object. This is the GUID that SYSTEMS will refer to when making API calls, or when needing to identify an object. It is RECOMMENDED that systems are able to map whichever local ids (e.g. database key fields) they use to SourcedId. The sourcedId of an object is considered an addressable property of an entity and as such will not be treated as Personally Identifiable Information (PII) by certified products. Therefore, as a part of certification, vendors will be required to declare that they will notify customers via documentation or other formal and documented agreement that sourcedIds should never contain PII in general, but particularly users. This means that if a customer includes a student name in an enrollment.sourcedId, it will not fall to any certified product to protect the enrollment.sourcedId as PII, or even the userSourcedId field in the enrollment record.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
},
"status": {
"description": "All objects MUST BE either 'active' or 'tobedeleted'. Something 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 under any compulsion to do so. In v1.1 the enumeration value of 'inactive' was removed and so for backwards compatibility all such marked objects should be interpreted as 'tobedeleted'.",
"$comment": "Origin: BaseStatusEnum (Enumeration); The set of permitted values for the type of status of a record. ",
"type": "string",
"enum": [
"active",
"tobedeleted"
]
},
"dateLastModified": {
"description": "All objects MUST be annotated with the dateTime upon which they were last modified. This enables requesters to query for just the latest objects. DateTimes MUST be expressed in W3C profile of [ISO 8601] and MUST contain the UTC timezone.",
"$comment": "Origin: DateTime (PrimitiveType)",
"type": "string",
"format": "date-time"
},
"metadata": {
"$ref": "#/$defs/Metadata"
}
},
"required": [
"assessmentLineItem",
"student",
"scoreDate",
"scoreStatus",
"sourcedId",
"status",
"dateLastModified"
],
"additionalProperties": false
},
"AssessmentLineItemGUIDRef": {
"description": "This is the container for reference to a OneRoster 'AssessmentLineItem' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. an 'assessmentLineItem'.",
"$comment": "Origin: AssessmentLineItemGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'AssessmentLineItem'. ",
"type": "string",
"enum": [
"assessmentLineItem"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
},
"LearningObjectiveScoreSet": {
"description": "This is the container for the set of learning objective identifiers that are from a single source responsible for creating those identifiers. This also allows a mastery score to be aligned with a learning objective.",
"type": "object",
"properties": {
"source": {
"description": "The source responsible for creating the learning objective identifiers. The permitted values are from an extensible vocabulary.",
"$comment": "Origin: SourceExtEnum (Union); This is an extensible vocabulary data-type for the source creating the learning objective identifiers.",
"oneOf": [
{
"type": "string",
"enum": [
"case",
"unknown"
]
},
{
"type": "string",
"pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
}
]
},
"learningObjectiveResults": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/LearningObjectiveResults"
}
}
},
"required": [
"source",
"learningObjectiveResults"
],
"additionalProperties": false
},
"LearningObjectiveResults": {
"description": "This is the container for a learning objective identifier. This also allows a mastery score to be aligned with the learning objective.",
"type": "object",
"properties": {
"learningObjectiveId": {
"description": "The unique identifier for the associated learning objective. If this is a CASE identifier it MUST be a valid UUID.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
},
"score": {
"description": "The optional mastery score supplied as a numeric value. ",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"textScore": {
"description": "The optional mastery score supplied in a non-numeric form. ",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
}
},
"required": [
"learningObjectiveId"
],
"additionalProperties": false
},
"Metadata": {
"description": "The container for the proprietary extensions.",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"UserGUIDRef": {
"description": "This is the container for reference to a OneRoster 'User' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'user'.",
"$comment": "Origin: UserGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'User'. ",
"type": "string",
"enum": [
"user"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
},
"ScoreScaleGUIDRef": {
"description": "This is the container for reference to a OneRoster 'ScoreScale' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'scoreScale'.",
"$comment": "Origin: ScoreScaleGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'ScoreScale'. ",
"type": "string",
"enum": [
"scoreScale"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
}
}
Base
This is the container for the set of common attributes that are available to all of the first class data structures.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_base-jsonschema1.json",
"title": "JSON Schema for the Base class.",
"description": "This is the container for the set of common attributes that are available to all of the first class data structures.",
"type": "object",
"properties": {
"sourcedId": {
"description": "The sourcedId of the object. All objects MUST be identified by a Source Identifier. This is a GUID System ID for an object. This is the GUID that SYSTEMS will refer to when making API calls, or when needing to identify an object. It is RECOMMENDED that systems are able to map whichever local ids (e.g. database key fields) they use to SourcedId. The sourcedId of an object is considered an addressable property of an entity and as such will not be treated as Personally Identifiable Information (PII) by certified products. Therefore, as a part of certification, vendors will be required to declare that they will notify customers via documentation or other formal and documented agreement that sourcedIds should never contain PII in general, but particularly users. This means that if a customer includes a student name in an enrollment.sourcedId, it will not fall to any certified product to protect the enrollment.sourcedId as PII, or even the userSourcedId field in the enrollment record.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
},
"status": {
"description": "All objects MUST BE either 'active' or 'tobedeleted'. Something 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 under any compulsion to do so. In v1.1 the enumeration value of 'inactive' was removed and so for backwards compatibility all such marked objects should be interpreted as 'tobedeleted'.",
"$comment": "Origin: BaseStatusEnum (Enumeration); The set of permitted values for the type of status of a record. ",
"type": "string",
"enum": [
"active",
"tobedeleted"
]
},
"dateLastModified": {
"description": "All objects MUST be annotated with the dateTime upon which they were last modified. This enables requesters to query for just the latest objects. DateTimes MUST be expressed in W3C profile of [ISO 8601] and MUST contain the UTC timezone.",
"$comment": "Origin: DateTime (PrimitiveType)",
"type": "string",
"format": "date-time"
},
"metadata": {
"$ref": "#/$defs/Metadata"
}
},
"required": [
"sourcedId",
"status",
"dateLastModified"
],
"additionalProperties": false,
"$defs": {
"Metadata": {
"description": "The container for the proprietary extensions.",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
}
}
BaseStatusEnum
The set of permitted values for the type of status of a record.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_basestatusenum-jsonschema1.json",
"title": "JSON Schema for the BaseStatusEnum class.",
"description": "The set of permitted values for the type of status of a record. ",
"type": "object",
"properties": {
"active": {
"description": "An active record.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"tobedeleted": {
"description": "Denotes that it is safe to delete the record.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"active",
"tobedeleted"
],
"additionalProperties": false
}
BooleanTrueFalseEnum
This enumeration is used to limit the permitted tokens for a Boolean data-type to values of 'true' or 'false' ONLY.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_booleantruefalseenum-jsonschema1.json",
"title": "JSON Schema for the BooleanTrueFalseEnum class.",
"description": "This enumeration is used to limit the permitted tokens for a Boolean data-type to values of 'true' or 'false' ONLY.",
"type": "object",
"properties": {
"true": {
"description": "Requires the boolean value to be given as 'true'.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"false": {
"description": "Requires the boolean value to be given as 'false'.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"true",
"false"
],
"additionalProperties": false
}
CategoryGUIDRef
This is the container for reference to a OneRoster 'Category' object that has an allocated sourcedId (GUID).
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_categoryguidref-jsonschema1.json",
"title": "JSON Schema for the CategoryGUIDRef class.",
"description": "This is the container for reference to a OneRoster 'Category' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'category'.",
"$comment": "Origin: CategoryGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'Category'. ",
"type": "string",
"enum": [
"category"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
CategoryGUIDRefTypeEnum
This is the fixed enumeration for a GUIDRef that points to an 'Category'.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_categoryguidreftypeenum-jsonschema1.json",
"title": "JSON Schema for the CategoryGUIDRefTypeEnum class.",
"description": "This is the fixed enumeration for a GUIDRef that points to an 'Category'. ",
"type": "object",
"properties": {
"category": {
"description": "An object that is an 'Category'. ",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"category"
],
"additionalProperties": false
}
ClassGUIDRef
This is the container for reference to a OneRoster 'Class' object that has an allocated sourcedId (GUID).
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_classguidref-jsonschema1.json",
"title": "JSON Schema for the ClassGUIDRef class.",
"description": "This is the container for reference to a OneRoster 'Class' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'class'.",
"$comment": "Origin: ClassGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'Class'. ",
"type": "string",
"enum": [
"class"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
ClassGUIDRefTypeEnum
This is the fixed enumeration for a GUIDRef that points to an 'Class'.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_classguidreftypeenum-jsonschema1.json",
"title": "JSON Schema for the ClassGUIDRefTypeEnum class.",
"description": "This is the fixed enumeration for a GUIDRef that points to an 'Class'. ",
"type": "object",
"properties": {
"class": {
"description": "An object that is an 'Class'. ",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"class"
],
"additionalProperties": false
}
CourseGUIDRef
This is the container for reference to a OneRoster 'Course' object that has an allocated sourcedId (GUID).
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_courseguidref-jsonschema1.json",
"title": "JSON Schema for the CourseGUIDRef class.",
"description": "This is the container for reference to a OneRoster 'Course' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'course'.",
"$comment": "Origin: CourseGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'Course'. ",
"type": "string",
"enum": [
"course"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
CourseGUIDRefTypeEnum
This is the fixed enumeration for a GUIDRef that points to an 'Course'.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_courseguidreftypeenum-jsonschema1.json",
"title": "JSON Schema for the CourseGUIDRefTypeEnum class.",
"description": "This is the fixed enumeration for a GUIDRef that points to an 'Course'. ",
"type": "object",
"properties": {
"course": {
"description": "An object that is an 'Course'. ",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"course"
],
"additionalProperties": false
}
GUIDRef
This is the container for reference to a OneRoster object that has a sourcedId (GUID).
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_guidref-jsonschema1.json",
"title": "JSON Schema for the GUIDRef class.",
"description": "This is the container for reference to a OneRoster object that has a sourcedId (GUID).",
"type": "object",
"properties": {
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"href",
"sourcedId"
],
"additionalProperties": false
}
LearningObjectiveResults
This is the container for a learning objective identifier. This also allows a mastery score to be aligned with the learning objective.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_learningobjectiveresults-jsonschema1.json",
"title": "JSON Schema for the LearningObjectiveResults class.",
"description": "This is the container for a learning objective identifier. This also allows a mastery score to be aligned with the learning objective.",
"type": "object",
"properties": {
"learningObjectiveId": {
"description": "The unique identifier for the associated learning objective. If this is a CASE identifier it MUST be a valid UUID.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
},
"score": {
"description": "The optional mastery score supplied as a numeric value. ",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"textScore": {
"description": "The optional mastery score supplied in a non-numeric form. ",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
}
},
"required": [
"learningObjectiveId"
],
"additionalProperties": false
}
LearningObjectiveScoreSet
This is the container for the set of learning objective identifiers that are from a single source responsible for creating those identifiers. This also allows a mastery score to be aligned with a learning objective.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_learningobjectivescoreset-jsonschema1.json",
"title": "JSON Schema for the LearningObjectiveScoreSet class.",
"description": "This is the container for the set of learning objective identifiers that are from a single source responsible for creating those identifiers. This also allows a mastery score to be aligned with a learning objective.",
"type": "object",
"properties": {
"source": {
"description": "The source responsible for creating the learning objective identifiers. The permitted values are from an extensible vocabulary.",
"$comment": "Origin: SourceExtEnum (Union); This is an extensible vocabulary data-type for the source creating the learning objective identifiers.",
"oneOf": [
{
"type": "string",
"enum": [
"case",
"unknown"
]
},
{
"type": "string",
"pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
}
]
},
"learningObjectiveResults": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/LearningObjectiveResults"
}
}
},
"required": [
"source",
"learningObjectiveResults"
],
"additionalProperties": false,
"$defs": {
"LearningObjectiveResults": {
"description": "This is the container for a learning objective identifier. This also allows a mastery score to be aligned with the learning objective.",
"type": "object",
"properties": {
"learningObjectiveId": {
"description": "The unique identifier for the associated learning objective. If this is a CASE identifier it MUST be a valid UUID.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
},
"score": {
"description": "The optional mastery score supplied as a numeric value. ",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"textScore": {
"description": "The optional mastery score supplied in a non-numeric form. ",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
}
},
"required": [
"learningObjectiveId"
],
"additionalProperties": false
}
}
}
LearningObjectiveSet
This is the container for the set of learning objective identifiers that are from a single source responsible for creating those identifiers.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_learningobjectiveset-jsonschema1.json",
"title": "JSON Schema for the LearningObjectiveSet class.",
"description": "This is the container for the set of learning objective identifiers that are from a single source responsible for creating those identifiers.",
"type": "object",
"properties": {
"source": {
"description": "The source responsible for creating the learning objective identifiers. The permitted values are from an extensible vocabulary.",
"$comment": "Origin: SourceExtEnum (Union); This is an extensible vocabulary data-type for the source creating the learning objective identifiers.",
"oneOf": [
{
"type": "string",
"enum": [
"case",
"unknown"
]
},
{
"type": "string",
"pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
}
]
},
"learningObjectiveIds": {
"type": "array",
"minItems": 1,
"items": {
"description": "The set of unique identifiers for the associated learning objectives. If these are CASE identifiers they MUST be valid UUIDs.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
}
}
},
"required": [
"source",
"learningObjectiveIds"
],
"additionalProperties": false
}
LineItemGUIDRef
This is the container for reference to a OneRoster 'LineItem' object that has an allocated sourcedId (GUID).
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_lineitemguidref-jsonschema1.json",
"title": "JSON Schema for the LineItemGUIDRef class.",
"description": "This is the container for reference to a OneRoster 'LineItem' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'lineItem'.",
"$comment": "Origin: LineItemGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'LineItem'. ",
"type": "string",
"enum": [
"lineItem"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
LineItemGUIDRefTypeEnum
This is the fixed enumeration for a GUIDRef that points to an 'LineItem'.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_lineitemguidreftypeenum-jsonschema1.json",
"title": "JSON Schema for the LineItemGUIDRefTypeEnum class.",
"description": "This is the fixed enumeration for a GUIDRef that points to an 'LineItem'. ",
"type": "object",
"properties": {
"lineItem": {
"description": "An object that is an 'LineItem'. ",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"lineItem"
],
"additionalProperties": false
}
Metadata
The container for the proprietary extensions.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_metadata-jsonschema1.json",
"title": "JSON Schema for the Metadata class.",
"description": "The container for the proprietary extensions.",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
OrgGUIDRef
This is the container for reference to a OneRoster 'Org' object that has an allocated sourcedId (GUID).
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_orgguidref-jsonschema1.json",
"title": "JSON Schema for the OrgGUIDRef class.",
"description": "This is the container for reference to a OneRoster 'Org' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. an 'org'.",
"$comment": "Origin: OrgGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'Org'. ",
"type": "string",
"enum": [
"org"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
OrgGUIDRefTypeEnum
This is the fixed enumeration for a GUIDRef that points to an 'Org'.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_orgguidreftypeenum-jsonschema1.json",
"title": "JSON Schema for the OrgGUIDRefTypeEnum class.",
"description": "This is the fixed enumeration for a GUIDRef that points to an 'Org'. ",
"type": "object",
"properties": {
"org": {
"description": "An object that is an 'Org'. ",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"org"
],
"additionalProperties": false
}
ScoreScaleGUIDRef
This is the container for reference to a OneRoster 'ScoreScale' object that has an allocated sourcedId (GUID).
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_scorescaleguidref-jsonschema1.json",
"title": "JSON Schema for the ScoreScaleGUIDRef class.",
"description": "This is the container for reference to a OneRoster 'ScoreScale' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'scoreScale'.",
"$comment": "Origin: ScoreScaleGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'ScoreScale'. ",
"type": "string",
"enum": [
"scoreScale"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
ScoreScaleGUIDRefTypeEnum
This is the fixed enumeration for a GUIDRef that points to an 'ScoreScale'.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_scorescaleguidreftypeenum-jsonschema1.json",
"title": "JSON Schema for the ScoreScaleGUIDRefTypeEnum class.",
"description": "This is the fixed enumeration for a GUIDRef that points to an 'ScoreScale'. ",
"type": "object",
"properties": {
"scoreScale": {
"description": "An object that is an 'ScoreScale'. ",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"scoreScale"
],
"additionalProperties": false
}
ScoreStatusEnum
The vocabulary for the permitted set of tokens for the status of the score for a result.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_scorestatusenum-jsonschema1.json",
"title": "JSON Schema for the ScoreStatusEnum class.",
"description": "The vocabulary for the permitted set of tokens for the status of the score for a result.",
"type": "object",
"properties": {
"exempt": {
"description": "The result is exempt i.e. this score does NOT contribute to any summative assessment.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"fully graded": {
"description": "The result is fully graded.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"not submitted": {
"description": "The result is not submitted.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"partially graded": {
"description": "The result is partially graded. Further scoring will be undertaken and this score must NOT be used in summative assessment i.e. it must become 'fully graded'.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"submitted": {
"description": "The learner has submitted the work for grading but grading has not yet been undertaken.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"exempt",
"fully graded",
"not submitted",
"partially graded",
"submitted"
],
"additionalProperties": false
}
ScoreStatusExtEnum
This is an extensible vocabulary data-type for the status of the score being submitted.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_scorestatusextenum-jsonschema1.json",
"title": "JSON Schema for the ScoreStatusExtEnum class.",
"description": "This is an extensible vocabulary data-type for the status of the score being submitted.",
"type": "object",
"properties": {
"pattern": {
"description": "The regular expression to constrain the structure of the string that MUST be used when creating a new, proprietary, vocabulary term. The term must start with the substring 'ext:'.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"exempt": {
"description": "The result is exempt i.e. this score does NOT contribute to any summative assessment.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"fully graded": {
"description": "The result is fully graded.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"not submitted": {
"description": "The result is not submitted.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"partially graded": {
"description": "The result is partially graded. Further scoring will be undertaken and this score must NOT be used in summative assessment i.e. it must become 'fully graded'.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"submitted": {
"description": "The learner has submitted the work for grading but grading has not yet been undertaken.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"pattern",
"exempt",
"fully graded",
"not submitted",
"partially graded",
"submitted"
],
"additionalProperties": false
}
SingleAssessmentLineItem
This is the container for a single assessment lineItem instance for a message payload.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_singleassessmentlineitem-jsonschema1.json",
"title": "JSON Schema for the SingleAssessmentLineItem class.",
"description": "This is the container for a single assessment lineItem instance for a message payload.",
"type": "object",
"properties": {
"assessmentLineItem": {
"$ref": "#/$defs/AssessmentLineItem"
}
},
"required": [
"assessmentLineItem"
],
"additionalProperties": false,
"$defs": {
"AssessmentLineItem": {
"description": "This is the container for the definition of an assessment lineItem. An assessment lineItem is a collection of results for a set of students who are completing an assignment.",
"type": "object",
"properties": {
"title": {
"description": "The title, human readable, for the assessment lineItem. This should allow the assessment lineItem to be distinguished from its peer assessment lineItems.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
},
"description": {
"description": "A human readable description of the usage of the assessment lineItem.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"class": {
"$ref": "#/$defs/ClassGUIDRef"
},
"parentAssessmentLineItem": {
"$ref": "#/$defs/AssessmentLineItemGUIDRef"
},
"scoreScale": {
"$ref": "#/$defs/ScoreScaleGUIDRef"
},
"resultValueMin": {
"description": "The minimum value (numeric) that can be assigned to the score attribute in a result. The score scale mapping should be used to map to other scores.",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"resultValueMax": {
"description": "The maximum value (numeric) that can be assigned to the score attribute in a result. The score scale mapping should be used to map to other scores.",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"learningObjectiveSet": {
"type": "array",
"items": {
"$ref": "#/$defs/LearningObjectiveSet"
}
},
"sourcedId": {
"description": "The sourcedId of the object. All objects MUST be identified by a Source Identifier. This is a GUID System ID for an object. This is the GUID that SYSTEMS will refer to when making API calls, or when needing to identify an object. It is RECOMMENDED that systems are able to map whichever local ids (e.g. database key fields) they use to SourcedId. The sourcedId of an object is considered an addressable property of an entity and as such will not be treated as Personally Identifiable Information (PII) by certified products. Therefore, as a part of certification, vendors will be required to declare that they will notify customers via documentation or other formal and documented agreement that sourcedIds should never contain PII in general, but particularly users. This means that if a customer includes a student name in an enrollment.sourcedId, it will not fall to any certified product to protect the enrollment.sourcedId as PII, or even the userSourcedId field in the enrollment record.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
},
"status": {
"description": "All objects MUST BE either 'active' or 'tobedeleted'. Something 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 under any compulsion to do so. In v1.1 the enumeration value of 'inactive' was removed and so for backwards compatibility all such marked objects should be interpreted as 'tobedeleted'.",
"$comment": "Origin: BaseStatusEnum (Enumeration); The set of permitted values for the type of status of a record. ",
"type": "string",
"enum": [
"active",
"tobedeleted"
]
},
"dateLastModified": {
"description": "All objects MUST be annotated with the dateTime upon which they were last modified. This enables requesters to query for just the latest objects. DateTimes MUST be expressed in W3C profile of [ISO 8601] and MUST contain the UTC timezone.",
"$comment": "Origin: DateTime (PrimitiveType)",
"type": "string",
"format": "date-time"
},
"metadata": {
"$ref": "#/$defs/Metadata"
}
},
"required": [
"title",
"sourcedId",
"status",
"dateLastModified"
],
"additionalProperties": false
},
"AssessmentLineItemGUIDRef": {
"description": "This is the container for reference to a OneRoster 'AssessmentLineItem' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. an 'assessmentLineItem'.",
"$comment": "Origin: AssessmentLineItemGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'AssessmentLineItem'. ",
"type": "string",
"enum": [
"assessmentLineItem"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
},
"LearningObjectiveSet": {
"description": "This is the container for the set of learning objective identifiers that are from a single source responsible for creating those identifiers.",
"type": "object",
"properties": {
"source": {
"description": "The source responsible for creating the learning objective identifiers. The permitted values are from an extensible vocabulary.",
"$comment": "Origin: SourceExtEnum (Union); This is an extensible vocabulary data-type for the source creating the learning objective identifiers.",
"oneOf": [
{
"type": "string",
"enum": [
"case",
"unknown"
]
},
{
"type": "string",
"pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
}
]
},
"learningObjectiveIds": {
"type": "array",
"minItems": 1,
"items": {
"description": "The set of unique identifiers for the associated learning objectives. If these are CASE identifiers they MUST be valid UUIDs.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
}
}
},
"required": [
"source",
"learningObjectiveIds"
],
"additionalProperties": false
},
"ClassGUIDRef": {
"description": "This is the container for reference to a OneRoster 'Class' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'class'.",
"$comment": "Origin: ClassGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'Class'. ",
"type": "string",
"enum": [
"class"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
},
"Metadata": {
"description": "The container for the proprietary extensions.",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"ScoreScaleGUIDRef": {
"description": "This is the container for reference to a OneRoster 'ScoreScale' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'scoreScale'.",
"$comment": "Origin: ScoreScaleGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'ScoreScale'. ",
"type": "string",
"enum": [
"scoreScale"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
}
}
SingleAssessmentResult
This is the container for a single assessment result instance for a message payload.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_singleassessmentresult-jsonschema1.json",
"title": "JSON Schema for the SingleAssessmentResult class.",
"description": "This is the container for a single assessment result instance for a message payload.",
"type": "object",
"properties": {
"assessmentResult": {
"$ref": "#/$defs/AssessmentResult"
}
},
"required": [
"assessmentResult"
],
"additionalProperties": false,
"$defs": {
"AssessmentResult": {
"description": "This is the container for the AssessmentResult record. An assessment result consists of the assigned score plus the context for that score.",
"type": "object",
"properties": {
"assessmentLineItem": {
"$ref": "#/$defs/AssessmentLineItemGUIDRef"
},
"student": {
"$ref": "#/$defs/UserGUIDRef"
},
"score": {
"description": "The score for the result. If a scoreScale is assigned then the value must align with the scale.",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"textScore": {
"description": "An optional non-numeric score value. If a scoreScale is assigned then the value must align with the scale.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
},
"scoreDate": {
"description": "The date at which the score is assigned or there is an update to the result e.g. change in the 'scoreStatus'.. The format is YYYY-MM-DD as defined in [ISO 8601].",
"$comment": "Origin: Date (PrimitiveType)",
"type": "string",
"format": "date"
},
"scoreScale": {
"$ref": "#/$defs/ScoreScaleGUIDRef"
},
"scorePercentile": {
"description": "The percentile rank of a score is the percentage of scores in its frequency distribution that are equal to or lower than it.",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"scoreStatus": {
"description": "The status of the score. The value is from an extensible enumerated vocabulary.",
"$comment": "Origin: ScoreStatusExtEnum (Union); This is an extensible vocabulary data-type for the status of the score being submitted.",
"oneOf": [
{
"type": "string",
"enum": [
"exempt",
"fully graded",
"not submitted",
"partially graded",
"submitted"
]
},
{
"type": "string",
"pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
}
]
},
"comment": {
"description": "A human readable comment about the score.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"learningObjectiveSet": {
"type": "array",
"items": {
"$ref": "#/$defs/LearningObjectiveScoreSet"
}
},
"inProgress": {
"description": "This is used to indicate that the associated work activity has been assigned and student's work product is not yet expected to have been submitted.",
"$comment": "Origin: BooleanTrueFalseEnum (Enumeration); This enumeration is used to limit the permitted tokens for a Boolean data-type to values of 'true' or 'false' ONLY.",
"type": "string",
"enum": [
"true",
"false"
]
},
"incomplete": {
"description": "This is used to indicate that the student's work product has been submitted but it is deemed incomplete by the teacher.",
"$comment": "Origin: BooleanTrueFalseEnum (Enumeration); This enumeration is used to limit the permitted tokens for a Boolean data-type to values of 'true' or 'false' ONLY.",
"type": "string",
"enum": [
"true",
"false"
]
},
"late": {
"description": "This is used to indicate that the student's work product is either past due or it has been submitted past the due date. The score on this result may be impacted as as result of this flag.",
"$comment": "Origin: BooleanTrueFalseEnum (Enumeration); This enumeration is used to limit the permitted tokens for a Boolean data-type to values of 'true' or 'false' ONLY.",
"type": "string",
"enum": [
"true",
"false"
]
},
"missing": {
"description": "This is used to indicate that the student's work product as not been submitted.",
"$comment": "Origin: BooleanTrueFalseEnum (Enumeration); This enumeration is used to limit the permitted tokens for a Boolean data-type to values of 'true' or 'false' ONLY.",
"type": "string",
"enum": [
"true",
"false"
]
},
"sourcedId": {
"description": "The sourcedId of the object. All objects MUST be identified by a Source Identifier. This is a GUID System ID for an object. This is the GUID that SYSTEMS will refer to when making API calls, or when needing to identify an object. It is RECOMMENDED that systems are able to map whichever local ids (e.g. database key fields) they use to SourcedId. The sourcedId of an object is considered an addressable property of an entity and as such will not be treated as Personally Identifiable Information (PII) by certified products. Therefore, as a part of certification, vendors will be required to declare that they will notify customers via documentation or other formal and documented agreement that sourcedIds should never contain PII in general, but particularly users. This means that if a customer includes a student name in an enrollment.sourcedId, it will not fall to any certified product to protect the enrollment.sourcedId as PII, or even the userSourcedId field in the enrollment record.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
},
"status": {
"description": "All objects MUST BE either 'active' or 'tobedeleted'. Something 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 under any compulsion to do so. In v1.1 the enumeration value of 'inactive' was removed and so for backwards compatibility all such marked objects should be interpreted as 'tobedeleted'.",
"$comment": "Origin: BaseStatusEnum (Enumeration); The set of permitted values for the type of status of a record. ",
"type": "string",
"enum": [
"active",
"tobedeleted"
]
},
"dateLastModified": {
"description": "All objects MUST be annotated with the dateTime upon which they were last modified. This enables requesters to query for just the latest objects. DateTimes MUST be expressed in W3C profile of [ISO 8601] and MUST contain the UTC timezone.",
"$comment": "Origin: DateTime (PrimitiveType)",
"type": "string",
"format": "date-time"
},
"metadata": {
"$ref": "#/$defs/Metadata"
}
},
"required": [
"assessmentLineItem",
"student",
"scoreDate",
"scoreStatus",
"sourcedId",
"status",
"dateLastModified"
],
"additionalProperties": false
},
"AssessmentLineItemGUIDRef": {
"description": "This is the container for reference to a OneRoster 'AssessmentLineItem' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. an 'assessmentLineItem'.",
"$comment": "Origin: AssessmentLineItemGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'AssessmentLineItem'. ",
"type": "string",
"enum": [
"assessmentLineItem"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
},
"LearningObjectiveScoreSet": {
"description": "This is the container for the set of learning objective identifiers that are from a single source responsible for creating those identifiers. This also allows a mastery score to be aligned with a learning objective.",
"type": "object",
"properties": {
"source": {
"description": "The source responsible for creating the learning objective identifiers. The permitted values are from an extensible vocabulary.",
"$comment": "Origin: SourceExtEnum (Union); This is an extensible vocabulary data-type for the source creating the learning objective identifiers.",
"oneOf": [
{
"type": "string",
"enum": [
"case",
"unknown"
]
},
{
"type": "string",
"pattern": "(ext:)[a-z|A-Z|0-9|.|-|_]+"
}
]
},
"learningObjectiveResults": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/LearningObjectiveResults"
}
}
},
"required": [
"source",
"learningObjectiveResults"
],
"additionalProperties": false
},
"LearningObjectiveResults": {
"description": "This is the container for a learning objective identifier. This also allows a mastery score to be aligned with the learning objective.",
"type": "object",
"properties": {
"learningObjectiveId": {
"description": "The unique identifier for the associated learning objective. If this is a CASE identifier it MUST be a valid UUID.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
},
"score": {
"description": "The optional mastery score supplied as a numeric value. ",
"$comment": "Origin: Float (PrimitiveType)",
"type": "number"
},
"textScore": {
"description": "The optional mastery score supplied in a non-numeric form. ",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
}
},
"required": [
"learningObjectiveId"
],
"additionalProperties": false
},
"Metadata": {
"description": "The container for the proprietary extensions.",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"UserGUIDRef": {
"description": "This is the container for reference to a OneRoster 'User' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'user'.",
"$comment": "Origin: UserGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'User'. ",
"type": "string",
"enum": [
"user"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
},
"ScoreScaleGUIDRef": {
"description": "This is the container for reference to a OneRoster 'ScoreScale' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'scoreScale'.",
"$comment": "Origin: ScoreScaleGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'ScoreScale'. ",
"type": "string",
"enum": [
"scoreScale"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
}
}
SourceEnum
The predefined vocabulary for the source that was responsible for creating the learning objective identifiers.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_sourceenum-jsonschema1.json",
"title": "JSON Schema for the SourceEnum class.",
"description": "The predefined vocabulary for the source that was responsible for creating the learning objective identifiers.",
"type": "object",
"properties": {
"case": {
"description": "The learning objective identifier is a CASE UUID as defined in the IMS CASE specification [CASE, 17].",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"unknown": {
"description": "The source responsible for creating the learning objectives identifiers is unknown.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"case",
"unknown"
],
"additionalProperties": false
}
SourceExtEnum
This is an extensible vocabulary data-type for the source creating the learning objective identifiers.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_sourceextenum-jsonschema1.json",
"title": "JSON Schema for the SourceExtEnum class.",
"description": "This is an extensible vocabulary data-type for the source creating the learning objective identifiers.",
"type": "object",
"properties": {
"pattern": {
"description": "This regular expression ensures that the free-form entry does NOT have the value 'case' or 'unknown'.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"case": {
"description": "The learning objective identifier is a CASE UUID as defined in the IMS CASE specification [CASE, 17].",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"unknown": {
"description": "The source responsible for creating the learning objectives identifiers is unknown.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"pattern",
"case",
"unknown"
],
"additionalProperties": false
}
UserGUIDRef
This is the container for reference to a OneRoster 'User' object that has an allocated sourcedId (GUID).
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_userguidref-jsonschema1.json",
"title": "JSON Schema for the UserGUIDRef class.",
"description": "This is the container for reference to a OneRoster 'User' object that has an allocated sourcedId (GUID).",
"type": "object",
"properties": {
"type": {
"description": "The type of object being referenced i.e. a 'user'.",
"$comment": "Origin: UserGUIDRefTypeEnum (Enumeration); This is the fixed enumeration for a GUIDRef that points to an 'User'. ",
"type": "string",
"enum": [
"user"
]
},
"href": {
"description": "The URI for the type of object being referenced.",
"$comment": "Origin: AnyURI (PrimitiveType)",
"type": "string"
},
"sourcedId": {
"description": "The globally unique identifier of the object being referenced.",
"$comment": "Origin: GUID (DerivedType); The data-type for establishing a Globally Unique Identifier (GUID). There is no predefined structure for the GUID.",
"type": "string"
}
},
"required": [
"type",
"href",
"sourcedId"
],
"additionalProperties": false
}
UserGUIDRefTypeEnum
This is the fixed enumeration for a GUIDRef that points to an 'User'.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_userguidreftypeenum-jsonschema1.json",
"title": "JSON Schema for the UserGUIDRefTypeEnum class.",
"description": "This is the fixed enumeration for a GUIDRef that points to an 'User'. ",
"type": "object",
"properties": {
"user": {
"description": "An object that is an 'User'. ",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"user"
],
"additionalProperties": false
}
imsx_CodeMajorEnum
The permitted vocabulary for the values for the CodeMajor field.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_imsx_codemajorenum-jsonschema1.json",
"title": "JSON Schema for the imsx_CodeMajorEnum class.",
"description": "The permitted vocabulary for the values for the CodeMajor field.",
"type": "object",
"properties": {
"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: String (PrimitiveType)",
"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: String (PrimitiveType)",
"type": "string"
},
"failure": {
"description": "Denotes that the transaction request has failed. The detailed reason will be reported in the accompanying 'codeMinor' fields.",
"$comment": "Origin: String (PrimitiveType)",
"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: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"success",
"processing",
"failure",
"unsupported"
],
"additionalProperties": false
}
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/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_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. In most cases this will be the target service provider denoted as 'TargetEndSystem'.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
},
"imsx_codeMinorFieldValue": {
"description": "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
"$comment": "Origin: imsx_CodeMinorValueEnum (Enumeration); The permitted vocabulary for the values for the CodeMinorValue field.",
"type": "string",
"enum": [
"fullsuccess",
"invalid_filter_field",
"invalid_selection_field",
"invaliddata",
"unauthorisedrequest",
"internal_server_error",
"server_busy",
"deletefailure",
"unknownobject",
"forbidden"
]
}
},
"required": [
"imsx_codeMinorFieldName",
"imsx_codeMinorFieldValue"
],
"additionalProperties": false
}
}
}
imsx_CodeMinorField
This is the container for a single code minor status code.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_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. In most cases this will be the target service provider denoted as 'TargetEndSystem'.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
},
"imsx_codeMinorFieldValue": {
"description": "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
"$comment": "Origin: imsx_CodeMinorValueEnum (Enumeration); The permitted vocabulary for the values for the CodeMinorValue field.",
"type": "string",
"enum": [
"fullsuccess",
"invalid_filter_field",
"invalid_selection_field",
"invaliddata",
"unauthorisedrequest",
"internal_server_error",
"server_busy",
"deletefailure",
"unknownobject",
"forbidden"
]
}
},
"required": [
"imsx_codeMinorFieldName",
"imsx_codeMinorFieldValue"
],
"additionalProperties": false
}
imsx_CodeMinorValueEnum
The permitted vocabulary for the values for the CodeMinorValue field.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_imsx_codeminorvalueenum-jsonschema1.json",
"title": "JSON Schema for the imsx_CodeMinorValueEnum class.",
"description": "The permitted vocabulary for the values for the CodeMinorValue field.",
"type": "object",
"properties": {
"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 'GET' request; '201' for a successful 'PUT' request; '204' for a successful 'DELETE' request.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"invalid_filter_field": {
"description": "An invalid filter field was supplied and so the filtering was not possible. No data has been reurned. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '400'.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"invalid_selection_field": {
"description": "An invalid selection field was supplied and data filtering on the selection criteria was not possible. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '400'.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"invaliddata": {
"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: String (PrimitiveType)",
"type": "string"
},
"unauthorisedrequest": {
"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: String (PrimitiveType)",
"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: String (PrimitiveType)",
"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: String (PrimitiveType)",
"type": "string"
},
"deletefailure": {
"description": "The deletion request has failed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '400'.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"unknownobject": {
"description": "The supplied identifier is unknown in the Service Provider and so the object could not be changed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '404'.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"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: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"fullsuccess",
"invalid_filter_field",
"invalid_selection_field",
"invaliddata",
"unauthorisedrequest",
"internal_server_error",
"server_busy",
"deletefailure",
"unknownobject",
"forbidden"
],
"additionalProperties": false
}
imsx_SeverityEnum
The permitted vocabulary for the values for the Severity field.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_imsx_severityenum-jsonschema1.json",
"title": "JSON Schema for the imsx_SeverityEnum class.",
"description": "The permitted vocabulary for the values for the Severity field.",
"type": "object",
"properties": {
"status": {
"description": "The request has been completed and a response was received from the Service Provider.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"warning": {
"description": "The request has only been partially completed. For an asynchronous service a further response should be expected.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"error": {
"description": "A significant 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: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"status",
"warning",
"error"
],
"additionalProperties": false
}
imsx_StatusInfo
This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider. For the OneRoster Rostering service this object will only be returned to provide information about a failed request i.e. it will NOT be in the payload for a successful request. See Appendix B for further information on the interpretation of the information contained within this class.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_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. For the OneRoster Rostering service this object will only be returned to provide information about a failed request i.e. it will NOT be in the payload for a successful request. See Appendix B for further information on the interpretation of the information contained within this class.",
"type": "object",
"properties": {
"imsx_codeMajor": {
"description": "The code major value (from the corresponding enumerated vocabulary). See Appendix B for further information on the interpretation of this set of codes. The permitted vocabulary for the values for the CodeMajor field.",
"$comment": "Origin: imsx_CodeMajorEnum (Enumeration); The permitted vocabulary for the values for the CodeMajor field.",
"type": "string",
"enum": [
"success",
"processing",
"failure",
"unsupported"
]
},
"imsx_severity": {
"description": "The severity value (from the corresponding enumerated vocabulary). See Appendix B for further information on the interpretation of this set of codes.",
"$comment": "Origin: imsx_SeverityEnum (Enumeration); The permitted vocabulary for the values for the Severity field.",
"type": "string",
"enum": [
"status",
"warning",
"error"
]
},
"imsx_description": {
"description": "A human readable description supplied by the entity creating the status code information.",
"$comment": "Origin: String (PrimitiveType)",
"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. In most cases this will be the target service provider denoted as 'TargetEndSystem'.",
"$comment": "Origin: NormalizedString (PrimitiveType)",
"type": "string"
},
"imsx_codeMinorFieldValue": {
"description": "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
"$comment": "Origin: imsx_CodeMinorValueEnum (Enumeration); The permitted vocabulary for the values for the CodeMinorValue field.",
"type": "string",
"enum": [
"fullsuccess",
"invalid_filter_field",
"invalid_selection_field",
"invaliddata",
"unauthorisedrequest",
"internal_server_error",
"server_busy",
"deletefailure",
"unknownobject",
"forbidden"
]
}
},
"required": [
"imsx_codeMinorFieldName",
"imsx_codeMinorFieldValue"
],
"additionalProperties": false
}
}
}
OrderByEnum
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://purl.imsglobal.org/spec/orgradebook/v1p2/orgarp/v1p0/schema/json/orgradebook_v1p2_orgarp_v1p0_orderbyenum-jsonschema1.json",
"title": "JSON Schema for the OrderByEnum class.",
"description": "No description supplied.",
"type": "object",
"properties": {
"asc": {
"description": "No description supplied.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
},
"desc": {
"description": "No description supplied.",
"$comment": "Origin: String (PrimitiveType)",
"type": "string"
}
},
"required": [
"asc",
"desc"
],
"additionalProperties": false
}
Summary of the Conformance Tests for a Consumer
The set of tests that will be used to determine if an implementation of the consumer functionality is compliant are summarised in Table B1. The features supplied in Table B1 are:
- ID - the unique identifier assigned to the test;
- Mode - set as either 'R' to denote that this test MUST be passed, 'O' to denote this test MAY be passed and '–' to denote the test is not applicable. R(P) and O(P) denote MUST support and MAY support respectively for the Assessment Results Push endpoints.
- Description - a brief summary of the objective of the test.
| ID | Mode | Description |
|---|---|---|
| AR-1.1 | R | OAuth2: Send request with valid access token. |
| AR-2.1 | R | Confirm Correct Endpoint Request Format: Get All AssessmentLineItems. |
| AR-2.2 | R | Confirm Correct Endpoint Request Format: Get All AssessmentResults. |
| AR-2.3 | O | Confirm Correct Endpoint Request Format: Get AssessmentLineItem By Id. |
| AR-2.4 | O | Confirm Correct Endpoint Request Format: Get AssessmentResult By Id. |
| AR-3.1 | R(P) | Confirm Correct Endpoint Request Format: Put AssessmentLineItem. |
| AR-3.2 | R(P) | Confirm Correct Endpoint Request Format:Put AssessmentResult. |
| AR-3.3 | O(P) | Confirm Correct Endpoint Request Format: Delete AssessmentLineItem. |
| AR-3.4 | O(P) | Confirm Correct Endpoint Request Format: Delete AssessmentResult. |
| More tests to be added in a later version of this Document. |
Summary of the Conformance Tests for a Service Provider
The set of tests that will be used to determine if an implementation of the service provider functionality is compliant are summarised in the Table D1. The features supplied in Tables are:
- ID - the unique identifier assigned to the test;
- Mode - set as either 'R' to denote that this test MUST be passed, 'O' to denote this test MAY be passed and '–' to denote the test is not applicable;
- Description - a brief summary of the objective of the test.
All of the tests are applied using OAuth 2.0 (Client Credentials) for support is REQUIRED.
| ID | Mode | Description |
|---|---|---|
| AR-GALLLI-101 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentLineItems' endpoint works correctly. The test system issues the getAllAssessmentLineItems request and expects to receive a fully populated JSON payload. |
| AR-GALLLI-201 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentLineItems' endpoint works correctly using the &sort=sourcedId query parameter. The test system issues the getAllAssessmentLineItems request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
| AR-GALLLI-202 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentLineItems' endpoint works correctly using the &sort=sourcedId&orderBy=asc query parameters. The test system issues the getAllAssessmentLineItems request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
| AR-GALLLI-203 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentLineItems' endpoint works correctly using the &sort=sourcedId&orderBy=desc query parameters. The test system issues the getAllAssessmentLineItems request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
| AR-GALLLI-301 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentLineItems' endpoint works correctly using the &filter (with the equal test on a sourcedId) query parameter. The test system issues the getAllAssessmentLineItems request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
| AR-GALLLI-302 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentLineItems' endpoint works correctly using the &filter (with the not equal test on a sourcedId) query parameter. The test system issues the getAllAssessmentLineItems request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
| AR-GALLLI-303 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentLineItems' endpoint works correctly using the &filter (with the greater than test on a sourcedId) query parameter. The test system issues the getAllAssessmentLineItems request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
| AR-GALLLI-304 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/lassessmentLineItems' endpoint works correctly using the &filter (with the greater than or equals test on a sourcedId) query parameter. The test system issues the getAllAssessmentLineItems request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
| AR-GALLLI-305 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentLineItems' endpoint works correctly using the &filter (with the less than test on a sourcedId) query parameter. The test system issues the getAllAssessmentLineItems request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
| AR-GALLLI-306 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentLineItems' endpoint works correctly using the &filter (with the less than or equals test on a sourcedId) query parameter. The test system issues the getAllAssessmentLineItems request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
| AR-GALLLI-307 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentLineItems' endpoint works correctly using the &filter (with the contains test on a title) query parameter. The test system issues the getAllAssessmentLineItems request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
| AR-GALLLI-308 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentLineItems' endpoint works correctly using the &filter (with the AND predicate test on a sourcedId) query parameter. The test system issues the getAllAssessmentLineItems request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
| AR-GALLLI-309 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentLineItems' endpoint works correctly using the &filter (with the OR predicate test on a sourcedId) query parameter. The test system issues the getAllAssessmentLineItems request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
More tests (AR-GALLLI-***) to be added in a later release of this document
| ID | Mode | Description |
|---|---|---|
| AR-GONELI-101 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentLineItems/{id}' endpoint works correctly. The test system issues the getAssessmentLineItem request and expects to receive a fully populated JSON payload. |
| More tests (AR-GONELI-***) to be added in a later release of this document. | ||
| AR-GALLRS-101 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentResults' endpoint works correctly. The test system issues the getAllAssessmentResults request and expects to receive a fully populated JSON payload. |
| AR-GALLRS-201 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentResults' endpoint works correctly using the &sort=sourcedId query parameter. The test system issues the getAllAssessmentResults request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
| AR-GALLRS-202 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentResults' endpoint works correctly using the &sort=sourcedId&orderBy=asc query parameters. The test system issues the getAllAssessmentResults request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
| AR-GALLRS-203 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentResults' endpoint works correctly using the &sort=sourcedId&orderBy=desc query parameters. The test system issues the getAllAssessmentResults request and expects to receive a fully populated JSON payload. This query parameter must be supported for this service. |
More tests (AR-GALLRS-***) to be added in a later release of this document
| ID | Mode | Description |
|---|---|---|
| AR-GONERS-101 | R | To confirm the service provider's '.../ims/oneroster/gradebook/v1p2/assessmentResults/{id}' endpoint works correctly. The test system issues the getAssessmentResult request and expects to receive a fully populated JSON payload. |
More tests (AR-GONERS-***) to be added in a later release of this document
Data Model Details
This is a subset of the full data model that can is available in the OR 1.2 Gradebook Service Model 1EdTech OneRoster 1.2 Gradebook Services Final Release 1.0.
AssessmentLineItem
This is the container for the definition of an assessment lineItem. An assessment lineItem is a collection of results for a set of students who are completing an assignment.
| Property | Type | Description | Multiplicity | Privacy |
|---|---|---|---|---|
| title | NormalizedString | The title, human readable, for the assessment lineItem. This should allow the assessment lineItem to be distinguished from its peer assessment lineItems. | [1] | N/A |
| description | String | A human readable description of the usage of the assessment lineItem. | [0..1] | N/A |
| class | ClassGUIDRef | The GUID of the class to which the assessment lineItem has been assigned. Note that an assessment LineItem MAY be assigned tio a class. | [0..1] | N/A |
| parentAssessmentLineItem | AssessmentLineItemGUIDRef | The GUID of the parent assessment lineItem. This enables the assessment lineItems to be chained together in a parent/child hierarchy. | [0..1] | N/A |
| scoreScale | ScoreScaleGUIDRef | The GUID of the score scale to be used for the lineItem. This attribute was added in the OR 1.2 release. | [0..1] | N/A |
| resultValueMin | Float | The minimum value (numeric) that can be assigned to the score attribute in a result. The score scale mapping should be used to map to other scores. | [0..1] | N/A |
| resultValueMax | Float | The maximum value (numeric) that can be assigned to the score attribute in a result. The score scale mapping should be used to map to other scores. | [0..1] | N/A |
| learningObjectiveSet | LearningObjectiveSet | The set of identifiers for the learning objectives to which this assessment is aligned. Any number groups of learning objectives can be assigned. | [0..*] | N/A |
| sourcedId | GUID | The sourcedId of the object. All objects MUST be identified by a Source Identifier. This is a GUID System ID for an object. This is the GUID that SYSTEMS will refer to when making API calls, or when needing to identify an object. It is RECOMMENDED that systems are able to map whichever local ids (e.g. database key fields) they use to SourcedId. The sourcedId of an object is considered an addressable property of an entity and as such will not be treated as Personally Identifiable Information (PII) by certified products. Therefore, as a part of certification, vendors will be required to declare that they will notify customers via documentation or other formal and documented agreement that sourcedIds should never contain PII in general, but particularly users. This means that if a customer includes a student name in an enrollment.sourcedId, it will not fall to any certified product to protect the enrollment.sourcedId as PII, or even the userSourcedId field in the enrollment record. | [1] | N/A |
| status | BaseStatusEnum | All objects MUST BE either 'active' or 'tobedeleted'. Something 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 under any compulsion to do so. In v1.1 the enumeration value of 'inactive' was removed and so for backwards compatibility all such marked objects should be interpreted as 'tobedeleted'. | [1] | N/A |
| dateLastModified | DateTime | All objects MUST be annotated with the dateTime upon which they were last modified. This enables requesters to query for just the latest objects. DateTimes MUST be expressed in W3C profile of [ISO 8601] and MUST contain the UTC timezone. | [1] | N/A |
| metadata | Metadata | All objects CAN be extended using the Metadata class. This specification is silent on what implementers may consider to be appropriate extensions. The form of the extension is dependent on the binding technology being used. | [0..1] | N/A |
AssessmentLineItemSet
This is the container for a collection of assessment lineItem instances for a message payload. This may be empty if no instances are found that sustain the applied query constraints. The order is not significant.
| Property | Type | Description | Multiplicity | Privacy |
|---|---|---|---|---|
| assessmentLineItems | AssessmentLineItem | The collection of assessment lineItem instances. The order is not significant. The corresponding query constraints may result in no instances being returned. | [0..*] | N/A |
AssessmentResult
This is the container for the AssessmentResult record. An assessment result consists of the assigned score plus the context for that score.
| Property | Type | Description | Multiplicity | Privacy |
|---|---|---|---|---|
| assessmentLineItem | AssessmentLineItemGUIDRef | The GUID of the assessment lineItem to which the assessment result is aligned. | [1] | N/A |
| student | UserGUIDRef | The GUID of the student for whom the assessment result is assigned. | [1] | N/A |
| score | Float | The score for the result. If a scoreScale is assigned then the value must align with the scale. | [0..1] | N/A |
| textScore | NormalizedString | An optional non-numeric score value. If a scoreScale is assigned then the value must align with the scale. | [0..1] | N/A |
| scoreDate | Date | The date at which the score is assigned or there is an update to the result e.g. change in the 'scoreStatus'.. The format is YYYY-MM-DD as defined in [ISO 8601]. | [1] | N/A |
| scoreScale | ScoreScaleGUIDRef | The GUID of the scoreScale against which the result is aligned. | [0..1] | N/A |
| scorePercentile | Float | The percentile rank of a score is the percentage of scores in its frequency distribution that are equal to or lower than it. | [0..1] | N/A |
| scoreStatus | ScoreStatusExtEnum | The status of the score. The value is from an extensible enumerated vocabulary. | [1] | N/A |
| comment | String | A human readable comment about the score. | [0..1] | N/A |
| learningObjectiveSet | LearningObjectiveScoreSet | The set of identifiers for the learning objectives to which this result is aligned. Any number groups of learning objectives can be assigned. | [0..*] | N/A |
| inProgress | BooleanTrueFalseEnum | This is used to indicate that the associated work activity has been assigned and student's work product is not yet expected to have been submitted. | [0..1] | N/A |
| incomplete | BooleanTrueFalseEnum | This is used to indicate that the student's work product has been submitted but it is deemed incomplete by the teacher. | [0..1] | N/A |
| late | BooleanTrueFalseEnum | This is used to indicate that the student's work product is either past due or it has been submitted past the due date. The score on this result may be impacted as as result of this flag. | [0..1] | N/A |
| missing | BooleanTrueFalseEnum | This is used to indicate that the student's work product as not been submitted. | [0..1] | N/A |
| sourcedId | GUID | The sourcedId of the object. All objects MUST be identified by a Source Identifier. This is a GUID System ID for an object. This is the GUID that SYSTEMS will refer to when making API calls, or when needing to identify an object. It is RECOMMENDED that systems are able to map whichever local ids (e.g. database key fields) they use to SourcedId. The sourcedId of an object is considered an addressable property of an entity and as such will not be treated as Personally Identifiable Information (PII) by certified products. Therefore, as a part of certification, vendors will be required to declare that they will notify customers via documentation or other formal and documented agreement that sourcedIds should never contain PII in general, but particularly users. This means that if a customer includes a student name in an enrollment.sourcedId, it will not fall to any certified product to protect the enrollment.sourcedId as PII, or even the userSourcedId field in the enrollment record. | [1] | N/A |
| status | BaseStatusEnum | All objects MUST BE either 'active' or 'tobedeleted'. Something 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 under any compulsion to do so. In v1.1 the enumeration value of 'inactive' was removed and so for backwards compatibility all such marked objects should be interpreted as 'tobedeleted'. | [1] | N/A |
| dateLastModified | DateTime | All objects MUST be annotated with the dateTime upon which they were last modified. This enables requesters to query for just the latest objects. DateTimes MUST be expressed in W3C profile of [ISO 8601] and MUST contain the UTC timezone. | [1] | N/A |
| metadata | Metadata | All objects CAN be extended using the Metadata class. This specification is silent on what implementers may consider to be appropriate extensions. The form of the extension is dependent on the binding technology being used. | [0..1] | N/A |
AssessmentResultSet
This is the container for a collection of assessment result instances for a message payload. This may be empty if no instances are found that sustain the applied query constraints. The order is not significant.
| Property | Type | Description | Multiplicity | Privacy |
|---|---|---|---|---|
| assessmentResults | AssessmentResult | The collection of assessment result instances. The order is not significant. The corresponding query constraints may result in no instances being returned. | [0..*] | N/A |
Base
This is the container for the set of common attributes that are available to all of the first class data structures.
| Property | Type | Description | Multiplicity | Privacy |
|---|---|---|---|---|
| sourcedId | GUID | The sourcedId of the object. All objects MUST be identified by a Source Identifier. This is a GUID System ID for an object. This is the GUID that SYSTEMS will refer to when making API calls, or when needing to identify an object. It is RECOMMENDED that systems are able to map whichever local ids (e.g. database key fields) they use to SourcedId. The sourcedId of an object is considered an addressable property of an entity and as such will not be treated as Personally Identifiable Information (PII) by certified products. Therefore, as a part of certification, vendors will be required to declare that they will notify customers via documentation or other formal and documented agreement that sourcedIds should never contain PII in general, but particularly users. This means that if a customer includes a student name in an enrollment.sourcedId, it will not fall to any certified product to protect the enrollment.sourcedId as PII, or even the userSourcedId field in the enrollment record. | [1] | N/A |
| status | BaseStatusEnum | All objects MUST BE either 'active' or 'tobedeleted'. Something 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 under any compulsion to do so. In v1.1 the enumeration value of 'inactive' was removed and so for backwards compatibility all such marked objects should be interpreted as 'tobedeleted'. | [1] | N/A |
| dateLastModified | DateTime | All objects MUST be annotated with the dateTime upon which they were last modified. This enables requesters to query for just the latest objects. DateTimes MUST be expressed in W3C profile of [ISO 8601] and MUST contain the UTC timezone. | [1] | N/A |
| metadata | Metadata | All objects CAN be extended using the Metadata class. This specification is silent on what implementers may consider to be appropriate extensions. The form of the extension is dependent on the binding technology being used. | [0..1] | N/A |
modelId:org.1edtech.orgradebook.v1p2.orgarp.v1p0.profilemodel
class:GUID
SingleAssessmentLineItem
This is the container for a single assessment lineItem instance for a message payload.
| Property | Type | Description | Multiplicity | Privacy |
|---|---|---|---|---|
| assessmentLineItem | AssessmentLineItem | The instance of the single assessment lineItem for a message payload. There must be a data payload otherwise an error report payload for the record not being located should be returned. | [1] | N/A |
SingleAssessmentResult
This is the container for a single assessment result instance for a message payload.
| Property | Type | Description | Multiplicity | Privacy |
|---|---|---|---|---|
| assessmentResult | AssessmentResult | The instance of the single assessment result for a message payload. There must be a data payload otherwise an error report payload for the record not being located should be returned. | [1] | N/A |
imsx_StatusInfo
This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider. For the OneRoster Rostering service this object will only be returned to provide information about a failed request i.e. it will NOT be in the payload for a successful request. See Appendix B for further information on the interpretation of the information contained within this class.
| Property | Type | Description | Multiplicity | Privacy |
|---|---|---|---|---|
| imsx_codeMajor | imsx_CodeMajorEnum | The code major value (from the corresponding enumerated vocabulary). See Appendix B for further information on the interpretation of this set of codes. The permitted vocabulary for the values for the CodeMajor field. | [1] | N/A |
| imsx_severity | imsx_SeverityEnum | The severity value (from the corresponding enumerated vocabulary). See Appendix B for further information on the interpretation of this set of codes. | [1] | N/A |
| imsx_description | String | A human readable description supplied by the entity creating the status code information. | [0..1] | N/A |
| imsx_CodeMinor | imsx_CodeMinor | The set of reported code minor status codes. See Appendix B for further information on the interpretation of this set of codes. | [0..1] | N/A |
imsx_CodeMajorEnum Enumeration
The permitted vocabulary for the values for the CodeMajor field.
| Term | Description |
|---|---|
| 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. |
| 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. |
| failure | Denotes that the transaction request has failed. The detailed reason will be reported in the accompanying 'codeMinor' fields. |
| 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. |
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 | Privacy |
|---|---|---|---|---|
| imsx_codeMinorField | imsx_CodeMinorField | Each reported code minor status code. | [1..*] | N/A |
imsx_CodeMinorField
This is the container for a single code minor status code.
| Property | Type | Description | Multiplicity | Privacy |
|---|---|---|---|---|
| imsx_codeMinorFieldName | NormalizedString | This should contain the identity of the system that has produced the code minor status code report. In most cases this will be the target service provider denoted as 'TargetEndSystem'. | [1] | N/A |
| imsx_codeMinorFieldValue | imsx_CodeMinorValueEnum | The code minor status code (this is a value from the corresponding enumerated vocabulary). | [1] | N/A |
imsx_CodeMinorValueEnum Enumeration
The permitted vocabulary for the values for the CodeMinorValue field.
| Term | Description |
|---|---|
| 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 'GET' request; '201' for a successful 'PUT' request; '204' for a successful 'DELETE' request. |
| invalid_filter_field | An invalid filter field was supplied and so the filtering was not possible. No data has been reurned. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '400'. |
| invalid_selection_field | An invalid selection field was supplied and data filtering on the selection criteria was not possible. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '400'. |
| invaliddata | 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'. |
| unauthorisedrequest | 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'. |
| 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'. |
| 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'. |
| deletefailure | The deletion request has failed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '400'. |
| unknownobject | The supplied identifier is unknown in the Service Provider and so the object could not be changed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and for a REST binding a HTTP code of '404'. |
| 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'. |
imsx_SeverityEnum Enumeration
The permitted vocabulary for the values for the Severity field.
| Term | Description |
|---|---|
| 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. |
| error | A significant error has occurred in processing the request and so the request was not completed (the Service Provider may not even have received the request). |
OrderByEnum Enumeration
| Term | Description |
|---|---|
| asc | |
| desc |
Primitive Types
The Assessment Result Profile provides the exchange of detailed results arranged as a set of lineItems. This profile is derived from the OneRoster (OR) 1.2 Gradebook Service. The OR Gradebook service enables the exchange of K-12 oriented gradebook data. The service provides a number of operations, collected as several endpoints, primarily based upon read, create and delete of the first class objects.
| Type | Description |
|---|---|
| AnyURI | |
| Boolean | |
| Date | |
| DateTime | |
| Decimal | |
| Float | |
| Integer | |
| Namespace | |
| NonNegativeInteger | |
| NormalizedString | |
| PositiveInteger | |
| String | |
| Void |
IP Disclosures
The following participating organizations have made explicit license commitments to this specification:
| Organization Name | Date election made | Necessary claims | Type |
|---|---|---|---|
| Anthology Inc. | August 10, 2022 | No | RF RAND (Required & Optional Elements) |
| D2L | July 21, 2022 | No | RF RAND (Required & Optional Elements) |
| Gwinnett County Public Schools | July 22, 2022 | No | RF RAND (Required & Optional Elements) |
| Infinite Campus Inc. | July 25, 2022 | No | RF RAND (Required & Optional Elements) |
| Microsoft Corporation | August 8, 2022 | No | RF RAND (Required & Optional Elements) |
| SameGoal Inc. | July 21, 2022 | No | RF RAND (Required & Optional Elements) |
List of Contributors
The following individuals contributed to the development of this document:
| Name | Affiliation | Role |
|---|---|---|
| Eric Adams | Instructure | |
| Barry Brahier | Infinite Campus | |
| Tom Clark | Pearson | |
| Linda Feng | Unicon | |
| Viktor Haag | Desire2Learn | |
| Richard Heim | LearningMate | |
| Tom Ingram | Escambia County School District | |
| Oxana Jurosevic | Instructure | |
| Jong Kim | Pearson | |
| Andrew Kuritzky | Edmentum | |
| David Mayes | Gwinnett County Schools | |
| Joshua McGhee | 1EdTech | Editor |
| Phil Nicholls | 1EdTech | |
| Padraig O'hiceadha | HMH | |
| James Perreault | FLVS | |
| Patrick Porter | Houston ISD | |
| Matt Richards | Infinite Campus | Co-Chair |
| Wendy Riedy | Microsoft | |
| Kurt Rompot | Pearson | |
| Upendra Penegalapati | Pearson | |
| Gabrielle Sanderson | Illuminate Education | |
| Colin Smythe | 1EdTech | Editor |
| Konrad Stimeling | Stride | |
| Aditya Subramaniam | Schoology | |
| Matt Vella | Schoology | |
| TJ Vering | Microsoft | |
| Mark Walls | Gwinnett County Schools |
Changelog
Changelog entries are not listed yet.
Revision History
| Version | Doc Version | Date | Comments |
|---|---|---|---|
| 1EdTech Final Release | 2022-06-06 | The first formal release of the Final Release version of this document. |
Related resources
Data Model
Service Model
The service model is available as an OpenAPI document at the following URL:
IPR and Distribution Notices
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 to the 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 web page: https://www.1edtech.org/ip.
Copyright © 1EdTech Consortium, Inc. All Rights Reserved.
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.
Trademark information: https://www.1edtech.org/about/legal/trademarks