IMS Public Candidate Final

IMS Global Logo

IMS Computer Adaptive Testing (CAT) Service REST/JSON Binding Version 1.0

IMS Public Candidate Final
Version 1.0

Date Issued: 2021-02-01
Latest version: http://www.imsglobal.org/cat/latest/

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.

IMS 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 IMS's procedures with respect to rights in IMS specifications can be found at the IMS Intellectual Property Rights web page: http://www.imsglobal.org/ipr/imsipr_policyFinal.pdf.

Copyright © 2021 IMS Global Learning Consortium. All Rights Reserved.

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

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

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

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

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

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

Document Name: IMS Computer Adaptive Testing (CAT) Service REST/JSON Binding v1.0

Revision: 2021-02-01

toc | top

Executive Summary

The Computer Adaptive Testing (CAT) specification defines how to implement adaptive testing based upon assessments defined using the IMS Question and Test Interoperability® (QTI®) specification. This specification defines the data that is exchanged, and how the data is exchanged, between an Assessment delivery system and a CAT engine. The CAT engine is responsible for identifying and supplying the set of Items (the encoded questions) to be delivered in an assessment. This approach allows the use of protected algorithms (black box) with different sets of data such as psychometric data, constraints, stopping criteria, etc.

This document is the REST/JSON Binding of the IMS CAT Service Model. This document contains the descriptions of how the service is realised as a set of REST-based endpoints that exchange the data as JSON payloads. A machine-readable version of this Service API is supplied as a set of OpenAPI files. All of the artifacts for this binding are derived from the original service model through a sequence of machine-transformations [I-BAT, 06]

toc | top

Table of Contents

Executive Summary

1. Introduction

1.1 Scope and Context

1.2 Conventions

1.3 Structure of this Document

1.4 Nomenclature

2. The REST Endpoints

2.1 Mapping of the Service Operations to the REST Endpoints

2.2 API Root URL and Versioning

2.3 Predefined Endpoint Query Parameters

2.4 HTTP Code Handling

3. Using the Endpoint Parameters

4. Security Framework

4.1 Transport Security

4.2 Authorization

4.3 Scopes

4.3.1 "https://purl.imsglobal.org/cat/v1p0/scope/api" Scope

4.3.2 "https://purl.imsglobal.org/cat/v1p0/scope/configure" Scope

4.3.3 "https://purl.imsglobal.org/cat/v1p0/scope/deliver" Scope

5. UML to JSON Mappings

5.1 Service Parameter Payload Properties UML/JSON Mapping

5.2 Service Parameter Payload Class UML/JSON Mapping

5.2.1 Section Service Parameter Payload Class Mapping

5.2.2 LUID Service Parameter Payload Class Mapping

5.2.3 ItemSet Service Parameter Payload Class Mapping

5.2.4 Session Service Parameter Payload Class Mapping

5.2.5 NextItemSet Service Parameter Payload Class Mapping

5.2.6 SessionState Service Parameter Payload Class Mapping

5.2.7 Results Service Parameter Payload Class Mapping

5.2.8 AssessmentResult Service Parameter Payload Class Mapping

5.3 Payload Classes UML/JSON Mapping

5.3.1 CandidateResponse Payload Class Mapping

5.3.2 Context Payload Class Mapping

5.3.3 CorrectResponse Payload Class Mapping

5.3.4 ItemResult Payload Class Mapping

5.3.5 KeyValuePair Payload Class Mapping

5.3.6 OutcomeVariable Payload Class Mapping

5.3.7 PCIContext Payload Class Mapping

5.3.8 QTIMetadata Payload Class Mapping

5.3.9 ResponseVariable Payload Class Mapping

5.3.10 SessionIdentifier Payload Class Mapping

5.3.11 TemplateVariable Payload Class Mapping

5.3.12 TestResult Payload Class Mapping

5.3.13 Value Payload Class Mapping

5.3.14 imsx_CodeMinor Payload Class Mapping

5.3.15 imsx_CodeMinorField Payload Class Mapping

5.3.16 imsx_StatusInfo Payload Class Mapping

5.4 Enumerated Class UML/JSON Mapping

5.5 Enumerated List Class UML/JSON Mapping

5.6 Primitive Type UML/JSON Mapping

6. JSON Payloads

6.1 "createSection" Request Payload

6.2 "createSection" Response Payload

6.2.1 Response Payloads for the HTTP Codes (201)

6.2.2 Response Payloads for the HTTP Codes (400, 401, 500, default)

6.3 "createSession" Request Payload

6.4 "createSession" Response Payload

6.4.1 Response Payloads for the HTTP Codes (201)

6.4.2 Response Payloads for the HTTP Codes (400, 401, 404, 500, default)

6.5 "endSection" Request Payload

6.6 "endSection" Response Payload

6.6.1 Response Payloads for the HTTP Codes (204)

6.6.2 Response Payloads for the HTTP Codes (400, 401, 404, 500, default)

6.7 "endSession" Request Payload

6.8 "endSession" Response Payload

6.8.1 Response Payloads for the HTTP Codes (204)

6.8.2 Response Payloads for the HTTP Codes (400, 401, 404, 500, default)

6.9 "getSection" Request Payload

6.10 "getSection" Response Payload

6.10.1 Response Payloads for the HTTP Codes (200)

6.10.2 Response Payloads for the HTTP Codes (400, 401, 404, 500, default)

6.11 "submitResults" Request Payload

6.12 "submitResults" Response Payload

6.12.1 Response Payloads for the HTTP Codes (201)

6.12.2 Response Payloads for the HTTP Codes (400, 401, 404, 500, default)

7. Service OpenAPI Description

7.1 General Information

7.2 Tags Information

7.3 Security Information

7.4 Paths Information

7.4.1 "/sections" Path

7.4.2 "/sections/{sectionIdentifier}" Path

7.4.3 "/sections/{sectionIdentifier}/sessions" Path

7.4.4 "/sections/{sectionIdentifier}/sessions/{sessionIdentifier}" Path

7.4.5 "/sections/{sectionIdentifier}/sessions/{sessionIdentifier}/results" Path

7.5 Definitions Information

7.5.1 "CreateSessionResponseBodyDType" Definition

7.5.2 "GetSectionResponseBodyDType" Definition

7.5.3 "SubmitResultsResponseBodyDType" Definition

7.5.4 "CreateSectionResponseBodyDType" Definition

7.5.5 "AssessmentResultDType" Definition

7.5.6 "CandidateResponseDType" Definition

7.5.7 "ContextDType" Definition

7.5.8 "CorrectResponseDType" Definition

7.5.9 "ItemResultDType" Definition

7.5.10 "ItemSetDType" Definition

7.5.11 "KeyValuePairDType" Definition

7.5.12 "NextItemSetDType" Definition

7.5.13 "OutcomeVariableDType" Definition

7.5.14 "PCIContextDType" Definition

7.5.15 "QTIMetadataDType" Definition

7.5.16 "ResponseVariableDType" Definition

7.5.17 "ResultsDType" Definition

7.5.18 "SectionDType" Definition

7.5.19 "SessionDType" Definition

7.5.20 "SessionIdentifierDType" Definition

7.5.21 "TemplateVariableDType" Definition

7.5.22 "TestResultDType" Definition

7.5.23 "ValueDType" Definition

7.5.24 "imsx_CodeMinorDType" Definition

7.5.25 "imsx_CodeMinorFieldDType" Definition

7.5.26 "imsx_StatusInfoDType" Definition

8. Extending and Profiling the Service

8.1 Extending the Service

8.1.1 Proprietary Operations

8.1.2 Profiling the Service

8.2 Profiling the Service

References

Appendix A REST/JSON Modeling Terms

A1 REST Endpoint Description Explanations

A1.1 REST Endpoint Mapping Table Explanation

A1.2 Query Parameter Table Explanation

A1.3 Error Codes and Handling for each Endpoint Table Explanation

A2 UML to JSON Mapping Description Explanations

A2.1 Service Parameter Payload Properties UML/JSON Mapping Table Definition

A2.2 UML/JSON Payload Class Mapping Table Definition

A2.3 UML/JSON Enumerated and Enumerated List Class Mapping Table Definition

A2.4 UML/JSON Primitive Types Mapping Table Definition

A3 OpenAPI Descriptions Explanations

A3.1a OpenAPI(2) General Information Table Explanation

A3.1b OpenAPI(3) General Information Table Explanation

A3.2 OpenAPI Tags Table Explanation

A3.3 OpenAPI Security Table Explanation

A3.4 OpenAPI Paths Table Explanation

A3.5 OpenAPI Definitions Table Explanation

Appendix B OpenAPI Listings

B1 CAT Service OpenAPI JSON Listing

B1.1 OpenAPI 2.0 JSON Listing

B1.2 OpenAPI 3.0 JSON Listing

B2 CAT Service OpenAPI YAML Listing

B2.1 OpenAPI 2.0 YAML Listing

B2.2 OpenAPI 3.0 YAML Listing

Appendix C JSON Schema Listings

C1 JSON Schemas for Payload Validation

C1.1a JSON Schema for the "createSection" Operation Request Payload Validation.

C1.1b JSON Schema for the "createSection" Operation Response Payload Validation for HTTP Codes (201)

C1.1c JSON Schema for the "createSection" Operation Response Payload Validation for HTTP Codes (400,401,500,default)

C1.2a JSON Schema for the "createSession" Operation Request Payload Validation.

C1.2b JSON Schema for the "createSession" Operation Response Payload Validation for HTTP Codes (201)

C1.2c JSON Schema for the "createSession" Operation Response Payload Validation for HTTP Codes (400,401,404,500,default)

C1.3a JSON Schema for the "endSection" Operation Request Payload Validation.

C1.3b JSON Schema for the "endSection" Operation Response Payload Validation for HTTP Codes (204)

C1.3c JSON Schema for the "endSection" Operation Response Payload Validation for HTTP Codes (400,401,404,500,default)

C1.4a JSON Schema for the "endSession" Operation Request Payload Validation.

C1.4b JSON Schema for the "endSession" Operation Response Payload Validation for HTTP Codes (204)

C1.4c JSON Schema for the "endSession" Operation Response Payload Validation for HTTP Codes (400,401,404,500,default)

C1.5a JSON Schema for the "getSection" Operation Request Payload Validation.

C1.5b JSON Schema for the "getSection" Operation Response Payload Validation for HTTP Codes (200)

C1.5c JSON Schema for the "getSection" Operation Response Payload Validation for HTTP Codes (400,401,404,500,default)

C1.6a JSON Schema for the "submitResults" Operation Request Payload Validation.

C1.6b JSON Schema for the "submitResults" Operation Response Payload Validation for HTTP Codes (201)

C1.6c JSON Schema for the "submitResults" Operation Response Payload Validation for HTTP Codes (400,401,404,500,default)

About this Document

List of Contributors

Revision History

toc | top

List of Tables

Table 2.1 - The Set of REST Endpoint URL-leaf Values.

Table 2.4 - The List of HTTP Codes and Handling for each Endpoint.

Table 4.3.1 "https://purl.imsglobal.org/cat/v1p0/scope/api" Scope

Table 4.3.2 "https://purl.imsglobal.org/cat/v1p0/scope/configure" Scope

Table 4.3.3 "https://purl.imsglobal.org/cat/v1p0/scope/deliver" Scope

Table 6.1.1 - Tabular representation of the JSON payload for the request message for a "createSection" operation.

Table 6.2.1 - Tabular representation of the JSON payload for "201" response messages for a "createSection" operation.

Table 6.2.2 - Tabular representation of the JSON payload for "400, 401, 500, default" response messages for a "createSection" operation.

Table 6.3.1 - Tabular representation of the JSON payload for the request message for a "createSession" operation.

Table 6.4.1 - Tabular representation of the JSON payload for "201" response messages for a "createSession" operation.

Table 6.4.2 - Tabular representation of the JSON payload for "400, 401, 404, 500, default" response messages for a "createSession" operation.

Table 6.6.2 - Tabular representation of the JSON payload for "400, 401, 404, 500, default" response messages for a "endSection" operation.

Table 6.8.2 - Tabular representation of the JSON payload for "400, 401, 404, 500, default" response messages for a "endSession" operation.

Table 6.10.1 - Tabular representation of the JSON payload for "200" response messages for a "getSection" operation.

Table 6.10.2 - Tabular representation of the JSON payload for "400, 401, 404, 500, default" response messages for a "getSection" operation.

Table 6.11.1 - Tabular representation of the JSON payload for the request message for a "submitResults" operation.

Table 6.12.1 - Tabular representation of the JSON payload for "201" response messages for a "submitResults" operation.

Table 6.12.2 - Tabular representation of the JSON payload for "400, 401, 404, 500, default" response messages for a "submitResults" operation.

Table 7.1a - The Set of General Information Defined in the OpenAPI(2) Description.

Table 7.1b - The Set of General Information Defined in the OpenAPI(3) Description.

Table 7.2 - The Set of Tags Defined in the OpenAPI Description.

Table 7.3.1 - The Set of OAuth 2.0 Client Credentials Security Information Defined in the OpenAPI Description.

Table 7.4.1 - The Set of HTTP Verbs Permitted on the "/sections" Path.

Table 7.4.2 - The Set of HTTP Verbs Permitted on the "/sections/{sectionIdentifier}" Path.

Table 7.4.3 - The Set of HTTP Verbs Permitted on the "/sections/{sectionIdentifier}/sessions" Path.

Table 7.4.4 - The Set of HTTP Verbs Permitted on the "/sections/{sectionIdentifier}/sessions/{sessionIdentifier}" Path.

Table 7.4.5 - The Set of HTTP Verbs Permitted on the "/sections/{sectionIdentifier}/sessions/{sessionIdentifier}/results" Path.

Table 7.5.1 - OpenAPI JSON Schema description for the "CreateSessionResponseBodyDType" Complex Type.

Table 7.5.2 - OpenAPI JSON Schema description for the "GetSectionResponseBodyDType" Complex Type.

Table 7.5.3 - OpenAPI JSON Schema description for the "SubmitResultsResponseBodyDType" Complex Type.

Table 7.5.4 - OpenAPI JSON Schema description for the "CreateSectionResponseBodyDType" Complex Type.

Table 7.5.5 - OpenAPI JSON Schema description for the "AssessmentResultDType" Complex Type.

Table 7.5.6 - OpenAPI JSON Schema description for the "CandidateResponseDType" Complex Type.

Table 7.5.7 - OpenAPI JSON Schema description for the "ContextDType" Complex Type.

Table 7.5.8 - OpenAPI JSON Schema description for the "CorrectResponseDType" Complex Type.

Table 7.5.9 - OpenAPI JSON Schema description for the "ItemResultDType" Complex Type.

Table 7.5.10 - OpenAPI JSON Schema description for the "ItemSetDType" Complex Type.

Table 7.5.11 - OpenAPI JSON Schema description for the "KeyValuePairDType" Complex Type.

Table 7.5.12 - OpenAPI JSON Schema description for the "NextItemSetDType" Complex Type.

Table 7.5.13 - OpenAPI JSON Schema description for the "OutcomeVariableDType" Complex Type.

Table 7.5.14 - OpenAPI JSON Schema description for the "PCIContextDType" Complex Type.

Table 7.5.15 - OpenAPI JSON Schema description for the "QTIMetadataDType" Complex Type.

Table 7.5.16 - OpenAPI JSON Schema description for the "ResponseVariableDType" Complex Type.

Table 7.5.17 - OpenAPI JSON Schema description for the "ResultsDType" Complex Type.

Table 7.5.18 - OpenAPI JSON Schema description for the "SectionDType" Complex Type.

Table 7.5.19 - OpenAPI JSON Schema description for the "SessionDType" Complex Type.

Table 7.5.20 - OpenAPI JSON Schema description for the "SessionIdentifierDType" Complex Type.

Table 7.5.21 - OpenAPI JSON Schema description for the "TemplateVariableDType" Complex Type.

Table 7.5.22 - OpenAPI JSON Schema description for the "TestResultDType" Complex Type.

Table 7.5.23 - OpenAPI JSON Schema description for the "ValueDType" Complex Type.

Table 7.5.24 - OpenAPI JSON Schema description for the "imsx_CodeMinorDType" Complex Type.

Table 7.5.25 - OpenAPI JSON Schema description for the "imsx_CodeMinorFieldDType" Complex Type.

Table 7.5.26 - OpenAPI JSON Schema description for the "imsx_StatusInfoDType" Complex Type.

Table A1.1 The key to the descriptions of the mapping between a service calls and its REST endpoint URL-leaf

Table A1.2 The key to the descriptions of the data attribute/characteristic tables

Table A1.3 The key to the descriptions of the list of error codes and handling for each endpoint

Table A3.1a The key to the tabular description of the OpenAPI(2) general information

Table A3.1b The key to the tabular description of the OpenAPI(3) general information

Table A3.2 The key to the tabular description of the OpenAPI tags information

Table A3.3 The key to the tabular description of the OpenAPI security information.

Table A3.4 The key to the tabular description of the OpenAPI paths information for an HTTP Verb

Table A3.5 The key to the tabular description of the OpenAPI definitions information

toc | top

List of Code Blocks

Code 6.1.1 - JSON payload example for the request message for a "createSection" operation.

Code 6.2.1 - JSON payload example for "201" response messages for a "createSection" operation.

Code 6.2.2 - JSON payload example for "400, 401, 500, default" response messages for a "createSection" operation.

Code 6.3.1 - JSON payload example for the request message for a "createSession" operation.

Code 6.4.1 - JSON payload example for "201" response messages for a "createSession" operation.

Code 6.4.2 - JSON payload example for "400, 401, 404, 500, default" response messages for a "createSession" operation.

Code 6.6.2 - JSON payload example for "400, 401, 404, 500, default" response messages for a "endSection" operation.

Code 6.8.2 - JSON payload example for "400, 401, 404, 500, default" response messages for a "endSession" operation.

Code 6.10.1 - JSON payload example for "200" response messages for a "getSection" operation.

Code 6.10.2 - JSON payload example for "400, 401, 404, 500, default" response messages for a "getSection" operation.

Code 6.11.1 - JSON payload example for the request message for a "submitResults" operation.

Code 6.12.1 - JSON payload example for "201" response messages for a "submitResults" operation.

Code 6.12.2 - JSON payload example for "400, 401, 404, 500, default" response messages for a "submitResults" operation.

toc | top

1. Introduction

1.1. Scope and Context

This document is the Computer Adaptive Testing (CAT) REST/JSON Binding v1.0 and as such it is used as the basis for the implementing the CAT Service Model. The key related documents are:

This service model and this REST/JSON binding is described using the Unified Modeling Language (UML) based upon the IMS Global Model Driven Specification approach and the associated modeling toolkit [I-BAT, 06]. This specification is based upon the concepts of:

1.2. Conventions

All sections marked as non-normative, all authoring guidelines, diagrams (with the exception of the UML diagrams), examples, and notes in this specification are non-normative. Everything else in this specification is normative.

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119]. This means that from the perspective of conformance:

The Conformance and Certification Guide for this specification may introduce greater normative constraints than those defined here for specific service or implementation categories.

The SHOULD/SHOULD NOT/RECOMMENDED statements MUST NOT be used in any document, or section of a document, that is responsible for defining the information model and/or the associated bindings and/or conformance and certification.

1.3. Structure of this Document

The structure of the rest of this document is:

2. The REST Endpoints An explanation of the relationship between the logical service operations (as defined in the CAT Service Model [CAT, 20a]) and how these are realized as the corresponding set of REST endpoints (including the set of query parameters that are permitted);
3. Using the Endpoint Parameters A detailed explanation of how the permitted set of query parameters should be used to control the volume and type of information that will be supplied by the service provider;
4. Security Framework The underlying security framework within which this REST/JSON binding is designed to operate. This includes the details about authentication and how the payload integrity may be protected;
5. UML to JSON Mappings The description of how the JSON payloads are derived from the equivalent UML data model definitions [CAT, 20a]. Each UML class and attribute is mapped to the equivalent JSON object and property;
6. JSON Payloads Examples of the set of JSON payloads that are sent by the consumer (the request) and returned by the service provider (response). These examples are focused on the expected structure of a request/response and do not include actual payloads;
7. Service OpenAPI Description A detailed explanation of the structure of the OpenAPI files that are produced as part of the specification documentation. The associated JSON and YAML files are supplied in Appendix B;
8. Extending and Profiling the Service An explanation of how the service can be extended, using the permitted points of extension and/or profiled. Profiling is the process by which the specification is tailored to a specific set of market/domain requirements;
References The set of cited documents, normative and informative, that are used to support the technical details in this document;
Appendix A REST/JSON Modeling Terms An overview of the model driven approach, the concepts and the terms used by IMS to create the service model REST/JSON binding definitions (based upon a profile of UML) and the accompanying documentation (including this binding);
Appendix B 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 C 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.

1.4. Nomenclature

API Application Programming Interface
CAT Computer Adaptive Testing
HTML Hypertext Markup Language
HTTP Hypertext Transfer Protocol
JSON JavaScript Object Notation
REST Representational State Transfer
UML Unified Modeling Language
URI Uniform Resource Identifier
URL Uniform Resource Locator
YAML Yet Another Markup Language

toc | top

2. The REST Endpoints

This Section is NORMATIVE.

2.1 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 Table 2.1. The syntax and semantics for this mapping are described in Appendix A1.1.

Table 2.1 - The Set of REST Endpoint URL-leaf Values.
Service Call REST Endpoint HTTP Verb
createSection /sections POST
createSession /sections/{sectionIdentifier}/sessions POST
endSection /sections/{sectionIdentifier} DELETE
endSession /sections/{sectionIdentifier}/sessions/{sessionIdentifier} DELETE
getSection /sections/{sectionIdentifier} GET
submitResults /sections/{sectionIdentifier}/sessions/{sessionIdentifier}/results POST

2.2 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/cat/v1p0".

2.3 Predefined Endpoint Query Parameters

Query parameters are not permitted for any of the endpoints.

2.4 HTTP Code Handling

A service provider will either return a data payload or a payload that indicates the cause of the failure. The list of HTTP Codes and handling for each endpoint is shown in Table 2.4. The syntax and semantics for this tabular description are described in Appendix A1.3.

Table 2.4 - The List of HTTP Codes and Handling for each Endpoint.
REST Endpoint HTTP Verb HTTP Codes and Handling
/sections POST
  • 201 - the response code for when the new Section has been created in the CAT Engine and the associated identifier has been returned. The payload is defined by the structure LUIDDType.
  • 400 - the request has been declared as 'bad'. This will be due to the provision of bad data in the request payloads, including a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
  • 401 - the request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
  • 500 - this code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
/sections/{sectionIdentifier} GET
  • 200 - the response code for when the list of Items in the section's item pool has been returned. The response message contains the list of Items, the section configuration used to create the section, and any qtiUsagedata and qtiMetadata used to create the section. There is no payload in the response message.
  • 400 - the request has been declared as 'bad'. This will be due to the provision of bad data in the request payloads, including a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
  • 401 - the request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
  • 404 - the supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented. The payload is defined by the structure imsx_StatusInfoDType.
  • 500 - this code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
/sections/{sectionIdentifier} DELETE
  • 204 - the response code for when the identified Section has been deleted in the CAT Engine. There is no response payload. There is no payload in the response message.
  • 400 - the request has been declared as 'bad'. This will be due to the provision of bad data in the request payloads, including a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
  • 401 - the request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
  • 404 - the supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented. The payload is defined by the structure imsx_StatusInfoDType.
  • 500 - this code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
/sections/{sectionIdentifier}/sessions POST
  • 201 - the response code for when the new Session has been created in the CAT Engine and the associated identifier has been returned. The response message consists of the identifier allocated to the session, the initial set of Items to be presented and the session state to be used for later requests. There is no payload in the response message.
  • 400 - the request has been declared as 'bad'. This will be due to the provision of bad data in the request payloads, including a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
  • 401 - the request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
  • 404 - the supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented. The payload is defined by the structure imsx_StatusInfoDType.
  • 500 - this code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
/sections/{sectionIdentifier}/sessions/{sessionIdentifier} DELETE
  • 204 - the response code for when the identified Session has been deleted in the CAT Engine. There is no response payload. There is no payload in the response message.
  • 400 - the request has been declared as 'bad'. This will be due to the provision of bad data in the request payloads, including a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
  • 401 - the request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
  • 404 - the supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented. The payload is defined by the structure imsx_StatusInfoDType.
  • 500 - this code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
/sections/{sectionIdentifier}/sessions/{sessionIdentifier}/results POST
  • 201 - the response code for when the next set of Items to be presented to the examinee has been returned. The response message contains the next set of Items, the session state to be used in later requests and, optionally, the assessment results. There is no payload in the response message.
  • 400 - the request has been declared as 'bad'. This will be due to the provision of bad data in the request payloads, including a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
  • 401 - the request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.
  • 404 - the supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented. The payload is defined by the structure imsx_StatusInfoDType.
  • 500 - this code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The payload is defined by the structure imsx_StatusInfoDType.

toc | top

3. Using the Endpoint Parameters

This Section is NORMATIVE.

The use of Query Parameters is NOT permitted on the set of endpoints.

[[ ED NOTE: The above statement needs to be confirmed. ]]

toc | top

4. Security Framework

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

4.2. Authorization

The use of OAuth 2.0 Client Credentials with the Bearer Token obtained using the mechanism described in [RFC 6749] (Section 4.4) is REQUIRED. Details of this are given in the IMS Security Framework [Security, 19].

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 [RFC 6749].

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. Note that the request for an access token MAY use a HTTP GET request.

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 [RFC 2617] with an authentication scheme defined by the specification of the access token type used, such as [RFC 6750]. 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.

4.3. Scopes

The set of scopes available in this service are listed in the following Tables.

4.3.1 "https://purl.imsglobal.org/cat/v1p0/scope/api" Scope

This enables access to all of the endpoints. The set of service operations covered by this scope are listed in Table 4.3.1.

Table 4.3.1 Service Operations for the "https://purl.imsglobal.org/cat/v1p0/scope/api" Scope.
Operation HTTP Verb Endpoint
createSection POST /sections
createSession POST /sections/{sectionIdentifier}/sessions
endSection DELETE /sections/{sectionIdentifier}
endSession DELETE /sections/{sectionIdentifier}/sessions/{sessionIdentifier}
getSection GET /sections/{sectionIdentifier}
submitResults POST /sections/{sectionIdentifier}/sessions/{sessionIdentifier}/results

4.3.2 "https://purl.imsglobal.org/cat/v1p0/scope/configure" Scope

This enables access to the endoints that permit the management of Sections. The set of service operations covered by this scope are listed in Table 4.3.2.

Table 4.3.2 Service Operations for the "https://purl.imsglobal.org/cat/v1p0/scope/configure" Scope.
Operation HTTP Verb Endpoint
createSection POST /sections
endSection DELETE /sections/{sectionIdentifier}
getSection GET /sections/{sectionIdentifier}

4.3.3 "https://purl.imsglobal.org/cat/v1p0/scope/deliver" Scope

This enables access to the endoints that permit the management of Sessions. The set of service operations covered by this scope are listed in Table 4.3.3.

Table 4.3.3 Service Operations for the "https://purl.imsglobal.org/cat/v1p0/scope/deliver" Scope.
Operation HTTP Verb Endpoint
createSession POST /sections/{sectionIdentifier}/sessions
endSession DELETE /sections/{sectionIdentifier}/sessions/{sessionIdentifier}
submitResults POST /sections/{sectionIdentifier}/sessions/{sessionIdentifier}/results

toc | top

5. UML to JSON Mappings

This Section is NOT NORMATIVE.

5.1 Service Parameter Payload Properties UML/JSON Mapping

The UML/JSON Mapping for the Service Parameters (excluding those service parameters passed as query parameters on the endpoint URL) to the JSON Payload Properties is given in Table 5.1. The syntax and semantics for this representation is described in Appendix A2.1.

Table 5.1 UML/JSON Mapping for the Service Parameters.
Operation Name Parameter Name UML Class JSON Name JSON Type JSON Schema Data Type
createSection N/A (Flat data structure) Section N/A (Flat data structure) Set of Properties SectionDType
createSection sectionIdentifier DT: LUID (PT: NCName) sectionIdentifier Property N/A
createSession N/A (Flat data structure) Session N/A (Flat data structure) Set of Properties SessionDType
createSession sessionIdentifier DT: LUID (PT: NCName) sessionIdentifier Property N/A
createSession N/A (Flat data structure) NextItemSet N/A (Flat data structure) Set of Properties NextItemSetDType
createSession sessionState DT: SessionState (PT: NormalizedString) sessionState Property N/A
getSection itemIdentifiers ItemSet itemIdentifiers Array of Objects ItemSetDType
getSection N/A (Flat data structure) Section N/A (Flat data structure) Set of Properties SectionDType
submitResults N/A (Flat data structure) Results N/A (Flat data structure) Set of Properties ResultsDType
submitResults N/A (Flat data structure) NextItemSet N/A (Flat data structure) Set of Properties NextItemSetDType
submitResults N/A (Flat data structure) AssessmentResult N/A (Flat data structure) Set of Properties AssessmentResultDType
submitResults sessionState DT: SessionState (PT: NormalizedString) sessionState Property N/A

5.2 Service Parameter Payload Class UML/JSON Mapping

The syntax and semantics for the Root Class UML/JSON mapping representations is described in Appendix A2.2.

5.2.1 Section Service Parameter Payload Class Mapping

The UML/JSON Mapping for the "Section" Service Parameter Payload Class is given in Table 5.2.1.

Table 5.2.1 UML/JSON Mapping for the "Section" Service Parameter Payload Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
Section Payload Parameter Container [ Unordered ] - N/A - SectionDType Object
  • qtiMetadata
Attribute QTIMetadata [0..1] qtiMetadata Property
  • qtiUsagedata
Attribute PT: String [0..1] qtiUsagedata Property
  • sectionConfiguration
Attribute PT: String [1] sectionConfiguration Property

5.2.2 LUID Service Parameter Payload Class Mapping

The UML/JSON Mapping for the "LUID" Service Parameter Payload Class is given in Table 5.2.2.

Table 5.2.2 UML/JSON Mapping for the "LUID" Service Parameter Payload Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
LUID Payload Parameter Container [ DerivedType ] AND Inherits [ NCName ] - N/A - LUIDDType Object

5.2.3 ItemSet Service Parameter Payload Class Mapping

The UML/JSON Mapping for the "ItemSet" Service Parameter Payload Class is given in Table 5.2.3.

Table 5.2.3 UML/JSON Mapping for the "ItemSet" Service Parameter Payload Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
ItemSet Payload Parameter Container [ Unordered ] - N/A - ItemSetDType Object
  • itemIdentifiers
Attribute DT: LUID (PT: NCName) [1.. *] itemIdentifiers Array of Properties

5.2.4 Session Service Parameter Payload Class Mapping

The UML/JSON Mapping for the "Session" Service Parameter Payload Class is given in Table 5.2.4.

Table 5.2.4 UML/JSON Mapping for the "Session" Service Parameter Payload Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
Session Payload Parameter Container [ Unordered ] - N/A - SessionDType Object
  • personalNeedsAndPreferences
Attribute PT: NormalizedString [0..1] personalNeedsAndPreferences Property
  • demographics
Attribute PT: NormalizedString [0..1] demographics Property
  • priorData
Attribute KeyValuePair [0.. *] priorData Array of Properties

5.2.5 NextItemSet Service Parameter Payload Class Mapping

The UML/JSON Mapping for the "NextItemSet" Service Parameter Payload Class is given in Table 5.2.5.

Table 5.2.5 UML/JSON Mapping for the "NextItemSet" Service Parameter Payload Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
NextItemSet Payload Parameter Container [ Unordered ] - N/A - NextItemSetDType Object
  • itemIdentifiers
Attribute DT: LUID (PT: NCName) [1.. *] itemIdentifiers Array of Properties
  • stageLength
Attribute PT: NonNegativeInteger [0..1] stageLength Property

5.2.6 SessionState Service Parameter Payload Class Mapping

The UML/JSON Mapping for the "SessionState" Service Parameter Payload Class is given in Table 5.2.6.

Table 5.2.6 UML/JSON Mapping for the "SessionState" Service Parameter Payload Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
SessionState Payload Parameter Container [ DerivedType ] AND Inherits [ NormalizedString ] - N/A - SessionStateDType Object

5.2.7 Results Service Parameter Payload Class Mapping

The UML/JSON Mapping for the "Results" Service Parameter Payload Class is given in Table 5.2.7.

Table 5.2.7 UML/JSON Mapping for the "Results" Service Parameter Payload Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
Results Payload Parameter Container [ Unordered ] - N/A - ResultsDType Object
  • assessmentResult
Attribute AssessmentResult [1] assessmentResult Property
  • sessionState
Attribute DT: SessionState (PT: NormalizedString) [0..1] sessionState Property

5.2.8 AssessmentResult Service Parameter Payload Class Mapping

The UML/JSON Mapping for the "AssessmentResult" Service Parameter Payload Class is given in Table 5.2.8.

Table 5.2.8 UML/JSON Mapping for the "AssessmentResult" Service Parameter Payload Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
AssessmentResult Payload Parameter Container [ Sequence ] - N/A - AssessmentResultDType Object
  • context
Attribute Context [0..1] context Property
  • testResult
Attribute TestResult [0..1] testResult Property
  • itemResult
Attribute ItemResult [0.. *] itemResult Array of Properties

5.3 Payload Classes UML/JSON Mapping

The syntax and semantics for the Data Class UML/JSON mapping representations is described in Appendix A2.2.

5.3.1 CandidateResponse Payload Class Mapping

The Payload UML/JSON Mapping for the "CandidateResponse" Class is given in Table 5.3.1.

Table 5.3.1 Payload UML/JSON Mapping for the "CandidateResponse" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
CandidateResponse Core Container [ Sequence ] - N/A - CandidateResponseDType Object
  • value
Attribute Value [0.. *] value Array of Properties

5.3.2 Context Payload Class Mapping

The Payload UML/JSON Mapping for the "Context" Class is given in Table 5.3.2.

Table 5.3.2 Payload UML/JSON Mapping for the "Context" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
Context Core Container [ Sequence ] - N/A - ContextDType Object
  • sourcedId
Attribute DT: LUID (PT: NCName) [0..1] sourcedId Property
  • sessionIdentifiers
Attribute SessionIdentifier [0.. *] sessionIdentifiers Array of Properties

5.3.3 CorrectResponse Payload Class Mapping

The Payload UML/JSON Mapping for the "CorrectResponse" Class is given in Table 5.3.3.

Table 5.3.3 Payload UML/JSON Mapping for the "CorrectResponse" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
CorrectResponse Core Container [ Sequence ] - N/A - CorrectResponseDType Object
  • interpretation
Attribute PT: String [0..1] interpretation Property
  • value
Attribute Value [0.. *] value Array of Properties

5.3.4 ItemResult Payload Class Mapping

The Payload UML/JSON Mapping for the "ItemResult" Class is given in Table 5.3.4.

Table 5.3.4 Payload UML/JSON Mapping for the "ItemResult" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
ItemResult Core Container [ Sequence ] - N/A - ItemResultDType Object
  • identifier
Attribute DT: LUID (PT: NCName) [1] identifier Property
  • sequenceIndex
Attribute PT: NonNegativeInteger [0..1] sequenceIndex Property
  • datestamp
Attribute PT: DateTime [1] datestamp Property
  • sessionStatus
Attribute [ Enumeration (SessionStatus) ] [1] sessionStatus Property
  • responseVariables
Attribute ResponseVariable [0.. *] responseVariables Array of Properties
  • templateVariables
Attribute TemplateVariable [0.. *] templateVariables Array of Properties
  • outcomeVariables
Attribute OutcomeVariable [0.. *] outcomeVariables Array of Properties
  • candidateComment
Attribute PT: String [0..1] candidateComment Property

5.3.5 KeyValuePair Payload Class Mapping

The Payload UML/JSON Mapping for the "KeyValuePair" Class is given in Table 5.3.5.

Table 5.3.5 Payload UML/JSON Mapping for the "KeyValuePair" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
KeyValuePair Core Container [ Unordered ] - N/A - KeyValuePairDType Object
  • glossaryURI
Attribute PT: AnyURI [0..1] glossaryURI Property
  • key
Attribute PT: String [1] key Property
  • value
Attribute PT: String [1] value Property

5.3.6 OutcomeVariable Payload Class Mapping

The Payload UML/JSON Mapping for the "OutcomeVariable" Class is given in Table 5.3.6.

Table 5.3.6 Payload UML/JSON Mapping for the "OutcomeVariable" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
OutcomeVariable Core Container [ Sequence ] - N/A - OutcomeVariableDType Object
  • identifier
Attribute DT: LUID (PT: NCName) [1] identifier Property
  • cardinality
Attribute [ Enumeration (CardinalityEnum) ] [1] cardinality Property
  • baseType
Attribute [ Enumeration (BaseTypeEnum) ] [0..1] baseType Property
  • view
Attribute [ Enumeration (ViewEnum) ] [0.. *] view Array of Properties
  • interpretation
Attribute PT: String [0..1] interpretation Property
  • longInterpretation
Attribute PT: AnyURI [0..1] longInterpretation Property
  • normalMaximum
Attribute PT: Double [0..1] normalMaximum Property
  • normalMinimum
Attribute PT: Double [0..1] normalMinimum Property
  • masteryValue
Attribute PT: Double [0..1] masteryValue Property
  • value
Attribute Value [0.. *] value Array of Properties

5.3.7 PCIContext Payload Class Mapping

The Payload UML/JSON Mapping for the "PCIContext" Class is given in Table 5.3.7.

Table 5.3.7 Payload UML/JSON Mapping for the "PCIContext" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
PCIContext Core Container [ Sequence ] - N/A - PCIContextDType Object
  • customTypeIdentifier
Attribute PT: NormalizedString [0..1] customTypeIdentifier Property
  • interactionKind
Attribute PT: NormalizedString [0..1] interactionKind Property

5.3.8 QTIMetadata Payload Class Mapping

The Payload UML/JSON Mapping for the "QTIMetadata" Class is given in Table 5.3.8.

Table 5.3.8 Payload UML/JSON Mapping for the "QTIMetadata" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
QTIMetadata Core Container [ Sequence ] - N/A - QTIMetadataDType Object
  • itemTemplate
Attribute PT: Boolean [0..1] itemTemplate Property
  • timeDependent
Attribute PT: Boolean [0..1] timeDependent Property
  • composite
Attribute PT: Boolean [0..1] composite Property
  • interactionType
Attribute [ Enumeration (InteractionTypeEnum) ] [0.. *] interactionType Array of Properties
  • portableCustomInteractionContext
Attribute PCIContext [0..1] portableCustomInteractionContext Property
  • feedbackType
Attribute [ Enumeration (FeedbackTypeEnum) ] [0..1] feedbackType Property
  • solutionAvailable
Attribute PT: Boolean [0..1] solutionAvailable Property
  • scoringMode
Attribute [ Enumeration (ScoringModeEnum) ] [0.. *] scoringMode Array of Properties
  • toolName
Attribute DT: String256 (PT: String) [0..1] toolName Property
  • toolVersion
Attribute DT: String256 (PT: String) [0..1] toolVersion Property
  • toolVendor
Attribute DT: String256 (PT: String) [0..1] toolVendor Property

5.3.9 ResponseVariable Payload Class Mapping

The Payload UML/JSON Mapping for the "ResponseVariable" Class is given in Table 5.3.9.

Table 5.3.9 Payload UML/JSON Mapping for the "ResponseVariable" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
ResponseVariable Core Container [ Sequence ] - N/A - ResponseVariableDType Object
  • identifier
Attribute DT: LUID (PT: NCName) [1] identifier Property
  • cardinality
Attribute [ Enumeration (CardinalityEnum) ] [1] cardinality Property
  • baseType
Attribute [ Enumeration (BaseTypeEnum) ] [0..1] baseType Property
  • choiceSequence
Attribute DT: IdentifierList (PT: NCName) [0.. *] choiceSequence Array of Properties
  • correctResponse
Attribute CorrectResponse [0..1] correctResponse Property
  • candidateResponse
Attribute CandidateResponse [1] candidateResponse Property

5.3.10 SessionIdentifier Payload Class Mapping

The Payload UML/JSON Mapping for the "SessionIdentifier" Class is given in Table 5.3.10.

Table 5.3.10 Payload UML/JSON Mapping for the "SessionIdentifier" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
SessionIdentifier Core Container [ Sequence ] - N/A - SessionIdentifierDType Object
  • sourceID
Attribute PT: AnyURI [1] sourceID Property
  • identifier
Attribute DT: LUID (PT: NCName) [1] identifier Property

5.3.11 TemplateVariable Payload Class Mapping

The Payload UML/JSON Mapping for the "TemplateVariable" Class is given in Table 5.3.11.

Table 5.3.11 Payload UML/JSON Mapping for the "TemplateVariable" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
TemplateVariable Core Container [ Sequence ] - N/A - TemplateVariableDType Object
  • identifier
Attribute DT: LUID (PT: NCName) [1] identifier Property
  • cardinality
Attribute [ Enumeration (CardinalityEnum) ] [1] cardinality Property
  • baseType
Attribute [ Enumeration (BaseTypeEnum) ] [0..1] baseType Property
  • value
Attribute Value [0.. *] value Array of Properties

5.3.12 TestResult Payload Class Mapping

The Payload UML/JSON Mapping for the "TestResult" Class is given in Table 5.3.12.

Table 5.3.12 Payload UML/JSON Mapping for the "TestResult" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
TestResult Core Container [ Sequence ] - N/A - TestResultDType Object
  • identifier
Attribute DT: LUID (PT: NCName) [1] identifier Property
  • datestamp
Attribute PT: DateTime [1] datestamp Property
  • responseVariables
Attribute ResponseVariable [0.. *] responseVariables Array of Properties
  • templateVariables
Attribute TemplateVariable [0.. *] templateVariables Array of Properties
  • outcomeVariables
Attribute OutcomeVariable [0.. *] outcomeVariables Array of Properties

5.3.13 Value Payload Class Mapping

The Payload UML/JSON Mapping for the "Value" Class is given in Table 5.3.13.

Table 5.3.13 Payload UML/JSON Mapping for the "Value" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
Value Core Container [ Sequence ] - N/A - ValueDType Object
  • fieldIdentifier
Attribute DT: LUID (PT: NCName) [0..1] fieldIdentifier Property
  • baseType
Attribute [ Enumeration (BaseTypeEnum) ] [0..1] baseType Property
  • value
Attribute PT: NormalizedString [1] value Property

5.3.14 imsx_CodeMinor Payload Class Mapping

The Payload UML/JSON Mapping for the "imsx_CodeMinor" Class is given in Table 5.3.14.

Table 5.3.14 Payload UML/JSON Mapping for the "imsx_CodeMinor" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
imsx_CodeMinor Core Container [ Sequence ] - N/A - imsx_CodeMinorDType Object
  • imsx_codeMinorField
Attribute imsx_CodeMinorField [1.. *] imsx_codeMinorField Array of Properties

5.3.15 imsx_CodeMinorField Payload Class Mapping

The Payload UML/JSON Mapping for the "imsx_CodeMinorField" Class is given in Table 5.3.15.

Table 5.3.15 Payload UML/JSON Mapping for the "imsx_CodeMinorField" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
imsx_CodeMinorField Core Container [ Sequence ] - N/A - imsx_CodeMinorFieldDType Object
  • imsx_codeMinorFieldName
Attribute PT: NormalizedString [1] imsx_codeMinorFieldName Property
  • imsx_codeMinorFieldValue
Attribute [ Enumeration (imsx_CodeMinorValueEnum) ] [1] imsx_codeMinorFieldValue Property

5.3.16 imsx_StatusInfo Payload Class Mapping

The Payload UML/JSON Mapping for the "imsx_StatusInfo" Class is given in Table 5.3.16.

Table 5.3.16 Payload UML/JSON Mapping for the "imsx_StatusInfo" Class.
Information Model Details JSON Binding Details
Name UML Artefact Data Type Multiplicity Name Type
imsx_StatusInfo Core Container [ Sequence ] - N/A - imsx_StatusInfoDType Object
  • imsx_codeMajor
Attribute [ Enumeration (imsx_CodeMajorEnum) ] [1] imsx_codeMajor Property
  • imsx_severity
Attribute [ Enumeration (imsx_SeverityEnum) ] [1] imsx_severity Property
  • imsx_description
Attribute PT: String [0..1] imsx_description Property
  • imsx_codeMinor
Attribute imsx_CodeMinor [0..1] imsx_codeMinor Property

5.4 Enumerated Class UML/JSON Mapping

The definition of the set of enumerated data-types used in this specification is given in Table 5.4. The syntax and semantics for the Enumerated Class UML/JSON mapping representations is described in Appendix A2.3.

Table 5.4 The UML/JSON Map Enumerated Class Definitions.
Enumeration Class Name Description
BaseTypeEnum Enumerated value set of: { boolean | directedPair | duration | file | float | identifier | integer | pair | point | string | uri }.
CardinalityEnum Enumerated value set of: { multiple | ordered | record | single }.
FeedbackTypeEnum Enumerated value set of: { adaptive | nonadaptive | none }.
InteractionTypeEnum Enumerated value set of: { associateInteraction | choiceInteraction | customInteraction | drawingInteraction | endAttemptInteraction | extendedTextInteraction | gapMatchInteraction | graphicAssociateInteraction | graphicGapMatchInteraction | graphicOrderInteraction | hotspotInteraction | hottextInteraction | inlineChoiceInteraction | matchInteraction | mediaInteraction | orderInteraction | portableCustomInteraction | positionObjectInteraction | selectPointInteraction | sliderInteraction | textEntryInteraction | uploadInteraction }.
ScoringModeEnum Enumerated value set of: { human | externalmachine | responseprocessing }.
SessionStatus Enumerated value set of: { final | initial | pendingResponseProcessing | pendingSubmission }.
ViewEnum Enumerated value set of: { author | candidate | proctor | scorer | testConstructor | tutor }.
imsx_CodeMajorEnum Enumerated value set of: { success | processing | failure | unsupported }.
imsx_CodeMinorValueEnum Enumerated value set of: { fullsuccess | forbidden | invaliddata | unauthorisedrequest | internal_server_error | server_busy | unknownobject }.
imsx_SeverityEnum Enumerated value set of: { status | warning | error }.

5.5 Enumerated List Class UML/JSON Mapping

There are no enumerated list class definitions.

5.6 Union Class UML/JSON Mapping

There are no union class definitions.

5.7 Primitive Type UML/JSON Mapping

The definition of the set of primitive data-types used in this specification is given in Table 5.7. The syntax and semantics for the Primitive Type UML/JSON mapping representations is described in Appendix A2.4.

Table 5.7 The UML/JSON Map Primitive Type Definitions.
Primitive Type Name Description
AnyURI This is mapped to the JSON "string" data-type with the format of "uri".
Boolean This is mapped to the JSON "boolean" data-type.
DateTime This is mapped to the JSON "string" data-type with the format of "dateTime".
Double This is mapped to the XML "xs:double" data-type.
Integer This is mapped to the JSON "integer" data-type with the format of "int32".
NCName This is mapped to the XML "xs:NCName" data-type.
NonNegativeInteger This is mapped to the XML "xs:nonNegativeInteger" data-type.
NormalizedString This is mapped to the JSON "string" data-type.
String This is mapped to the JSON "string" data-type.

toc | top

6. JSON Payloads

This Section is NOT NORMATIVE.

6.1 "createSection" Request Payload

A tabular description of the request payload is shown in the Table below.

Table 6.1.1 - Tabular representation of the JSON payload for the request message for a "createSection" operation.
Property Name Multiplicity JSON Data-type Description
    qtiMetadata [0..1] Object This is the container for the QTI metadata. Part of this metadata uses the IMS QTI 3.0 Metadata model [QTI, 20d].
            itemTemplate [0..1] Boolean True if the item is actually an item template, in other words, the item changes its appearance based on some random or external factor. An assessmentItem that contains a templateProcessing section.
            timeDependent [0..1] Boolean Whether or not the item is time dependent. A time dependent item takes the length of time taken for an attempt into consideration when scoring.
            composite [0..1] Boolean True if the item comprises more than one interaction, for example, an assessmentItem that contains more than one interaction.
            interactionType [0..*] Array [ Enumeration ] The interaction type(s) of the item. The vocabulary is comprised of the names, as defined in the information model, of the leaf classes derived from interaction.
            portableCustomInteractionContext [0..1] Object When the Item uses a Portable Custom Interaction (PCI), this attribute is used to provide further contextual information about that PCI.
                    customTypeIdentifier [0..1] String This is used alongside an 'interactionType' value of 'portableCustomInteraction' to disambiguate which class of PCI is in use as PCIs can vary widely in terms of how they might need to be psychometrically analyzed. This field could potentially also be used to identify which type of a traditional customInteraction is in use by the item.
                    interactionKind [0..1] String This is used to provide insight into the nature of the PCI e.g. this is a PCI which allows a user to add notes to a musical stave to author some music that might be given a description of 'authoring'. This information could be used by a psychometrician, etc. as an indication of a similar type of standard interaction.
            feedbackType [0..1] Enumeration Describes the type of feedback, if any, available in the item. If feedback is available then it is described as being non-adaptive or adaptive depending on whether the item is itself adaptive. A non-adaptive item generates feedback based on the responses submitted as part of (the last) attempt only. An adaptive item generates feedback that takes into consideration the path taken through the item, in other words, feedback based on the accumulation of all attempts and not just the last.
            solutionAvailable [0..1] Boolean Set to true if a model solution is available for the item. For example, an assessmentItem that provides correct responses for all declared response variables.
            scoringMode [0..*] Array [ Enumeration ] The scoringMode is used to denote that the way in which the scoring is achieved. If the Item includes the response processing then the mode is 'responseprocessing'. If human scoring is required the value is 'human' and if some form of machine processing is required then the value is 'externalmachine'.
            toolName [0..1] String The name of the tool used to author the evaluation object.
            toolVersion [0..1] String The version of the tool used to author the evaluation object.
            toolVendor [0..1] String The company which produced the tool used to author the evaluation object.
    qtiUsagedata [0..1] String This is the Base64 encoded XML conforming to IMS QTI 3.0 Usage Date data model [QTI, 20c].
    sectionConfiguration [1..1] String This is the Base64 encoded data containing section configuration, aligned with adaptive engine (black box). This format will be proprietary to each adaptive CAT Engine.

An example of the request payload is shown in the code block below.

Code 6.1.1 - JSON payload example for the request message for a "createSection" operation.
    {
        "qtiMetadata" : {
            "itemTemplate" : "..Boolean..",
            "timeDependent" : "..Boolean..",
            "composite" : "..Boolean..",
            "interactionType" : [ "associateInteraction"|"choiceInteraction"|"customInteraction"|"drawingInteraction"|"endAttemptInteraction"|"extendedTextInteraction"|"gapMatchInteraction"|"graphicAssociateInteraction"|"graphicGapMatchInteraction"|"graphicOrderInteraction"|"hotspotInteraction"|"hottextInteraction"|"inlineChoiceInteraction"|"matchInteraction"|"mediaInteraction"|"orderInteraction"|"portableCustomInteraction"|"positionObjectInteraction"|"selectPointInteraction"|"sliderInteraction"|"textEntryInteraction"|"uploadInteraction", ..., "..." ] ,
            "portableCustomInteractionContext" : {
                "customTypeIdentifier" : "..NormalizedString..",
                "interactionKind" : "..NormalizedString.."
            },
            "feedbackType" : "adaptive"|"nonadaptive"|"none",
            "solutionAvailable" : "..Boolean..",
            "scoringMode" : [ "human"|"externalmachine"|"responseprocessing", ..., "..." ] ,
            "toolName" : "..String..",
            "toolVersion" : "..String..",
            "toolVendor" : "..String.."
        },
        "qtiUsagedata" : "..String..",
        "sectionConfiguration" : "..String.."
    }
                        

6.2 "createSection" Response Payloads

6.2.1 Response Payloads for the HTTP Codes (201)

A tabular description of the response payload is shown in the Table below.

Table 6.2.1 - Tabular representation of the JSON payload for "201" response messages for a "createSection" operation.
Property Name Multiplicity JSON Data-type Description

An example of the response JSON payload is shown in the code block below. The JSON Schema file that can be used to validate this payload is given in Appendix C1.1b.

Code 6.2.1 - JSON payload example for "201" response messages for a "createSection" operation.
    {
        "sectionIdentifier" : "..String(NCName).."
    }
                        

6.2.2 Response Payloads for the HTTP Codes (400, 401, 500, default)

A tabular description of the response payload is shown in the Table below.

Table 6.2.2 - Tabular representation of the JSON payload for "400, 401, 500, default" response messages for a "createSection" operation.
Property Name Multiplicity JSON Data-type Description
    imsx_codeMajor [1..1] Enumeration The code major value (from the corresponding enumerated vocabulary).
    imsx_severity [1..1] Enumeration The severity value (from the corresponding enumerated vocabulary).
    imsx_description [0..1] String A human readable description supplied by the entity creating the status code information.
    imsx_codeMinor [0..1] Object The set of reported code minor status codes.
            imsx_codeMinorField [1..*] Array [ Object ] Each reported code minor status code.
                    imsx_codeMinorFieldName [1..1] String This should contain the identity of the system that has produced the code minor status code report.
                    imsx_codeMinorFieldValue [1..1] Enumeration The code minor status code (this is a value from the corresponding enumerated vocabulary).

An example of the response JSON payload is shown in the code block below. The JSON Schema file that can be used to validate this payload is given in Appendix C1.1c.

Code 6.2.2 - JSON payload example for "400, 401, 500, default" response messages for a "createSection" operation.
    {
        "imsx_codeMajor" : "success"|"processing"|"failure"|"unsupported",
        "imsx_severity" : "status"|"warning"|"error",
        "imsx_description" : "..String..",
        "imsx_codeMinor" : {
            "imsx_codeMinorField" : [
                {
                    "imsx_codeMinorFieldName" : "..NormalizedString..",
                    "imsx_codeMinorFieldValue" : "fullsuccess"|"forbidden"|"invaliddata"|"unauthorisedrequest"|"internal_server_error"|"server_busy"|"unknownobject"
                },
                {...},
                {...}
            ]
        }
    }
                        

6.3 "createSession" Request Payload

A tabular description of the request payload is shown in the Table below.

Table 6.3.1 - Tabular representation of the JSON payload for the request message for a "createSession" operation.
Property Name Multiplicity JSON Data-type Description
    personalNeedsAndPreferences [0..1] String This is the Base64 encoded XML data for the Personal Needs and Preferences (PNP) for the examinee. This data conforms to the XML as defined in the IMS Access for All Personal Needs and Preferences (AfAPNP) 3.0 XML Binding specification [AFAPNP, 20].
    demographics [0..1] String The Base64 encoding of the JSON data for the Demographics information for the examinee. This data conforms to the JSON as defined in the IMS OneRoster 1.1 specification [OR, 17].
    priorData [0..*] Array [ Object ] This is proprietary data that is supplied to the CAT Engine as a key/value pairs.
            glossaryURI [0..1] String (Format: uri) This is a URI to the definition of the data being supplied in this accompanying key/value pair. This definition should provide a human readable description of the data-type and value space for the value being identified by its key.
            key [1..1] String The key for the value to be supplied.
            value [1..1] String The value being supplied.

An example of the request payload is shown in the code block below.

Code 6.3.1 - JSON payload example for the request message for a "createSession" operation.
    {
        "personalNeedsAndPreferences" : "..NormalizedString..",
        "demographics" : "..NormalizedString..",
        "priorData" : [
            {
                "glossaryURI" : "..URI..",
                "key" : "..String..",
                "value" : "..String.."
            },
            {...},
            {...}
        ]
    }
                        

6.4 "createSession" Response Payloads

6.4.1 Response Payloads for the HTTP Codes (201)

An example of the response payload is shown in the code block below. The JSON Schema file that can be used to validate this payload is given in Appendix C1.2b.

Code 6.4.1 - JSON payload example for "201" response messages for a "createSession" operation.
    {
        "sessionIdentifier" : "..String(NCName).."
        "nextItems" : {
            "itemIdentifiers" : [ "..String(NCName)..", ..., "..String(NCName).." ],
            "stageLength" : ..Number(NonNegativeInteger)..
        },
        "sessionState" : "..NormalizedString.."
    }
                        

6.4.2 Response Payloads for the HTTP Codes (400, 401, 404, 500, default)

A tabular description of the response payload is shown in the Table below.

Table 6.4.2 - Tabular representation of the JSON payload for "400, 401, 404, 500, default" response messages for a "createSession" operation.
Property Name Multiplicity JSON Data-type Description
    imsx_codeMajor [1..1] Enumeration The code major value (from the corresponding enumerated vocabulary).
    imsx_severity [1..1] Enumeration The severity value (from the corresponding enumerated vocabulary).
    imsx_description [0..1] String A human readable description supplied by the entity creating the status code information.
    imsx_codeMinor [0..1] Object The set of reported code minor status codes.
            imsx_codeMinorField [1..*] Array [ Object ] Each reported code minor status code.
                    imsx_codeMinorFieldName [1..1] String This should contain the identity of the system that has produced the code minor status code report.
                    imsx_codeMinorFieldValue [1..1] Enumeration The code minor status code (this is a value from the corresponding enumerated vocabulary).

An example of the response JSON payload is shown in the code block below. The JSON Schema file that can be used to validate this payload is given in Appendix C1.2c.

Code 6.4.2 - JSON payload example for "400, 401, 404, 500, default" response messages for a "createSession" operation.
    {
        "imsx_codeMajor" : "success"|"processing"|"failure"|"unsupported",
        "imsx_severity" : "status"|"warning"|"error",
        "imsx_description" : "..String..",
        "imsx_codeMinor" : {
            "imsx_codeMinorField" : [
                {
                    "imsx_codeMinorFieldName" : "..NormalizedString..",
                    "imsx_codeMinorFieldValue" : "fullsuccess"|"forbidden"|"invaliddata"|"unauthorisedrequest"|"internal_server_error"|"server_busy"|"unknownobject"
                },
                {...},
                {...}
            ]
        }
    }
                        

6.5 "endSection" Request Payload

There is no payload for this request.

6.6 "endSection" Response Payloads

6.6.1 Response Payloads for the HTTP Codes (204)

There is no payload for these responses i.e. only a HTTP response header is returned.

6.6.2 Response Payloads for the HTTP Codes (400, 401, 404, 500, default)

A tabular description of the response payload is shown in the Table below.

Table 6.6.2 - Tabular representation of the JSON payload for "400, 401, 404, 500, default" response messages for a "endSection" operation.
Property Name Multiplicity JSON Data-type Description
    imsx_codeMajor [1..1] Enumeration The code major value (from the corresponding enumerated vocabulary).
    imsx_severity [1..1] Enumeration The severity value (from the corresponding enumerated vocabulary).
    imsx_description [0..1] String A human readable description supplied by the entity creating the status code information.
    imsx_codeMinor [0..1] Object The set of reported code minor status codes.
            imsx_codeMinorField [1..*] Array [ Object ] Each reported code minor status code.
                    imsx_codeMinorFieldName [1..1] String This should contain the identity of the system that has produced the code minor status code report.
                    imsx_codeMinorFieldValue [1..1] Enumeration The code minor status code (this is a value from the corresponding enumerated vocabulary).

An example of the response JSON payload is shown in the code block below. The JSON Schema file that can be used to validate this payload is given in Appendix C1.3c.

Code 6.6.2 - JSON payload example for "400, 401, 404, 500, default" response messages for a "endSection" operation.
    {
        "imsx_codeMajor" : "success"|"processing"|"failure"|"unsupported",
        "imsx_severity" : "status"|"warning"|"error",
        "imsx_description" : "..String..",
        "imsx_codeMinor" : {
            "imsx_codeMinorField" : [
                {
                    "imsx_codeMinorFieldName" : "..NormalizedString..",
                    "imsx_codeMinorFieldValue" : "fullsuccess"|"forbidden"|"invaliddata"|"unauthorisedrequest"|"internal_server_error"|"server_busy"|"unknownobject"
                },
                {...},
                {...}
            ]
        }
    }
                        

6.7 "endSession" Request Payload

There is no payload for this request.

6.8 "endSession" Response Payloads

6.8.1 Response Payloads for the HTTP Codes (204)

There is no payload for these responses i.e. only a HTTP response header is returned.

6.8.2 Response Payloads for the HTTP Codes (400, 401, 404, 500, default)

A tabular description of the response payload is shown in the Table below.

Table 6.8.2 - Tabular representation of the JSON payload for "400, 401, 404, 500, default" response messages for a "endSession" operation.
Property Name Multiplicity JSON Data-type Description
    imsx_codeMajor [1..1] Enumeration The code major value (from the corresponding enumerated vocabulary).
    imsx_severity [1..1] Enumeration The severity value (from the corresponding enumerated vocabulary).
    imsx_description [0..1] String A human readable description supplied by the entity creating the status code information.
    imsx_codeMinor [0..1] Object The set of reported code minor status codes.
            imsx_codeMinorField [1..*] Array [ Object ] Each reported code minor status code.
                    imsx_codeMinorFieldName [1..1] String This should contain the identity of the system that has produced the code minor status code report.
                    imsx_codeMinorFieldValue [1..1] Enumeration The code minor status code (this is a value from the corresponding enumerated vocabulary).

An example of the response JSON payload is shown in the code block below. The JSON Schema file that can be used to validate this payload is given in Appendix C1.4c.

Code 6.8.2 - JSON payload example for "400, 401, 404, 500, default" response messages for a "endSession" operation.
    {
        "imsx_codeMajor" : "success"|"processing"|"failure"|"unsupported",
        "imsx_severity" : "status"|"warning"|"error",
        "imsx_description" : "..String..",
        "imsx_codeMinor" : {
            "imsx_codeMinorField" : [
                {
                    "imsx_codeMinorFieldName" : "..NormalizedString..",
                    "imsx_codeMinorFieldValue" : "fullsuccess"|"forbidden"|"invaliddata"|"unauthorisedrequest"|"internal_server_error"|"server_busy"|"unknownobject"
                },
                {...},
                {...}
            ]
        }
    }
                        

6.9 "getSection" Request Payload

There is no payload for this request.

6.10 "getSection" Response Payloads

6.10.1 Response Payloads for the HTTP Codes (200)

An example of the response payload is shown in the code block below. The JSON Schema file that can be used to validate this payload is given in Appendix C1.5b.

Code 6.10.1 - JSON payload example for "200" response messages for a "getSection" operation.
    {
        "items" : {
            "itemIdentifiers" : [ "..String(NCName)..", ..., "..String(NCName).." ]
        },
        "section" : {
            "qtiMetadata" : {
                "itemTemplate" : "..Boolean..",
                "timeDependent" : "..Boolean..",
                "composite" : "..Boolean..",
                "interactionType" : [ "associateInteraction"|"choiceInteraction"|"customInteraction"|"drawingInteraction"|"endAttemptInteraction"|"extendedTextInteraction"|"gapMatchInteraction"|"graphicAssociateInteraction"|"graphicGapMatchInteraction"|"graphicOrderInteraction"|"hotspotInteraction"|"hottextInteraction"|"inlineChoiceInteraction"|"matchInteraction"|"mediaInteraction"|"orderInteraction"|"portableCustomInteraction"|"positionObjectInteraction"|"selectPointInteraction"|"sliderInteraction"|"textEntryInteraction"|"uploadInteraction", ..., "..." ] ,
                "portableCustomInteractionContext" : {
                    "customTypeIdentifier" : "..NormalizedString..",
                    "interactionKind" : "..NormalizedString.."
                },
                "feedbackType" : "adaptive"|"nonadaptive"|"none",
                "solutionAvailable" : "..Boolean..",
                "scoringMode" : [ "human"|"externalmachine"|"responseprocessing", ..., "..." ] ,
                "toolName" : "..String..",
                "toolVersion" : "..String..",
                "toolVendor" : "..String.."
            },
            "qtiUsagedata" : "..String..",
            "sectionConfiguration" : "..String.."
        },
    }
                        

6.10.2 Response Payloads for the HTTP Codes (400, 401, 404, 500, default)

A tabular description of the response payload is shown in the Table below.

Table 6.10.2 - Tabular representation of the JSON payload for "400, 401, 404, 500, default" response messages for a "getSection" operation.
Property Name Multiplicity JSON Data-type Description
    imsx_codeMajor [1..1] Enumeration The code major value (from the corresponding enumerated vocabulary).
    imsx_severity [1..1] Enumeration The severity value (from the corresponding enumerated vocabulary).
    imsx_description [0..1] String A human readable description supplied by the entity creating the status code information.
    imsx_codeMinor [0..1] Object The set of reported code minor status codes.
            imsx_codeMinorField [1..*] Array [ Object ] Each reported code minor status code.
                    imsx_codeMinorFieldName [1..1] String This should contain the identity of the system that has produced the code minor status code report.
                    imsx_codeMinorFieldValue [1..1] Enumeration The code minor status code (this is a value from the corresponding enumerated vocabulary).

An example of the response JSON payload is shown in the code block below. The JSON Schema file that can be used to validate this payload is given in Appendix C1.5c.

Code 6.10.2 - JSON payload example for "400, 401, 404, 500, default" response messages for a "getSection" operation.
    {
        "imsx_codeMajor" : "success"|"processing"|"failure"|"unsupported",
        "imsx_severity" : "status"|"warning"|"error",
        "imsx_description" : "..String..",
        "imsx_codeMinor" : {
            "imsx_codeMinorField" : [
                {
                    "imsx_codeMinorFieldName" : "..NormalizedString..",
                    "imsx_codeMinorFieldValue" : "fullsuccess"|"forbidden"|"invaliddata"|"unauthorisedrequest"|"internal_server_error"|"server_busy"|"unknownobject"
                },
                {...},
                {...}
            ]
        }
    }
                        

6.11 "submitResults" Request Payload

A tabular description of the request payload is shown in the Table below.

Table 6.11.1 - Tabular representation of the JSON payload for the request message for a "submitResults" operation.
Property Name Multiplicity JSON Data-type Description
    assessmentResult [1..1] Object The set of actual results achieved by the examinee (this is equivalent to the IMS QTI 2.2 Results Reporting data model [QTI, 20b]).
            context [0..1] Object Contains contextual information for the associated testResult and itemResults.
                    sourcedId [0..1] String A unique identifier for the test candidate.
                    sessionIdentifiers [0..*] Array [ Object ] The system that creates the result (for example, the test delivery system) should assign a session identifier that it can use to identify the session. Subsequent systems that process the result might assign their own identifier to the session which should be added to the context if the result is modified and exported for transport again.
                            sourceID [1..1] String (Format: uri) A unique identifier of the system which added this identifier to the result.
                            identifier [1..1] String The system that creates the report should add a session identifier. Subsequent systems that process the results might use their own identifier for the session and should add this too if the result is exported again for further transport.
            testResult [0..1] Object A summary report for a test is represented by an assessment result containing a testResult but no itemResults.
                    identifier [1..1] String The identifier of the test for which this is a result.
                    datestamp [1..1] String (Format: date-time) The date stamp of when this result was recorded.
                    responseVariables [0..*] Array [ Object ] Indicates that a Response Variable is being reported. This is the value of one of the responses associated with an Item in the corresponding ASI instance [QTI, 20a].
                            identifier [1..1] String The identifier of the Response Variable.
                            cardinality [1..1] Enumeration The cardinality of the Response Variable, taken from the corresponding declaration or definition.
                            baseType [0..1] Enumeration The base type of the Response Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.
                            choiceSequence [0..*] Array [ String ] When a response variable is bound to an interaction that supports the shuffling of choices, the sequence of choices experienced by the candidate will vary between test instances. When shuffling is in effect, the sequence of choices should be reported as a sequence of choice identifiers using this attribute.
                            correctResponse [0..1] Object The correct response may be output as part of the report if desired. Systems are not limited to reporting correct responses declared in responseDeclarations. For example, a correct response may be set by a templateRule or may simply have been suppressed from the declaration passed to the delivery engine e.g. for security.
                                    interpretation [0..1] String A human readable interpretation of the correct value.
                                    value [0..*] Array [ Object ] The order of the values is signficant only when the response is of ordered cardinality.
                                            fieldIdentifier [0..1] String This attribute is only used for specifying the field identifier for a value that forms part of a record.
                                            baseType [0..1] Enumeration This attribute is only used for specifying the base-type of a value that forms part of a record.
                                            value [1..1] String The value being supplied.
                            candidateResponse [1..1] Object The response given by the candidate.
                                    value [0..*] Array [ Object ] The value(s) of the response variable. A NULL value, resulting from no response, is indicated by the absence of any value. The order of the values is significant only if the response was declared with ordered cardinality.
                                            fieldIdentifier [0..1] String This attribute is only used for specifying the field identifier for a value that forms part of a record.
                                            baseType [0..1] Enumeration This attribute is only used for specifying the base-type of a value that forms part of a record.
                                            value [1..1] String The value being supplied.
                    templateVariables [0..*] Array [ Object ] Indicates that a Template Variable is being reported. This is the value of one of the template variables associated with an Item in the corresponding ASI instance [QTI, 20a].
                            identifier [1..1] String The identifier of the Template Variable.
                            cardinality [1..1] Enumeration The cardinality of the Template Variable, taken from the corresponding declaration or definition.
                            baseType [0..1] Enumeration The base type of the Template Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.
                            value [0..*] Array [ Object ] The value(s) of the template variable. The order of the values is significant only if the template variable was declared with ordered cardinality.
                                    fieldIdentifier [0..1] String This attribute is only used for specifying the field identifier for a value that forms part of a record.
                                    baseType [0..1] Enumeration This attribute is only used for specifying the base-type of a value that forms part of a record.
                                    value [1..1] String The value being supplied.
                    outcomeVariables [0..*] Array [ Object ] Indicates that an Outcome Variable is being reported. This is the value of one of the outcomes associated with either an Item or Test and defined in the corresponding ASI instance [QTI, 20a].
                            identifier [1..1] String The identifier of the Outcome Variable.
                            cardinality [1..1] Enumeration The cardinality of the Outcome Variable, taken from the corresponding declaration or definition.
                            baseType [0..1] Enumeration The base type of the Outcome Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.
                            view [0..*] Array [ Enumeration ] The views (if any) declared for the outcome must be copied to the report to enable systems that render the report to hide information not relevant in a specific situation. If no values are given, the outcome's value should be considered relevant in all views.
                            interpretation [0..1] String A human readable interpretation of the default value.
                            longInterpretation [0..1] String (Format: uri) An optional link to an extended interpretation of the outcome variable's value.
                            normalMaximum [0..1] Double The normalMaximum attribute optionally defines the maximum magnitude of numeric outcome variables, it must be a positive value. If given, the outcome's value can be divided by normalMaximum and then truncated (if necessary) to obtain a normalized score in the range [-1.0,1.0]. normalMaximum has no affect on responseProcessing or the values that the outcome variable itself can take.
                            normalMinimum [0..1] Double The normalMinimum attribute optionally defines the minimum value of numeric outcome variables, it may be negative.
                            masteryValue [0..1] Double The masteryValue attribute optionally defines a value for numeric outcome variables above which the aspect being measured is considered to have been mastered by the candidate.
                            value [0..*] Array [ Object ] The value(s) of the outcome variable. The order of the values is significant only if the outcome was declared with ordered cardinality.
                                    fieldIdentifier [0..1] String This attribute is only used for specifying the field identifier for a value that forms part of a record.
                                    baseType [0..1] Enumeration This attribute is only used for specifying the base-type of a value that forms part of a record.
                                    value [1..1] String The value being supplied.
            itemResult [0..*] Array [ Object ] When a test result is given the following item results must relate only to items that were selected for presentation as part of the corresponding test session. Furthermore, all items selected for presentation should be reported with a corresponding itemResult.
                    identifier [1..1] String The identifier of the item for which this is a result. For item results that are reported as part of a test result this is the identifier used to refer to the item in the test (see assessmentItemRef). For item results that are reported on their own, this can be any suitable identifier for the item. Where possible, the value should match the identifier attribute on the associated assessmentItem.
                    sequenceIndex [0..1] Integer (Format: int32; Minimum: 0) For item results that are reported as part of a test, this attribute must be used to indicate the position of the item within the specific instance of the test. The first item of the first part of the test is defined to have sequence index 1.
                    datestamp [1..1] String (Format: date-time) The date stamp of when this result was recorded.
                    sessionStatus [1..1] Enumeration The session status is used to interpret the values of the item variables. See the sessionStatus vocabulary.
                    responseVariables [0..*] Array [ Object ] Indicates that a Response Variable is being reported. This is the value of one of the responses associated with an Item in the corresponding ASI instance.
                            identifier [1..1] String The identifier of the Response Variable.
                            cardinality [1..1] Enumeration The cardinality of the Response Variable, taken from the corresponding declaration or definition.
                            baseType [0..1] Enumeration The base type of the Response Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.
                            choiceSequence [0..*] Array [ String ] When a response variable is bound to an interaction that supports the shuffling of choices, the sequence of choices experienced by the candidate will vary between test instances. When shuffling is in effect, the sequence of choices should be reported as a sequence of choice identifiers using this attribute.
                            correctResponse [0..1] Object The correct response may be output as part of the report if desired. Systems are not limited to reporting correct responses declared in responseDeclarations. For example, a correct response may be set by a templateRule or may simply have been suppressed from the declaration passed to the delivery engine e.g. for security.
                                    interpretation [0..1] String A human readable interpretation of the correct value.
                                    value [0..*] Array [ Object ] The order of the values is signficant only when the response is of ordered cardinality.
                                            fieldIdentifier [0..1] String This attribute is only used for specifying the field identifier for a value that forms part of a record.
                                            baseType [0..1] Enumeration This attribute is only used for specifying the base-type of a value that forms part of a record.
                                            value [1..1] String The value being supplied.
                            candidateResponse [1..1] Object The response given by the candidate.
                                    value [0..*] Array [ Object ] The value(s) of the response variable. A NULL value, resulting from no response, is indicated by the absence of any value. The order of the values is significant only if the response was declared with ordered cardinality.
                                            fieldIdentifier [0..1] String This attribute is only used for specifying the field identifier for a value that forms part of a record.
                                            baseType [0..1] Enumeration This attribute is only used for specifying the base-type of a value that forms part of a record.
                                            value [1..1] String The value being supplied.
                    templateVariables [0..*] Array [ Object ] Indicates that a Template Variable is being reported. This is the value of one of the template variables associated with an Item in the corresponding ASI instance.
                            identifier [1..1] String The identifier of the Template Variable.
                            cardinality [1..1] Enumeration The cardinality of the Template Variable, taken from the corresponding declaration or definition.
                            baseType [0..1] Enumeration The base type of the Template Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.
                            value [0..*] Array [ Object ] The value(s) of the template variable. The order of the values is significant only if the template variable was declared with ordered cardinality.
                                    fieldIdentifier [0..1] String This attribute is only used for specifying the field identifier for a value that forms part of a record.
                                    baseType [0..1] Enumeration This attribute is only used for specifying the base-type of a value that forms part of a record.
                                    value [1..1] String The value being supplied.
                    outcomeVariables [0..*] Array [ Object ] Indicates that an Outcome Variable is being reported. This is the value of one of the outcomes associated with either an Item or Test and defined in the corresponding ASI instance.
                            identifier [1..1] String The identifier of the Outcome Variable.
                            cardinality [1..1] Enumeration The cardinality of the Outcome Variable, taken from the corresponding declaration or definition.
                            baseType [0..1] Enumeration The base type of the Outcome Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.
                            view [0..*] Array [ Enumeration ] The views (if any) declared for the outcome must be copied to the report to enable systems that render the report to hide information not relevant in a specific situation. If no values are given, the outcome's value should be considered relevant in all views.
                            interpretation [0..1] String A human readable interpretation of the default value.
                            longInterpretation [0..1] String (Format: uri) An optional link to an extended interpretation of the outcome variable's value.
                            normalMaximum [0..1] Double The normalMaximum attribute optionally defines the maximum magnitude of numeric outcome variables, it must be a positive value. If given, the outcome's value can be divided by normalMaximum and then truncated (if necessary) to obtain a normalized score in the range [-1.0,1.0]. normalMaximum has no affect on responseProcessing or the values that the outcome variable itself can take.
                            normalMinimum [0..1] Double The normalMinimum attribute optionally defines the minimum value of numeric outcome variables, it may be negative.
                            masteryValue [0..1] Double The masteryValue attribute optionally defines a value for numeric outcome variables above which the aspect being measured is considered to have been mastered by the candidate.
                            value [0..*] Array [ Object ] The value(s) of the outcome variable. The order of the values is significant only if the outcome was declared with ordered cardinality.
                                    fieldIdentifier [0..1] String This attribute is only used for specifying the field identifier for a value that forms part of a record.
                                    baseType [0..1] Enumeration This attribute is only used for specifying the base-type of a value that forms part of a record.
                                    value [1..1] String The value being supplied.
                    candidateComment [0..1] String An optional comment supplied by the candidate (see the allowComment in the ASI documentation [QTI, 20a]).
    sessionState [0..1] String The session state information. This is the data that was supplied by the CAT Engine when the session was created or the next set of Items was requested.

An example of the request payload is shown in the code block below.

Code 6.11.1 - JSON payload example for the request message for a "submitResults" operation.
    {
        "assessmentResult" : {
            "context" : {
                "sourcedId" : "..String(NCName)..",
                "sessionIdentifiers" : [
                    {
                        "sourceID" : "..URI..",
                        "identifier" : "..String(NCName).."
                    },
                    {...},
                    {...}
                ]
            },
            "testResult" : {
                "identifier" : "..String(NCName)..",
                "datestamp" : "..Date/Time..",
                "responseVariables" : [
                    {
                        "identifier" : "..String(NCName)..",
                        "cardinality" : "multiple"|"ordered"|"record"|"single",
                        "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                        "choiceSequence" : [ "..String(NCName)..", ..., "..String(NCName).." ],
                        "correctResponse" : {
                            "interpretation" : "..String..",
                            "value" : [
                                {
                                    "fieldIdentifier" : "..String(NCName)..",
                                    "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                    "value" : "..NormalizedString.."
                                },
                                {...},
                                {...}
                            ]
                        },
                        "candidateResponse" : {
                            "value" : [
                                {
                                    "fieldIdentifier" : "..String(NCName)..",
                                    "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                    "value" : "..NormalizedString.."
                                },
                                {...},
                                {...}
                            ]
                        }
                    },
                    {...},
                    {...}
                ],
                "templateVariables" : [
                    {
                        "identifier" : "..String(NCName)..",
                        "cardinality" : "multiple"|"ordered"|"record"|"single",
                        "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                        "value" : [
                            {
                                "fieldIdentifier" : "..String(NCName)..",
                                "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                "value" : "..NormalizedString.."
                            },
                            {...},
                            {...}
                        ]
                    },
                    {...},
                    {...}
                ],
                "outcomeVariables" : [
                    {
                        "identifier" : "..String(NCName)..",
                        "cardinality" : "multiple"|"ordered"|"record"|"single",
                        "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                        "view" : [ "author"|"candidate"|"proctor"|"scorer"|"testConstructor"|"tutor", ..., "..." ] ,
                        "interpretation" : "..String..",
                        "longInterpretation" : "..URI..",
                        "normalMaximum" : ..Number(Double)..,
                        "normalMinimum" : ..Number(Double)..,
                        "masteryValue" : ..Number(Double)..,
                        "value" : [
                            {
                                "fieldIdentifier" : "..String(NCName)..",
                                "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                "value" : "..NormalizedString.."
                            },
                            {...},
                            {...}
                        ]
                    },
                    {...},
                    {...}
                ]
            },
            "itemResult" : [
                {
                    "identifier" : "..String(NCName)..",
                    "sequenceIndex" : ..Number(NonNegativeInteger)..,
                    "datestamp" : "..Date/Time..",
                    "sessionStatus" : "final"|"initial"|"pendingResponseProcessing"|"pendingSubmission",
                    "responseVariables" : [
                        {
                            "identifier" : "..String(NCName)..",
                            "cardinality" : "multiple"|"ordered"|"record"|"single",
                            "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                            "choiceSequence" : [ "..String(NCName)..", ..., "..String(NCName).." ],
                            "correctResponse" : {
                                "interpretation" : "..String..",
                                "value" : [
                                    {
                                        "fieldIdentifier" : "..String(NCName)..",
                                        "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                        "value" : "..NormalizedString.."
                                    },
                                    {...},
                                    {...}
                                ]
                            },
                            "candidateResponse" : {
                                "value" : [
                                    {
                                        "fieldIdentifier" : "..String(NCName)..",
                                        "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                        "value" : "..NormalizedString.."
                                    },
                                    {...},
                                    {...}
                                ]
                            }
                        },
                        {...},
                        {...}
                    ],
                    "templateVariables" : [
                        {
                            "identifier" : "..String(NCName)..",
                            "cardinality" : "multiple"|"ordered"|"record"|"single",
                            "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                            "value" : [
                                {
                                    "fieldIdentifier" : "..String(NCName)..",
                                    "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                    "value" : "..NormalizedString.."
                                },
                                {...},
                                {...}
                            ]
                        },
                        {...},
                        {...}
                    ],
                    "outcomeVariables" : [
                        {
                            "identifier" : "..String(NCName)..",
                            "cardinality" : "multiple"|"ordered"|"record"|"single",
                            "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                            "view" : [ "author"|"candidate"|"proctor"|"scorer"|"testConstructor"|"tutor", ..., "..." ] ,
                            "interpretation" : "..String..",
                            "longInterpretation" : "..URI..",
                            "normalMaximum" : ..Number(Double)..,
                            "normalMinimum" : ..Number(Double)..,
                            "masteryValue" : ..Number(Double)..,
                            "value" : [
                                {
                                    "fieldIdentifier" : "..String(NCName)..",
                                    "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                    "value" : "..NormalizedString.."
                                },
                                {...},
                                {...}
                            ]
                        },
                        {...},
                        {...}
                    ],
                    "candidateComment" : "..String.."
                },
                {...},
                {...}
            ]
        },
        "sessionState" : "..NormalizedString.."
    }
                        

6.12 "submitResults" Response Payloads

6.12.1 Response Payloads for the HTTP Codes (201)

An example of the response payload is shown in the code block below. The JSON Schema file that can be used to validate this payload is given in Appendix C1.6b.

Code 6.12.1 - JSON payload example for "201" response messages for a "submitResults" operation.
    {
        "nextItems" : {
            "itemIdentifiers" : [ "..String(NCName)..", ..., "..String(NCName).." ],
            "stageLength" : ..Number(NonNegativeInteger)..
        },
        "assessmentResult" : {
            "context" : {
                "sourcedId" : "..String(NCName)..",
                "sessionIdentifiers" : [
                    {
                        "sourceID" : "..URI..",
                        "identifier" : "..String(NCName).."
                    },
                    {...},
                    {...}
                ]
            },
            "testResult" : {
                "identifier" : "..String(NCName)..",
                "datestamp" : "..Date/Time..",
                "responseVariables" : [
                    {
                        "identifier" : "..String(NCName)..",
                        "cardinality" : "multiple"|"ordered"|"record"|"single",
                        "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                        "choiceSequence" : [ "..String(NCName)..", ..., "..String(NCName).." ],
                        "correctResponse" : {
                            "interpretation" : "..String..",
                            "value" : [
                                {
                                    "fieldIdentifier" : "..String(NCName)..",
                                    "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                    "value" : "..NormalizedString.."
                                },
                                {...},
                                {...}
                            ]
                        },
                        "candidateResponse" : {
                            "value" : [
                                {
                                    "fieldIdentifier" : "..String(NCName)..",
                                    "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                    "value" : "..NormalizedString.."
                                },
                                {...},
                                {...}
                            ]
                        }
                    },
                    {...},
                    {...}
                ],
                "templateVariables" : [
                    {
                        "identifier" : "..String(NCName)..",
                        "cardinality" : "multiple"|"ordered"|"record"|"single",
                        "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                        "value" : [
                            {
                                "fieldIdentifier" : "..String(NCName)..",
                                "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                "value" : "..NormalizedString.."
                            },
                            {...},
                            {...}
                        ]
                    },
                    {...},
                    {...}
                ],
                "outcomeVariables" : [
                    {
                        "identifier" : "..String(NCName)..",
                        "cardinality" : "multiple"|"ordered"|"record"|"single",
                        "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                        "view" : [ "author"|"candidate"|"proctor"|"scorer"|"testConstructor"|"tutor", ..., "..." ] ,
                        "interpretation" : "..String..",
                        "longInterpretation" : "..URI..",
                        "normalMaximum" : ..Number(Double)..,
                        "normalMinimum" : ..Number(Double)..,
                        "masteryValue" : ..Number(Double)..,
                        "value" : [
                            {
                                "fieldIdentifier" : "..String(NCName)..",
                                "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                "value" : "..NormalizedString.."
                            },
                            {...},
                            {...}
                        ]
                    },
                    {...},
                    {...}
                ]
            },
            "itemResult" : [
                {
                    "identifier" : "..String(NCName)..",
                    "sequenceIndex" : ..Number(NonNegativeInteger)..,
                    "datestamp" : "..Date/Time..",
                    "sessionStatus" : "final"|"initial"|"pendingResponseProcessing"|"pendingSubmission",
                    "responseVariables" : [
                        {
                            "identifier" : "..String(NCName)..",
                            "cardinality" : "multiple"|"ordered"|"record"|"single",
                            "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                            "choiceSequence" : [ "..String(NCName)..", ..., "..String(NCName).." ],
                            "correctResponse" : {
                                "interpretation" : "..String..",
                                "value" : [
                                    {
                                        "fieldIdentifier" : "..String(NCName)..",
                                        "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                        "value" : "..NormalizedString.."
                                    },
                                    {...},
                                    {...}
                                ]
                            },
                            "candidateResponse" : {
                                "value" : [
                                    {
                                        "fieldIdentifier" : "..String(NCName)..",
                                        "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                        "value" : "..NormalizedString.."
                                    },
                                    {...},
                                    {...}
                                ]
                            }
                        },
                        {...},
                        {...}
                    ],
                    "templateVariables" : [
                        {
                            "identifier" : "..String(NCName)..",
                            "cardinality" : "multiple"|"ordered"|"record"|"single",
                            "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                            "value" : [
                                {
                                    "fieldIdentifier" : "..String(NCName)..",
                                    "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                    "value" : "..NormalizedString.."
                                },
                                {...},
                                {...}
                            ]
                        },
                        {...},
                        {...}
                    ],
                    "outcomeVariables" : [
                        {
                            "identifier" : "..String(NCName)..",
                            "cardinality" : "multiple"|"ordered"|"record"|"single",
                            "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                            "view" : [ "author"|"candidate"|"proctor"|"scorer"|"testConstructor"|"tutor", ..., "..." ] ,
                            "interpretation" : "..String..",
                            "longInterpretation" : "..URI..",
                            "normalMaximum" : ..Number(Double)..,
                            "normalMinimum" : ..Number(Double)..,
                            "masteryValue" : ..Number(Double)..,
                            "value" : [
                                {
                                    "fieldIdentifier" : "..String(NCName)..",
                                    "baseType" : "boolean"|"directedPair"|"duration"|"file"|"float"|"identifier"|"integer"|"pair"|"point"|"string"|"uri",
                                    "value" : "..NormalizedString.."
                                },
                                {...},
                                {...}
                            ]
                        },
                        {...},
                        {...}
                    ],
                    "candidateComment" : "..String.."
                },
                {...},
                {...}
            ]
        },
        "sessionState" : "..NormalizedString.."
    }
                        

6.12.2 Response Payloads for the HTTP Codes (400, 401, 404, 500, default)

A tabular description of the response payload is shown in the Table below.

Table 6.12.2 - Tabular representation of the JSON payload for "400, 401, 404, 500, default" response messages for a "submitResults" operation.
Property Name Multiplicity JSON Data-type Description
    imsx_codeMajor [1..1] Enumeration The code major value (from the corresponding enumerated vocabulary).
    imsx_severity [1..1] Enumeration The severity value (from the corresponding enumerated vocabulary).
    imsx_description [0..1] String A human readable description supplied by the entity creating the status code information.
    imsx_codeMinor [0..1] Object The set of reported code minor status codes.
            imsx_codeMinorField [1..*] Array [ Object ] Each reported code minor status code.
                    imsx_codeMinorFieldName [1..1] String This should contain the identity of the system that has produced the code minor status code report.
                    imsx_codeMinorFieldValue [1..1] Enumeration The code minor status code (this is a value from the corresponding enumerated vocabulary).

An example of the response JSON payload is shown in the code block below. The JSON Schema file that can be used to validate this payload is given in Appendix C1.6c.

Code 6.12.2 - JSON payload example for "400, 401, 404, 500, default" response messages for a "submitResults" operation.
    {
        "imsx_codeMajor" : "success"|"processing"|"failure"|"unsupported",
        "imsx_severity" : "status"|"warning"|"error",
        "imsx_description" : "..String..",
        "imsx_codeMinor" : {
            "imsx_codeMinorField" : [
                {
                    "imsx_codeMinorFieldName" : "..NormalizedString..",
                    "imsx_codeMinorFieldValue" : "fullsuccess"|"forbidden"|"invaliddata"|"unauthorisedrequest"|"internal_server_error"|"server_busy"|"unknownobject"
                },
                {...},
                {...}
            ]
        }
    }
                        

toc | top

7. Service OpenAPI Description

This Section is NORMATIVE.

7.1 General Information

The set of General Information defined in the OpenAPI description, and realised in both the JSON and YAML instances, are listed in Tables 7.1a (version 2) and 7.1b (version 3). The syntax and semantics for this information are described in Appendix A3.1.

Table 7.1a - The Set of General Information Defined in the OpenAPI(2) Description.
Swagger Version 2.0
Specification Title Computer Adaptive Testing (CAT) Service
Specification Version 1.0
Description The Computer Adaptive Testing (CAT) Service enables a standard way of implementing adaptive testing using Question and Test Interoperability (QTI). This service has been described using the IMS Model Driven Specification development approach, this being the Platform Specific Model (PSM) of the service.
Terms of Service 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 IMS or its successors or assigns. THIS API DEFINITION 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 IMPLEMENTERS 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 API DEFINITION.
Contact Lisa Mattson (COO), IMS Global (http://www.imsglobal.org). Email: lmattson@imsglobal.org.
License IMS Global - https://www.imsglobal.org/license.html
Host www.imsglobal.org
Base Path /ims/cat/v1p0
Schemes http, https
Consumes application/json
Produces application/json

Table 7.1b - The Set of General Information Defined in the OpenAPI(3) Description.
OpenAPI Version 3.0.0
Specification Title Computer Adaptive Testing (CAT) Service
Specification Version 1.0
Description The Computer Adaptive Testing (CAT) Service enables a standard way of implementing adaptive testing using Question and Test Interoperability (QTI). This service has been described using the IMS Model Driven Specification development approach, this being the Platform Specific Model (PSM) of the service.
Terms of Service https://www.imsglobal.org/license.html
Contact Lisa Mattson (COO), IMS Global (http://www.imsglobal.org). Email: lmattson@imsglobal.org.
License IMS Global - https://www.imsglobal.org/license.html
Servers www.imsglobal.org/ims/cat/v1p0

7.2 Tags Information

The set of Tags defined in the OpenAPI description, and realised in both the JSON and YAML instances, is listed in Table 7.2. The syntax and semantics for these Tags are described in Appendix A3.2.

Table 7.2 - The Set of Tags Defined in the OpenAPI Description.
Tag Name Description
SectionsManager The set of service operations that manage access to the adaptive Sections being handled by the CAT Engine. The set of endpoints assigned to this tag are:
SessionsManager The set of service operations that manage access to the adaptive Sessions being handled by the CAT Engine. The set of endpoints assigned to this tag are:

7.3 Security Information

The OAuth 2 Client Credentials security mode is used for this service. Table 7.3.1 describes the OpenAPI information for the configuration of the OAuth 2.0 Client Credentials. The syntax and semantics for this information are described in Appendix A3.3.

Table 7.3.1 - The Set of OAuth 2.0 Client Credentials Security Information Defined in the OpenAPI Description.
Security Label OAuth2CCG
Type oauth2
Description A CAT engine implementation may adopt any scope structure and naming scheme which meets its requirements, including not using scopes at all. The scopes shown here are recommended, not required.
Flow OAS2 - application
OAS3 - clientCredentials
Token URL https://www.service-dependent.com/oauth2Token
Scopes
  • https://purl.imsglobal.org/cat/v1p0/scope/api
  • https://purl.imsglobal.org/cat/v1p0/scope/configure
  • https://purl.imsglobal.org/cat/v1p0/scope/deliver
Global Scope OAuth2CCG : [ https://purl.imsglobal.org/cat/v1p0/scope/api, https://purl.imsglobal.org/cat/v1p0/scope/configure, https://purl.imsglobal.org/cat/v1p0/scope/deliver ]

7.4 Paths Information

The following Tables describe the OpenAPI information for each of the Paths. The syntax and semantics for these Paths are described in Appendix A3.4.

7.4.1 "/sections" Path

The following Table describes the OpenAPI information for the HTTP Verb "POST" on the "/sections" Path.

Table 7.4.1a - The Path Details for the 'POST' verb with the '/sections' Path.
HTTP Verb: POST
Operation ID createSection
Summary The REST "createbp" request message for the "createSection()" API call.
Tags SectionsManager
Security and Scopes The security modes protecting access to this endpoint are:
  • OAuth2CCG - OAuth 2 Client Credentials Grant

  • The scopes that enable access to this endpoint are:
    • https://purl.imsglobal.org/cat/v1p0/scope/api
    • https://purl.imsglobal.org/cat/v1p0/scope/configure
    Description This is a request to the CAT Engine to create a new adaptive Section. The CAT Engine is responsible for assigning the unique identifier to be used for this Section in other exchanges. This request is NOT idempotent.
    Path Placeholders Path placeholders are not permitted.
    Query Parameters Query parameters are not permitted.
    Responses
    Name Type Description
    201 LUIDDType The response code for when the new Section has been created in the CAT Engine and the associated identifier has been returned.
    400 imsx_StatusInfoDType The request has been declared as 'bad'. This will be due to the provision of bad data in the request payloads, including a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
    401 imsx_StatusInfoDType The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
    500 imsx_StatusInfoDType This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
    default imsx_StatusInfoDType This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.

    7.4.2 "/sections/{sectionIdentifier}" Path

    The following Table describes the OpenAPI information for the HTTP Verb "GET" on the "/sections/{sectionIdentifier}" Path.

    Table 7.4.2a - The Path Details for the 'GET' verb with the '/sections/{sectionIdentifier}' Path.
    HTTP Verb: GET
    Operation ID getSection
    Summary The REST "read" request message for the "getSection()" API call.
    Tags SectionsManager
    Security and Scopes The security modes protecting access to this endpoint are:
  • OAuth2CCG - OAuth 2 Client Credentials Grant

  • The scopes that enable access to this endpoint are:
    • https://purl.imsglobal.org/cat/v1p0/scope/api
    • https://purl.imsglobal.org/cat/v1p0/scope/configure
    Description This request returns the parameters which were used by the CAT engine to create the adaptive section, and the list of the items in the adaptive section's item pool, as configured by the CAT engine. It is recommended that assessment platforms and/or delivery engines use this request to verify that the item pool, as configured by the CAT engine, corresponds exactly to the list of items in the QTI source for the adaptive section. It is also recommended that test administrators verify that each item in the item pool is accessible and deliverable before commencing delivery of candidate sessions. The Get Section request may be used for this, and may be made at any time after a successful Create Section request, as many times as required.
    Path Placeholders
    • {sectionIdentifier} - the LUID that identifies the Section for which the data on the CAT Engine is to be obtained.
    Query Parameters Query parameters are not permitted.
    Responses
    Name Type Description
    200 GetSectionResponseBodyDType The response code for when the list of Items in the section's item pool has been returned. The response message contains the list of Items, the section configuration used to create the section, and any qtiUsagedata and qtiMetadata used to create the section.
    400 imsx_StatusInfoDType The request has been declared as 'bad'. This will be due to the provision of bad data in the request payloads, including a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
    401 imsx_StatusInfoDType The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
    404 imsx_StatusInfoDType The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
    500 imsx_StatusInfoDType This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
    default imsx_StatusInfoDType This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.

    The following Table describes the OpenAPI information for the HTTP Verb "DELETE" on the "/sections/{sectionIdentifier}" Path.

    Table 7.4.2b - The Path Details for the 'DELETE' verb with the '/sections/{sectionIdentifier}' Path.
    HTTP Verb: DELETE
    Operation ID endSection
    Summary The REST "delete" request message for the "endSection()" API call.
    Tags SectionsManager
    Security and Scopes The security modes protecting access to this endpoint are:
  • OAuth2CCG - OAuth 2 Client Credentials Grant

  • The scopes that enable access to this endpoint are:
    • https://purl.imsglobal.org/cat/v1p0/scope/api
    • https://purl.imsglobal.org/cat/v1p0/scope/configure
    Description This request ends all candidate sessions for the section which have not already ended, and ends the section. The sectionIdentifier, sessionIdentifiers, and sessionStates returned from previous requests related to the section become invalid. The delivery engine should not make any further requests related to the section or any session for the section. For a REST-based binding this request uses the DELETE HTTP method because of REST conventions, but the CAT engine is not required to physically delete any session or section data. This request should not be repeated once it has succeeded.
    Path Placeholders
    • {sectionIdentifier} - the LUID that identifies the Section to be deleted on the CAT Engine.
    Query Parameters Query parameters are not permitted.
    Responses
    Name Type Description
    204 N/A The response code for when the identified Section has been deleted in the CAT Engine. There is no response payload.
    400 imsx_StatusInfoDType The request has been declared as 'bad'. This will be due to the provision of bad data in the request payloads, including a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
    401 imsx_StatusInfoDType The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
    404 imsx_StatusInfoDType The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
    500 imsx_StatusInfoDType This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
    default imsx_StatusInfoDType This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.

    7.4.3 "/sections/{sectionIdentifier}/sessions" Path

    The following Table describes the OpenAPI information for the HTTP Verb "POST" on the "/sections/{sectionIdentifier}/sessions" Path.

    Table 7.4.3a - The Path Details for the 'POST' verb with the '/sections/{sectionIdentifier}/sessions' Path.
    HTTP Verb: POST
    Operation ID createSession
    Summary The REST "createbp" request message for the "createSession()" API call.
    Tags SessionsManager
    Security and Scopes The security modes protecting access to this endpoint are:
  • OAuth2CCG - OAuth 2 Client Credentials Grant

  • The scopes that enable access to this endpoint are:
    • https://purl.imsglobal.org/cat/v1p0/scope/api
    • https://purl.imsglobal.org/cat/v1p0/scope/deliver
    Description This request initializes a candidate session for the adaptive section. The request optionally provides the CAT engine with information related to the candidate. The CAT engine returns the initial stage (list of items) to be presented to the candidate. This request may be made multiple times after a successful Create Section request, once per candidate, when each candidate enters the adaptive section on the test. This request is NOT idempotent.
    Path Placeholders
    • {sectionIdentifier} - the LUID that identifies the Section in the CAT Engine to which this new Session is to be assigned.
    Query Parameters Query parameters are not permitted.
    Responses
    Name Type Description
    201 CreateSessionResponseBodyDType The response code for when the new Session has been created in the CAT Engine and the associated identifier has been returned. The response message consists of the identifier allocated to the session, the initial set of Items to be presented and the session state to be used for later requests.
    400 imsx_StatusInfoDType The request has been declared as 'bad'. This will be due to the provision of bad data in the request payloads, including a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
    401 imsx_StatusInfoDType The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
    404 imsx_StatusInfoDType The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
    500 imsx_StatusInfoDType This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
    default imsx_StatusInfoDType This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.

    7.4.4 "/sections/{sectionIdentifier}/sessions/{sessionIdentifier}" Path

    The following Table describes the OpenAPI information for the HTTP Verb "DELETE" on the "/sections/{sectionIdentifier}/sessions/{sessionIdentifier}" Path.

    Table 7.4.4a - The Path Details for the 'DELETE' verb with the '/sections/{sectionIdentifier}/sessions/{sessionIdentifier}' Path.
    HTTP Verb: DELETE
    Operation ID endSession
    Summary The REST "delete" request message for the "endSession()" API call.
    Tags SessionsManager
    Security and Scopes The security modes protecting access to this endpoint are:
  • OAuth2CCG - OAuth 2 Client Credentials Grant

  • The scopes that enable access to this endpoint are:
    • https://purl.imsglobal.org/cat/v1p0/scope/api
    • https://purl.imsglobal.org/cat/v1p0/scope/deliver
    Description This request ends the candidate session. The sessionIdentifier, and the sessionState returned from any previous request in the session, become invalid. The delivery engine should not make any further requests related to the session. For a REST-based binding this request uses the DELETE HTTP method because of REST conventions; but it is not required that CAT engines physically delete data or resources associated with the session. If the identified session cannot be found then the 'unknownobject' status code must be reported.
    Path Placeholders
    • {sectionIdentifier} - the LUID that identifies the Section to be deleted on the CAT Engine.
    • {sessionIdentifier} - the LUID that identifies the Session, in the context of the identified Section, to be deleted on the CAT Engine.
    Query Parameters Query parameters are not permitted.
    Responses
    Name Type Description
    204 N/A The response code for when the identified Session has been deleted in the CAT Engine. There is no response payload.
    400 imsx_StatusInfoDType The request has been declared as 'bad'. This will be due to the provision of bad data in the request payloads, including a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
    401 imsx_StatusInfoDType The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
    404 imsx_StatusInfoDType The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
    500 imsx_StatusInfoDType This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
    default imsx_StatusInfoDType This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.

    7.4.5 "/sections/{sectionIdentifier}/sessions/{sessionIdentifier}/results" Path

    The following Table describes the OpenAPI information for the HTTP Verb "POST" on the "/sections/{sectionIdentifier}/sessions/{sessionIdentifier}/results" Path.

    Table 7.4.5a - The Path Details for the 'POST' verb with the '/sections/{sectionIdentifier}/sessions/{sessionIdentifier}/results' Path.
    HTTP Verb: POST
    Operation ID submitResults
    Summary The REST "update" request message for the "submitResults()" API call.
    Tags SessionsManager
    Security and Scopes The security modes protecting access to this endpoint are:
  • OAuth2CCG - OAuth 2 Client Credentials Grant

  • The scopes that enable access to this endpoint are:
    • https://purl.imsglobal.org/cat/v1p0/scope/api
    • https://purl.imsglobal.org/cat/v1p0/scope/deliver
    Description This request sends the results from the current item stage in a candidate session to the CAT engine. The CAT engine returns its computed outcome variable values for the current stage and the test as a whole. It also returns the next item stage to be presented to the candidate. Instead of the next item stage, it may also return an indication that the adaptive section has ended, by returning an empty list for nextItems. If the identified Section/Session cannot be found then the 'unknownobject' status code must be reported.
    Path Placeholders
    • {sectionIdentifier} - the LUID that identifies the Section in the CAT Engine to be used.
    • {sessionIdentifier} - the LUID that identifies the Session, in the context of the Section, in the CAT Engine to be used.
    Query Parameters Query parameters are not permitted.
    Responses
    Name Type Description
    201 SubmitResultsResponseBodyDType The response code for when the next set of Items to be presented to the examinee has been returned. The response message contains the next set of Items, the session state to be used in later requests and, optionally, the assessment results.
    400 imsx_StatusInfoDType The request has been declared as 'bad'. This will be due to the provision of bad data in the request payloads, including a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
    401 imsx_StatusInfoDType The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
    404 imsx_StatusInfoDType The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
    500 imsx_StatusInfoDType This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
    default imsx_StatusInfoDType This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.

    7.5 Definitions Information

    The following Tables describe the OpenAPI information for each of the JSON Schema Definitions. The syntax and semantics for these JSON Schema Definition descriptions are described in Appendix A3.5.

    7.5.1 "CreateSessionResponseBodyDType" Definition

    This complexType has been created because the response message is a compound structure of more than one returned parameter. The OpenAPI JSON Schema description for the "CreateSessionResponseBodyDType" Complex Type is given in Table 7.5.1.

    Table 7.5.1 - OpenAPI JSON Schema description for the "CreateSessionResponseBodyDType" Complex Type.
    Annotations The response code for when the new Session has been created in the CAT Engine and the associated identifier has been returned. The response message consists of the identifier allocated to the session, the initial set of Items to be presented and the session state to be used for later requests.
    Diagram To be supplied in a later release of this document
    Model sessionIdentifier{1..1}, nextItems{1..1}, sessionState{1..1}
    Source
        "CreateSessionResponseBodyDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "sessionIdentifier" : {
                    "description" : "Model Primitive Datatype = NCName",
                    "type" : "string"
                },
                "nextItems" : {
                    "$ref" : "#/definitions/NextItemSetDType"
                },
                "sessionState" : {
                    "description" : "Model Primitive Datatype = NormalizedString",
                    "type" : "string"
                }
            },
            "additionalProperties" : false
        },
                            

    7.5.2 "GetSectionResponseBodyDType" Definition

    This complexType has been created because the response message is a compound structure of more than one returned parameter. The OpenAPI JSON Schema description for the "GetSectionResponseBodyDType" Complex Type is given in Table 7.5.2.

    Table 7.5.2 - OpenAPI JSON Schema description for the "GetSectionResponseBodyDType" Complex Type.
    Annotations The response code for when the list of Items in the section's item pool has been returned. The response message contains the list of Items, the section configuration used to create the section, and any qtiUsagedata and qtiMetadata used to create the section.
    Diagram To be supplied in a later release of this document
    Model items{1..1}, section{1..1}
    Source
        "GetSectionResponseBodyDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "items" : {
                    "$ref" : "#/definitions/ItemSetDType"
                },
                "section" : {
                    "$ref" : "#/definitions/SectionDType"
                }
            },
            "additionalProperties" : false
        },
                            

    7.5.3 "SubmitResultsResponseBodyDType" Definition

    This complexType has been created because the response message is a compound structure of more than one returned parameter. The OpenAPI JSON Schema description for the "SubmitResultsResponseBodyDType" Complex Type is given in Table 7.5.3.

    Table 7.5.3 - OpenAPI JSON Schema description for the "SubmitResultsResponseBodyDType" Complex Type.
    Annotations The response code for when the next set of Items to be presented to the examinee has been returned. The response message contains the next set of Items, the session state to be used in later requests and, optionally, the assessment results.
    Diagram To be supplied in a later release of this document
    Model nextItems{1..1}, assessmentResult{1..1}, sessionState{1..1}
    Source
        "SubmitResultsResponseBodyDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "nextItems" : {
                    "$ref" : "#/definitions/NextItemSetDType"
                },
                "assessmentResult" : {
                    "$ref" : "#/definitions/AssessmentResultDType"
                },
                "sessionState" : {
                    "description" : "Model Primitive Datatype = NormalizedString",
                    "type" : "string"
                }
            },
            "additionalProperties" : false
        },
                            

    7.5.4 "CreateSectionResponseBodyDType" Definition

    This complexType has been created because the response message is a compound structure of more than one returned parameter. The OpenAPI JSON Schema description for the "CreateSectionResponseBodyDType" Complex Type is given in Table 7.5.4.

    Table 7.5.4 - OpenAPI JSON Schema description for the "CreateSectionResponseBodyDType" Complex Type.
    Annotations The response code for when the new Section has been created in the CAT Engine and the associated identifier has been returned.
    Diagram To be supplied in a later release of this document
    Model sectionIdentifier{1..1}
    Source
        "CreateSectionResponseBodyDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "sectionIdentifier" : {
                    "description" : "Model Primitive Datatype = NCName.",
                    "type" : "string"
                }
            },
            "additionalProperties" : false
        },
                            

    7.5.5 "AssessmentResultDType" Definition

    The OpenAPI JSON Schema description for the "AssessmentResultDType" Complex Type is given in Table 7.5.5.

    Table 7.5.5 - OpenAPI JSON Schema description for the "AssessmentResultDType" Complex Type.
    Annotations An Assessment Result is used to report the results of a candidate's interaction with a test and/or one or more items attempted. Information about the test is optional, in some systems it may be possible to interact with items that are not organized into a test at all. For example, items that are organized with learning resources and presented individually in a formative context.
    Diagram To be supplied in a later release of this document
    Model context{0..1}, testResult{0..1}, itemResult{0..*}
    Source
        "AssessmentResultDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "context" : {
                    "$ref" : "#/definitions/ContextDType"
                },
                "testResult" : {
                    "$ref" : "#/definitions/TestResultDType"
                },
                "itemResult" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/ItemResultDType"
                    }
                },
            },
            "additionalProperties" : false
        },
                            

    7.5.6 "CandidateResponseDType" Definition

    The OpenAPI JSON Schema description for the "CandidateResponseDType" Complex Type is given in Table 7.5.6.

    Table 7.5.6 - OpenAPI JSON Schema description for the "CandidateResponseDType" Complex Type.
    Annotations The response given by the candidate.
    Diagram To be supplied in a later release of this document
    Model value{0..*}
    Source
        "CandidateResponseDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "value" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/ValueDType"
                    }
                },
            },
            "additionalProperties" : false
        },
                            

    7.5.7 "ContextDType" Definition

    The OpenAPI JSON Schema description for the "ContextDType" Complex Type is given in Table 7.5.7.

    Table 7.5.7 - OpenAPI JSON Schema description for the "ContextDType" Complex Type.
    Annotations This is the context for the 'assessmentResult'. It provides the corresponding set of identifiers.
    Diagram To be supplied in a later release of this document
    Model sourcedId{0..1}, sessionIdentifiers{0..*}
    Source
        "ContextDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "sourcedId" : {
                    "description" : "Model Primitive Datatype = NCName. ",
                    "type" : "string"
                },
                "sessionIdentifiers" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/SessionIdentifierDType"
                    }
                },
            },
            "additionalProperties" : false
        },
                            

    7.5.8 "CorrectResponseDType" Definition

    The OpenAPI JSON Schema description for the "CorrectResponseDType" Complex Type is given in Table 7.5.8.

    Table 7.5.8 - OpenAPI JSON Schema description for the "CorrectResponseDType" Complex Type.
    Annotations The correct response may be output as part of the report if desired. Systems are not limited to reporting correct responses declared in responseDeclarations. For example, a correct response may be set by a templateRule or may simply have been suppressed from the declaration passed to the delivery engine e.g. for security.
    Diagram To be supplied in a later release of this document
    Model interpretation{0..1}, value{0..*}
    Source
        "CorrectResponseDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "interpretation" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "value" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/ValueDType"
                    }
                },
            },
            "additionalProperties" : false
        },
                            

    7.5.9 "ItemResultDType" Definition

    The OpenAPI JSON Schema description for the "ItemResultDType" Complex Type is given in Table 7.5.9.

    Table 7.5.9 - OpenAPI JSON Schema description for the "ItemResultDType" Complex Type.
    Annotations The result of an item session is reported with an itemResult. A report may contain multiple results for the same instance of an item representing multiple attempts, progression through an adaptive item or even more detailed tracking. In these cases, each item result must have a different datestamp.
    Diagram To be supplied in a later release of this document
    Model identifier{1..1}, sequenceIndex{0..1}, datestamp{1..1}, sessionStatus{1..1}, responseVariables{0..*}, templateVariables{0..*}, outcomeVariables{0..*}, candidateComment{0..1}
    Source
        "ItemResultDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "identifier" : {
                    "description" : "Model Primitive Datatype = NCName. ",
                    "type" : "string"
                },
                "sequenceIndex" : {
                    "description" : "Model Primitive Datatype = NonNegativeInteger. ",
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 0
                },
                "datestamp" : {
                    "description" : "Model Primitive Datatype = DateTime. ",
                    "type" : "string",
                    "format" : "date-time"
                },
                "sessionStatus" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "final","initial","pendingResponseProcessing","pendingSubmission" ]
                },
                "responseVariables" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/ResponseVariableDType"
                    }
                },
                "templateVariables" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/TemplateVariableDType"
                    }
                },
                "outcomeVariables" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/OutcomeVariableDType"
                    }
                },
                "candidateComment" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "identifier","datestamp","sessionStatus" ],
            "additionalProperties" : false
        },
                            

    7.5.10 "ItemSetDType" Definition

    The OpenAPI JSON Schema description for the "ItemSetDType" Complex Type is given in Table 7.5.10.

    Table 7.5.10 - OpenAPI JSON Schema description for the "ItemSetDType" Complex Type.
    Annotations A set of Item identfiers.
    Diagram To be supplied in a later release of this document
    Model itemIdentifiers{1..*}
    Source
        "ItemSetDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "itemIdentifiers" : {
                    "description" : "Model Primitive Datatype = NCName. ",
                    "type" : "array",
                    "minItems" : 1,
                    "items" : {
                        "type" : "string"
                    }
                },
            },
            "required" : [ "itemIdentifiers" ],
            "additionalProperties" : false
        },
                            

    7.5.11 "KeyValuePairDType" Definition

    The OpenAPI JSON Schema description for the "KeyValuePairDType" Complex Type is given in Table 7.5.11.

    Table 7.5.11 - OpenAPI JSON Schema description for the "KeyValuePairDType" Complex Type.
    Annotations The container for the values assigned to the Key/Value pair.
    Diagram To be supplied in a later release of this document
    Model glossaryURI{0..1} ! key{1..1} ! value{1..1}
    Source
        "KeyValuePairDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "glossaryURI" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "key" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "value" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "key","value" ],
            "additionalProperties" : false
        },
                            

    7.5.12 "NextItemSetDType" Definition

    The OpenAPI JSON Schema description for the "NextItemSetDType" Complex Type is given in Table 7.5.12.

    Table 7.5.12 - OpenAPI JSON Schema description for the "NextItemSetDType" Complex Type.
    Annotations The container for the information about the set of next Items that should be presented to the examinee.
    Diagram To be supplied in a later release of this document
    Model itemIdentifiers{1..*} ! stageLength{0..1}
    Source
        "NextItemSetDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "itemIdentifiers" : {
                    "description" : "Model Primitive Datatype = NCName. ",
                    "type" : "array",
                    "minItems" : 1,
                    "items" : {
                        "type" : "string"
                    }
                },
                "stageLength" : {
                    "description" : "Model Primitive Datatype = NonNegativeInteger. ",
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 0
                },
            },
            "required" : [ "itemIdentifiers" ],
            "additionalProperties" : false
        },
                            

    7.5.13 "OutcomeVariableDType" Definition

    The OpenAPI JSON Schema description for the "OutcomeVariableDType" Complex Type is given in Table 7.5.13.

    Table 7.5.13 - OpenAPI JSON Schema description for the "OutcomeVariableDType" Complex Type.
    Annotations The Item result information related to an 'Outcome Variable'.
    Diagram To be supplied in a later release of this document
    Model identifier{1..1}, cardinality{1..1}, baseType{0..1}, view{0..*}, interpretation{0..1}, longInterpretation{0..1}, normalMaximum{0..1}, normalMinimum{0..1}, masteryValue{0..1}, value{0..*}
    Source
        "OutcomeVariableDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "identifier" : {
                    "description" : "Model Primitive Datatype = NCName. ",
                    "type" : "string"
                },
                "cardinality" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "multiple","ordered","record","single" ]
                },
                "baseType" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                },
                "view" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string",
                        "enum" : [ "author","candidate","proctor","scorer","testConstructor","tutor" ]
                    }
                },
                "interpretation" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "longInterpretation" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "normalMaximum" : {
                    "description" : "Model Primitive Datatype = Double. ",
                    "type" : "number",
                    "format" : "double"
                },
                "normalMinimum" : {
                    "description" : "Model Primitive Datatype = Double. ",
                    "type" : "number",
                    "format" : "double"
                },
                "masteryValue" : {
                    "description" : "Model Primitive Datatype = Double. ",
                    "type" : "number",
                    "format" : "double"
                },
                "value" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/ValueDType"
                    }
                },
            },
            "required" : [ "identifier","cardinality" ],
            "additionalProperties" : false
        },
                            

    7.5.14 "PCIContextDType" Definition

    The OpenAPI JSON Schema description for the "PCIContextDType" Complex Type is given in Table 7.5.14.

    Table 7.5.14 - OpenAPI JSON Schema description for the "PCIContextDType" Complex Type.
    Annotations This is the container for the contextual information that can be supplied for a PCI used within an Item. The contained information is only relevant when there is an 'interactionType' of 'portableCustomInteraction'.
    Diagram To be supplied in a later release of this document
    Model customTypeIdentifier{0..1}, interactionKind{0..1}
    Source
        "PCIContextDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "customTypeIdentifier" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "interactionKind" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
            },
            "additionalProperties" : false
        },
                            

    7.5.15 "QTIMetadataDType" Definition

    The OpenAPI JSON Schema description for the "QTIMetadataDType" Complex Type is given in Table 7.5.15.

    Table 7.5.15 - OpenAPI JSON Schema description for the "QTIMetadataDType" Complex Type.
    Annotations This contains the new category of metadata for the recording of QTI specific information.
    Diagram To be supplied in a later release of this document
    Model itemTemplate{0..1}, timeDependent{0..1}, composite{0..1}, interactionType{0..*}, portableCustomInteractionContext{0..1}, feedbackType{0..1}, solutionAvailable{0..1}, scoringMode{0..*}, toolName{0..1}, toolVersion{0..1}, toolVendor{0..1}
    Source
        "QTIMetadataDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "itemTemplate" : {
                    "description" : "Model Primitive Datatype = Boolean. ",
                    "type" : "boolean"
                },
                "timeDependent" : {
                    "description" : "Model Primitive Datatype = Boolean. ",
                    "type" : "boolean"
                },
                "composite" : {
                    "description" : "Model Primitive Datatype = Boolean. ",
                    "type" : "boolean"
                },
                "interactionType" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string",
                        "enum" : [ "associateInteraction","choiceInteraction","customInteraction","drawingInteraction","endAttemptInteraction","extendedTextInteraction","gapMatchInteraction","graphicAssociateInteraction","graphicGapMatchInteraction","graphicOrderInteraction","hotspotInteraction","hottextInteraction","inlineChoiceInteraction","matchInteraction","mediaInteraction","orderInteraction","portableCustomInteraction","positionObjectInteraction","selectPointInteraction","sliderInteraction","textEntryInteraction","uploadInteraction" ]
                    }
                },
                "portableCustomInteractionContext" : {
                    "$ref" : "#/definitions/PCIContextDType"
                },
                "feedbackType" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "adaptive","nonadaptive","none" ]
                },
                "solutionAvailable" : {
                    "description" : "Model Primitive Datatype = Boolean. ",
                    "type" : "boolean"
                },
                "scoringMode" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string",
                        "enum" : [ "human","externalmachine","responseprocessing" ]
                    }
                },
                "toolName" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string",
                    "maxLength" : 256
                },
                "toolVersion" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string",
                    "maxLength" : 256
                },
                "toolVendor" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string",
                    "maxLength" : 256
                },
            },
            "additionalProperties" : false
        },
                            

    7.5.16 "ResponseVariableDType" Definition

    The OpenAPI JSON Schema description for the "ResponseVariableDType" Complex Type is given in Table 7.5.16.

    Table 7.5.16 - OpenAPI JSON Schema description for the "ResponseVariableDType" Complex Type.
    Annotations The Item result information related to a 'Response Variable'.
    Diagram To be supplied in a later release of this document
    Model identifier{1..1}, cardinality{1..1}, baseType{0..1}, choiceSequence{0..*}, correctResponse{0..1}, candidateResponse{1..1}
    Source
        "ResponseVariableDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "identifier" : {
                    "description" : "Model Primitive Datatype = NCName. ",
                    "type" : "string"
                },
                "cardinality" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "multiple","ordered","record","single" ]
                },
                "baseType" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                },
                "choiceSequence" : {
                    "description" : "Model Primitive Datatype = NCName. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string"
                    }
                },
                "correctResponse" : {
                    "$ref" : "#/definitions/CorrectResponseDType"
                },
                "candidateResponse" : {
                    "$ref" : "#/definitions/CandidateResponseDType"
                },
            },
            "required" : [ "identifier","cardinality","candidateResponse" ],
            "additionalProperties" : false
        },
                            

    7.5.17 "ResultsDType" Definition

    The OpenAPI JSON Schema description for the "ResultsDType" Complex Type is given in Table 7.5.17.

    Table 7.5.17 - OpenAPI JSON Schema description for the "ResultsDType" Complex Type.
    Annotations This is the container for the results that have been accrued by the examinee. These are passed to the CAT Engine to support the selection of the next set of Items.
    Diagram To be supplied in a later release of this document
    Model assessmentResult{1..1} ! sessionState{0..1}
    Source
        "ResultsDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "assessmentResult" : {
                    "$ref" : "#/definitions/AssessmentResultDType"
                },
                "sessionState" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
            },
            "required" : [ "assessmentResult" ],
            "additionalProperties" : false
        },
                            

    7.5.18 "SectionDType" Definition

    The OpenAPI JSON Schema description for the "SectionDType" Complex Type is given in Table 7.5.18.

    Table 7.5.18 - OpenAPI JSON Schema description for the "SectionDType" Complex Type.
    Annotations The container for the definition of the Section that is to be created in the CAT Engine. A Section is aligned to a QTI AssessmentSection [QTI, 20a].
    Diagram To be supplied in a later release of this document
    Model qtiMetadata{0..1} ! qtiUsagedata{0..1} ! sectionConfiguration{1..1}
    Source
        "SectionDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "qtiMetadata" : {
                    "$ref" : "#/definitions/QTIMetadataDType"
                },
                "qtiUsagedata" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "sectionConfiguration" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "sectionConfiguration" ],
            "additionalProperties" : false
        },
                            

    7.5.19 "SessionDType" Definition

    The OpenAPI JSON Schema description for the "SessionDType" Complex Type is given in Table 7.5.19.

    Table 7.5.19 - OpenAPI JSON Schema description for the "SessionDType" Complex Type.
    Annotations This is the container for the session configuration data that must be supplied to the CAT Engine when the session is to be created.
    Diagram To be supplied in a later release of this document
    Model personalNeedsAndPreferences{0..1} ! demographics{0..1} ! priorData{0..*}
    Source
        "SessionDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "personalNeedsAndPreferences" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "demographics" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "priorData" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/KeyValuePairDType"
                    }
                },
            },
            "additionalProperties" : false
        },
                            

    7.5.20 "SessionIdentifierDType" Definition

    The OpenAPI JSON Schema description for the "SessionIdentifierDType" Complex Type is given in Table 7.5.20.

    Table 7.5.20 - OpenAPI JSON Schema description for the "SessionIdentifierDType" Complex Type.
    Annotations The system that creates the result (for example, the test delivery system) should assign a session identifier that it can use to identify the session.
    Diagram To be supplied in a later release of this document
    Model sourceID{1..1}, identifier{1..1}
    Source
        "SessionIdentifierDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "sourceID" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "identifier" : {
                    "description" : "Model Primitive Datatype = NCName. ",
                    "type" : "string"
                },
            },
            "required" : [ "sourceID","identifier" ],
            "additionalProperties" : false
        },
                            

    7.5.21 "TemplateVariableDType" Definition

    The OpenAPI JSON Schema description for the "TemplateVariableDType" Complex Type is given in Table 7.5.21.

    Table 7.5.21 - OpenAPI JSON Schema description for the "TemplateVariableDType" Complex Type.
    Annotations The Item result information related to a 'Template Variable'.
    Diagram To be supplied in a later release of this document
    Model identifier{1..1}, cardinality{1..1}, baseType{0..1}, value{0..*}
    Source
        "TemplateVariableDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "identifier" : {
                    "description" : "Model Primitive Datatype = NCName. ",
                    "type" : "string"
                },
                "cardinality" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "multiple","ordered","record","single" ]
                },
                "baseType" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                },
                "value" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/ValueDType"
                    }
                },
            },
            "required" : [ "identifier","cardinality" ],
            "additionalProperties" : false
        },
                            

    7.5.22 "TestResultDType" Definition

    The OpenAPI JSON Schema description for the "TestResultDType" Complex Type is given in Table 7.5.22.

    Table 7.5.22 - OpenAPI JSON Schema description for the "TestResultDType" Complex Type.
    Annotations The container for the Test result. When a test result is given the following item results must relate only to items that were selected for presentation as part of the corresponding test session. Furthermore, all items selected for presentation should be reported with a corresponding itemResult.
    Diagram To be supplied in a later release of this document
    Model identifier{1..1}, datestamp{1..1}, responseVariables{0..*}, templateVariables{0..*}, outcomeVariables{0..*}
    Source
        "TestResultDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "identifier" : {
                    "description" : "Model Primitive Datatype = NCName. ",
                    "type" : "string"
                },
                "datestamp" : {
                    "description" : "Model Primitive Datatype = DateTime. ",
                    "type" : "string",
                    "format" : "date-time"
                },
                "responseVariables" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/ResponseVariableDType"
                    }
                },
                "templateVariables" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/TemplateVariableDType"
                    }
                },
                "outcomeVariables" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/OutcomeVariableDType"
                    }
                },
            },
            "required" : [ "identifier","datestamp" ],
            "additionalProperties" : false
        },
                            

    7.5.23 "ValueDType" Definition

    The OpenAPI JSON Schema description for the "ValueDType" Complex Type is given in Table 7.5.23.

    Table 7.5.23 - OpenAPI JSON Schema description for the "ValueDType" Complex Type.
    Annotations A class that can represent a single value of any baseType in variable declarations and result reports. The base-type is defined by the baseType attribute of the declaration except in the case of variables with record cardinality.
    Diagram To be supplied in a later release of this document
    Model fieldIdentifier{0..1}, baseType{0..1}, value{1..1}
    Source
        "ValueDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "fieldIdentifier" : {
                    "description" : "Model Primitive Datatype = NCName. ",
                    "type" : "string"
                },
                "baseType" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                },
                "value" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
            },
            "required" : [ "value" ],
            "additionalProperties" : false
        },
                            

    7.5.24 "imsx_CodeMinorDType" Definition

    The OpenAPI JSON Schema description for the "imsx_CodeMinorDType" Complex Type is given in Table 7.5.24.

    Table 7.5.24 - OpenAPI JSON Schema description for the "imsx_CodeMinorDType" Complex Type.
    Annotations This is the container for the set of code minor status codes reported in the responses from the Service Provider.
    Diagram To be supplied in a later release of this document
    Model imsx_codeMinorField{1..*}
    Source
        "imsx_CodeMinorDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "imsx_codeMinorField" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 1,
                    "items" : {
                        "$ref" : "#/definitions/imsx_CodeMinorFieldDType"
                    }
                },
            },
            "required" : [ "imsx_codeMinorField" ],
            "additionalProperties" : false
        },
                            

    7.5.25 "imsx_CodeMinorFieldDType" Definition

    The OpenAPI JSON Schema description for the "imsx_CodeMinorFieldDType" Complex Type is given in Table 7.5.25.

    Table 7.5.25 - OpenAPI JSON Schema description for the "imsx_CodeMinorFieldDType" Complex Type.
    Annotations This is the container for a single code minor status code.
    Diagram To be supplied in a later release of this document
    Model imsx_codeMinorFieldName{1..1}, imsx_codeMinorFieldValue{1..1}
    Source
        "imsx_CodeMinorFieldDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "imsx_codeMinorFieldName" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "imsx_codeMinorFieldValue" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "fullsuccess","forbidden","invaliddata","unauthorisedrequest","internal_server_error","server_busy","unknownobject" ]
                },
            },
            "required" : [ "imsx_codeMinorFieldName","imsx_codeMinorFieldValue" ],
            "additionalProperties" : false
        },
                            

    7.5.26 "imsx_StatusInfoDType" Definition

    The OpenAPI JSON Schema description for the "imsx_StatusInfoDType" Complex Type is given in Table 7.5.26.

    Table 7.5.26 - OpenAPI JSON Schema description for the "imsx_StatusInfoDType" Complex Type.
    Annotations This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.
    Diagram To be supplied in a later release of this document
    Model imsx_codeMajor{1..1}, imsx_severity{1..1}, imsx_description{0..1}, imsx_codeMinor{0..1}
    Source
        "imsx_StatusInfoDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "imsx_codeMajor" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "success","processing","failure","unsupported" ]
                },
                "imsx_severity" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "status","warning","error" ]
                },
                "imsx_description" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "imsx_codeMinor" : {
                    "$ref" : "#/definitions/imsx_CodeMinorDType"
                },
            },
            "required" : [ "imsx_codeMajor","imsx_severity" ],
            "additionalProperties" : false
        },
                            

    toc | top

    8. Extending and Profiling the Service

    8.1. Extending the Service

    Proprietary extensions of the service are based upon two approaches:

    It is NOT permitted to change the behavior of the current set of operations. Such changes MUST be supported by the creation of new operations.

    8.1.1. Proprietary Operations

    The definition of new operations should follow the same format as adopted herein. The new operations should be defined using a new interface type. Every operation must result in the return of a status code that describes the final state of the request on the target end system. A new version of the OpenAPI files should also be generated with the new operation definitions.

    An example of creating such an extension is given in the accompanying Best Practices document [CAT, 20c].

    8.1.2. Profiling the Service

    Currently, data extensions are NOT permitted. Within the OpenAPI files, data extensions are explicitly prohibited by the JSON Schema definition.

    8.2. Profiling the Service

    This Service can be profiled. In general, Profiling is used to:

    Valid Profiles must be restrictive i.e. optional features can be removed or constraints increased but new features must not be added. A Profile of this service is made by annotating the UML supplied with the documentation for the specification.

    It is strongly recommended that a profile of this specification is undertaken either by, or with the close support, of IMS Global. However, no matter who is responsible for creating the profile artifacts (documents, OpenAPI files, XSDs, etc.), it is strongly recommended that the IMS specification tools are used. This will ensure that the artifacts are consistent with the base specifications and that useful support documentation is automatically produced e.g. creation of a document that summarizes the differences between the base specification and the profile. Organizations wishing to produce a profile of this specification should contact Lisa Mattson (IMS Global Chief Operations Officer) at: lmattson@imsglobal.org.

    toc | top

    References

    [AFAPNP, 20] Access for All Personal Needs and Preferences (AFA PNP) 3.0 XSD Binding Candidate Final 2.0, Tom Hoffman, Madeleine Rithberg and Colin Smythe, IMS Global Learning Consortium Inc., June 2020, https://www.imsglobal.org/afa/latest.
    [CAT, 20a] IMS Computer Adaptive Testing (CAT) 1.0 Service Model Public Candidate Final Document, J.Carlson, M.Molenaar, M.McKell and C.Smythe, IMS Global Learning Consortium Inc., November 2020, www.imsglobal.org/spec/cat/latest.
    [CAT, 20b] IMS Computer Adaptive Testing (CAT) 1.0 Conformance and Certification Public Candidate Final Document, J.Carlson, M.Molenaar, M.McKell and C.Smythe, IMS Global Learning Consortium Inc., November 2020, www.imsglobal.org/spec/cat/latest.
    [CAT, 20c] IMS Computer Adaptive Testing (CAT) 1.0 Implementation Guide Public Candidate Final Document, J.Carlson, M.Molenaar, M.McKell and C.Smythe, IMS Global Learning Consortium Inc., November 2020, www.imsglobal.org/spec/cat/latest.
    [I-BAT, 06] IMS Binding Auto-generation Toolkit (I-BAT), C.Smythe, IMS Global Learning Consortium Inc., July, 2006.
    [ISO 8601] ISO8601:2004 Data elements and interchange formats - Information interchange - Representation of dates and times, ISO, International Standards Organization (ISO), 2000.
    [OAS, 14] OpenAPI Specification (version 2), D.Miller, J.Harmon, J.Whitlock, K.Hahn, M.Gardiner, M.Ralphson, R.Dolin, R.Ratovsky and T.Tam, OpenAPI Initiative (Linux Foundation), September 2014, https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md.
    [OAS, 17] OpenAPI Specification (version 3), D.Miller, J.Whitlock, M.Gardiner, M.Ralphson, R.Ratovsky and U.Sarid, OpenAPI Initiative (Linux Foundation), July 2017, https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md.
    [OR, 17] OneRoster 1.1 REST/JSON Service Final Release 1.0, C.Smythe and P.Nicholls, IMS Global Learning Consortium Inc., April 2017, https://www.imsglobal.org/oneroster-v11-final-specification.
    [QTI, 20a] IMS Question and Test Interoperability (QTI): Assessment, Section and Item (ASI) Information Model v3.0, Gary Driscoll, Tom Hoffmann, Justin Marks, Paul Grudnitski, Mark Molenaar, Colin Smythe and Mark McKell, IMS Global Learning Consortium Inc., June 2020, https://www.imsglobal.org/question/qtiv3p0/imsqtiv3p0_asi_infomodelcfv1p0.html.
    [QTI, 20b] IMS Question and Test Interoperability (QTI) 3.0 Results Reporting Information Model 1.0, Gary Driscoll, Tom Hoffmann, Justin Marks, Paul Grudnitski, Mark Molenaar, Colin Smythe and Mark McKell, IMS Global Learning Consortium Inc., June 2020, https://www.imsglobal.org/question/qtiv3p0/imsqtiv3p0_results_infobindcfv1p0.html.
    [QTI, 20c] IMS Question and Test Interoperability (QTI) 3.0 Usage Data Information Model 1.0, Gary Driscoll, Tom Hoffmann, Justin Marks, Paul Grudnitski, Mark Molenaar, Colin Smythe and Mark McKell, IMS Global Learning Consortium Inc., June 2020, https://www.imsglobal.org/question/qtiv3p0/imsqtiv3p0_usagedata_infobindcfv1p0.html.
    [QTI, 20d] IMS Question and Test Interoperability (QTI) 3.0 Metadata Information Model 1.0, Gary Driscoll, Tom Hoffmann, Justin Marks, Paul Grudnitski, Mark Molenaar, Colin Smythe and Mark McKell, IMS Global Learning Consortium Inc., June 2020, https://www.imsglobal.org/question/qtiv3p0/imsqtiv3p0_metadatai_infobindcfv1p0.html.
    [RFC 2045] Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies, N. Freed and N. Borenstein, IETF (RFC 2045), November 1996, https://www.ietf.org/rfc/rfc2045.txt.
    [RFC 2119] Key words for use in RFCs to Indicate Requirement Levels, S. Bradner, IETF (RFC 2119), March 1997, https://tools.ietf.org/html/rfc2119.
    [RFC 2617] HTTP Authentication: Basic and Digest Access Authentication, J. Franks, P. Hallam-Baker, J. Hostetler, S. Lawrence, P. Leach, A. Luotonen and L. Stewart, IETF (RFC 2617), 1999, https://tools.ietf.org/pdf/rfc2617.txt.
    [RFC 3066] Tags for the Identification of Languages, H.Alvestrand, IETF (RFC 3066), January 2001, https://www.ietf.org/rfc/rfc3066.txt.
    [RFC 6749] The OAuth 2.0 Authorization Framework, D.Hardt, IETF (RFC 6749), 2012, https://tools.ietf.org/pdf/rfc6749.txt.
    [RFC 6750] The OAuth 2.0 Authorization Framework: Bearer Token Usage, D.Hardt, IETF (RFC 6750), 2012, https://tools.ietf.org/pdf/rfc6750.txt.
    [URI, 98] RFC 2396 Uniform Resource Identifiers (URI): Generic Syntax, T. Berners-Lee, R. Fielding and L. Masinter, IETF (RFC 2396), August 1998, https://www.ietf.org/rfc/rfc2396.txt..
    [VDEX, 04] IMS Vocabulary Definition Exchange (VDEX) 1.0, A.Cooper, IMS Global Learning Consortium Inc., Februsry 2004, https://www.imsglobal.org/vdex/vdexv1p0/imsvdex_infov1p0.html.

    toc | top

    Appendix A REST/JSON Modeling Terms

    This Section is NOT NORMATIVE.

    A1 REST Endpoint Description Explanations

    A1.1 REST Endpoint Mapping Table Explanation

    Table A1.1 provides the key to the descriptions of the mapping between a service calls and its REST endpoint URL-leaf.

    Table A1.1 The key to the descriptions of the mapping between a service calls and its REST endpoint URL-leaf.
    Category Definition and Usage
    Service Call The name of the service call as defined in the associated Behavioral Model.
    REST Endpoint The REST endpoint URL leaf that is used to complete the request URL. This value must be appended to the host server (defined by the implementation) and API Root URL and version (defined in the specification).
    HTTP Verb The HTTP verb that must be used for the request message. This is enumerated as: GET, PUT, POST and DELETE. The rules of mapping are:
    • GET - request to read the identified resource from the service provider;
    • PUT - request to write the supplied resource on the service provider using the given resource identifier;
    • POST - request to write the supplied resource on the service provider and the service provider must assign the unique identifier;
    • DELETE - request to delete the identified resource.

    toc | top

    A1.2 Query Parameter Table Explanation

    Table A1.2 provides the key to the descriptions of the query parameters that are permitted for an endpoint.

    Table A1.2 The key to the descriptions of the data attribute/characteristic tables.
    Category Definition and Usage
    Parameter Name The name given to the query parameter being described.
    Data Type This is the data-type of the parameter. The data-type can take many forms:
    • Enumeration - a list of the permitted values;
    • Primitive Data-types from:-
      • AnyTypeLax - the namespace data-type i.e. defining data from any context (this is used for allowing any form of extension);
      • AnyURI - the AnyURI data-type (absolute or relative URI);
      • Base - the base data-type for defining a base URI/URL link reference;
      • Boolean - the boolean data-type (with permitted values of "true" and "false");
      • Date - the date data-type (using the [ISO 8601] format);
      • DateTime - the date/time data-type (using the [ISO 8601] format);
      • Decimal - the decimal data-type (a variable precision number that is either positive or negative);
      • Double - the double data-type (double precision floating point number - 64bit);
      • Duration - the duration data-type (using the [ISO 8601] format)
      • Empty - the associated instance must be empty;
      • Float - the float data-type (single precision floating point number - 32bit);
      • ID - the unique identifier data-type;
      • IDREF - the reference to a previously defined unique identifier data-type (ID);
      • IDREFS - a list, whitespace separated, of references to a previously defined unique identifier data-type (ID);
      • Int - the int data-type (this is derived from the "decimal" data-type);
      • Integer - the integer data-type (using the);
      • Language - the language data-type as defined in [RFC 3066];
      • Namespace - the namespace data-type i.e. defining data from a context other than that as the default for the data model (this is used for importing other data models);
      • NamespaceLax - the namespace data-type i.e. defining data from a context other than that as the default for the data model (this is used for importing other data models but being lax on the validation);
      • NonNegativeInteger - the non-negative integer data-type (this is derived from the "integer" data-type) i.e. an integer that is zero or higher;
      • NCName - the NCName data-type (derived from the Name data-type);
      • NormalizedString - the normalized string data type (strings with line feeds, carriage returns and tab characters removed);
      • PositiveInteger - the positive integer data-type (this is derived from the "nonNegativeinteger" data-type) i.e. an integer that is one or higher;
      • String - the normalized string data type;
      • Time - the time data-type (using the [ISO 8601] format).
    Value Space The range of valid values for this parameter (including any default value). If the value space is unspecified, it is not known or is not important. This value space must be defined in terms of the associated data-type.
    Multiplicity A property of the parameter indicating the number of values that may be assigned to the parameter (this occurs as a comma separated list). The values of this property are expressed as a range or shorthand for a range using the notation:
    • "0..1" [optional; restricted]
    • "0..*" [optional; unrestricted]
    • "1" [mandatory; restricted]
    • "1..*" [mandatory; unrestricted]
    Description Contains descriptions relating to the query parameter and its values space.

    toc | top

    A1.3 HTTP Codes and Handling for each Endpoint Table Explanation

    Table A1.3 provides the key to the descriptions of the list of HTTP codes and handling for each endpoint.

    Table A1.3 The key to the descriptions of the list of HTTP codes and handling for each endpoint.
    Category Definition and Usage
    REST Endpoint The REST endpoint URL leaf that is used to complete the request URL. This value must be appended to the host server (defined by the implementation) and API Root URL and version (defined in the specification).
    HTTP Verb The HTTP verb that must be used for the request message. This is enumerated as: GET, PUT, POST and DELETE. The rules of mapping are:
    • GET - request to read the identified resource from the service provider;
    • PUT - request to write the supplied resource on the service provider using the given resource identifier;
    • POST - request to write the supplied resource on the service provider and the service provider must assign the unique identifier;
    • DELETE - request to delete the identified resource.
    HTTP Codes and Handling The list of HTTP codes that may be returned by the service provider. A description of the cause of the HTTP code is supplied along with a link to the definition of the associated JSON payload structure that contains the detailed status information.

    toc | top

    A2 UML to JSON Mapping Description Explanations

    A2.1 Service Parameter Payload Properties UML/JSON Mapping Table Definition

    Table A2.1 provides the key to the descriptions of UML to JSON service parameter mapping tables.

    Table A2.1 The key to the descriptions of UML to JSON service parameter mapping tables.
    Feature Definition and Usage
    Operation Name The name operation (this will be a list of all of the operations for the set of defined interfaces).
    Parameter Name The name of the service parameter (these are the parameters listed for the operation that are not mapped to endpoint query parameters).
    UML Class The name of the class, the type of the parameter, in the UML diagrams (each class will have an associated stereotype label to denote its modelling interpretation). If the information model description is contained within the same document, this value is hot-linked to that description.
    JSON Name The equivalent name of the JSON parameter name in the JSON payload.
    JSON Type The JSON type - this will be either "Object" or "Array of Objects".
    JSON Schema Data Type The data-type in the context of the JSON Schema. This is hot-linked to the corresponding description table in the binding.

    toc | top

    A2.2 UML/JSON Payload Class Mapping Table Definition

    Table A2.2 provides the key to the descriptions of UML to JSON payload class mapping tables. This table shows the relationship between the two modelling components:

    Table A2.2 The key to the descriptions of UML to JSON payload class mapping tables.
    Feature Definition and Usage
    Name The name of the UML class and the associated set of attributes and characteristics. The first row is used to describe the UML class. Camel-case is used for the attribute and characteristic names.
    UML Artefact The UML Class will be denoted as "Root" or "Core" depending on the nature of the class. The list of attributes (mapped to JSON properties) and characteristics (mapped to JSON properties) will be identified as either "Attributes" or "Characteristics".
    Data Type The data-type has several permitted values:
    • PT:... - denotes a primitive type with "..." replaced by the actual primitiveType name
    • DT:... (PT:...) - denotes a derived type of name "..." derived from the primitive type "PT:..."
    • [Enumeration(...)] - denotes an enumeration of name "..."
    • [List(...)] - denotes a list of the name "..."
    • [Union(...)] - denotes a union of one or more data-types with the name "..."
    • [Imported(...)] - denotes a class with the name "..." has been imported from another specification
    • "Container[...]" - denotes a class of stereotype "..."
    Multiplicity The multiplicity of the child attribute/characteristic. The value for the Class itself is "-N/A-". The multiplicity values are:
    • "0..1" [optional; restricted]
    • "0..*" [optional; unrestricted]
    • "1" [mandatory; restricted]
    • "1..*" [mandatory; unrestricted]
    The multiplicity will also indicate when groups of elements have variable multiplicity. In the case when a selection between groups of elements is used then this is denoted by "XOR" being displayed above the multiplicity for each of the grouped elements. Alongside the XOR is the multiplicity of the group as a whole.
    JSON Name This is the equivalent name of the UML artefact in the JSON.
    JSON Type The JSON data-type. For the Class this will have the value "Object". For the attributes the value is either "Property" or "Array of Properties" depending on the multiplicity. For the characteristics the value is either "Properties" or "Array of Properties" depending on the multiplicity.

    toc | top

    A2.3 UML/JSON Enumerated and Enumerated List Class Mapping Table Definition

    Table A2.3 provides the key to the descriptions of UML to JSON enumerated and enumerated list class mapping tables.

    Table A2.3 The key to the descriptions of UML to JSON enumerated and enumerated list class mapping tables.
    Feature Definition and Usage
    Enumeration Class Name or Enumeration List Class Name The name of the enumeration class or the enumeration list class.
    Description The list of permitted tokens for the enumeration or list. Each value is separated by the "|" character.

    toc | top

    A2.4 UML/JSON Primitive Types Mapping Table Definition

    Table A2.4 provides the key to the descriptions of UML to JSON primitive-type mapping tables.

    Table A2.4 The key to the descriptions of UML to JSON primitive-type mapping tables.
    Feature Definition and Usage
    Primitive Type Name The name of the primitve type used in the specification. Links to the definition of the primitive types, if provided elsewhere in the document, are supplied.
    Description The equivalent base data type that is used in the JSON binding.

    toc | top

    A3 OpenAPI Descriptions Explanations

    These definitions are with respect to the OpenAPI version 2 [OAS, 14] and version 3 [OAS, 17] specifications.

    A3.1 OpenAPI General Information Table Explanation

    Tables A3.1a and A3.1b provide the key to the OpenAPI(2) and OpenAPI(3) general information respectively.

    Table A3.1a The key to the tabular description of the OpenAPI(2) general information.
    Category Definition and Usage
    Swagger Version The version of the OpenAPI/Swagger specification for this OpenAPI description (this must be set as 2.0).
    Specification Title The title of the specification being described.
    Specification Version The version of the specification being described.
    Description A short, human readable description of the specification being described using OpenAPI.
    Terms of Service The Terms of Service for the API.
    Contact The contact information for the API. For the IMS OpenAPI released files this will be set as "Lisa Mattson (IMS COO)". When used for an implementation this should be changed to the actual contact person.
    License The URL for the associated IMS License for the use of this OpenAPI description.
    Host The host (name or ip) serving the API. For the IMS OpenAPI(2) released files this will be set as "www.imsglobal.org". When used for an implementation this should be changed to the actual host.
    Base Path The base path that MUST be used in the endpoint URLs (this is relative to the host).
    Schemes The set of transfer protocols that are supported using this API. This is a comma separated list.
    Consumes A list of MIME types the APIs can consume. This is a comma separated list.
    Produces A list of MIME types the APIs can produce. This is a comma separated list.

    Table A3.1b The key to the tabular description of the OpenAPI(3) general information.
    Category Definition and Usage
    OpenAPI Version The version of the OpenAPI specification for this OpenAPI description (this must be set as 3.0.0).
    Specification Title The title of the specification being described.
    Specification Version The version of the specification being described.
    Description A short, human readable description of the specification being described using OpenAPI.
    Terms of Service The URL for the associated Terms of Service for the use of this OpenAPI description.
    Contact The contact information for the API. For the IMS OpenAPI released files this will be set as "Lisa Mattson (IMS COO)". When used for an implementation this should be changed to the actual contact person.
    License The URL for the associated IMS License for the use of this OpenAPI description.
    Servers The host (name or ip) serving the API. For the IMS OpenAPI(3) released files this will be set as "www.imsglobal.org/{base-path}". When used for an implementation this should be changed to the actual host.

    toc | top

    A3.2 OpenAPI Tags Table Explanation

    Table A3.2 provides the key to the tabular description of the OpenAPI tags information (versions 2 and 3).

    Table A3.2 The key to the tabular description of the OpenAPI tags information.
    Category Definition and Usage
    Tag Name The title of the tag (this must be unique). The tags are derived from the set of Interfaces defined in the Behavioral Model.
    Description A human readable description of the tag. This is the comment associated with the Interface in the Behavioral Model. The list of associated endpoints assigned to this tag are listed with links to the OpenAPI description of those endpoints.

    toc | top

    A3.3 OpenAPI Security Table Explanation

    Table A3.3 provides the key to the tabular description of the OpenAPI security information.

    Table A3.3 The key to the tabular description of the OpenAPI security information.
    Category Definition and Usage
    Security Label The label by which this mode is identified within the OpenAPI file.
    Type The security mode supported. The permitted values are:
    • "basic" - use of basic authentication
    • "apikey" - use of an API key (in the header or as a query parameter)
    • "oauth2" - use of OAuth 2.0
    Description A human readable description of the usage of this security scheme.
    Flow The flow used by the OAuth2 security scheme. The permitted values in OAS2 are:
    • "implicit" - implicit grant type is used to obtain access tokens (see [RFC 6749] sub-section 4.2)
    • "password" - resource owner password credentials grant type (see [RFC 6749] sub-section 4.3)
    • "application" - client credentials grant type (see [RFC 6749] sub-section 4.4)
    • "accessCode" - authorization code grant type (see [RFC 6749] sub-section 4.1)

    The permitted values in OAS3 are:
    • "clientCredentials" - client credentials grant type (see [RFC 6749] sub-section 4.4)
    • "authorizationCode" - authorization code grant type (see [RFC 6749] sub-section 4.1)
    Token URL The token URL to be used for this flow. A value MUST be supplied for the "password", "application" and "accessMode" flows in OAuth 2.
    Authorization URL The authorization URL to be used for this flow. A value MUST be supplied for the "accessMode" flows in OAuth 2.
    Refresh URL The refresh URL to be used for this flow. A value MAY be supplied for the "accessMode" flows in OAuth 2.
    Scopes The set of labels by which the global scope will be identified.
    Global Scope The default identification of the security mode to be applied to an endpoint.

    toc | top

    A3.4 OpenAPI Paths Table Explanation

    Table A3.4 provides the key to the OpenAPI paths information for an HTTP Verb.

    Table A3.4 The key to the tabular description of the OpenAPI paths information for an HTTP Verb.
    Category Definition and Usage
    Operation ID A unique identifier for the service operation. This is the name of the operation defined in the Behavioral Model.
    Summary A human readable summary of the objective of the service operation.
    Tags The tag which has been assigned to this operation. The tag is determined by the Interface under which the operation is defined in the Behavioral Model.
    Security and Scopes The list of security modes and scopes that MUST be used enable access to this endpoint.
    Description A human readable summary of the objective of the service operation. This is derived from the associated description of the operation supplied in the Behavioral Model.
    Path Placeholders The set of placeholders, and their meaning, in the URL path that will be replaced by the appropriate values in the request calls.
    Query Parameters The set of query parameters that are permitted on the request calls. For each query parameter the following information is supplied:
    • Name - the name of the parameter;
    • Type - the data type for the parameter;
    • Multiplicity - the permitted multiplicity of the parameter. This takes the form of:-
      • "0..1" [optional; restricted]
      • "0..*" [optional; unrestricted] - this will normally be achieved as a comma separated list
      • "1" [mandatory; restricted]
      • "1..*" [mandatory; unrestricted] - this will normally be achieved as a comma separated list
    • Default - the default value for the parameter.
    Responses The set of query responses that are permitted for the request. For each response the following information is supplied:
    • Name - the name of the response (this is either a valid HTTP code or the value "default");
    • Type - the data type for the response payload (this is linked to the corresponding OpenAPI definition). If there is no payload then this will be denoted by "N/A";
    • Description - the description of the response including any specific status code values.

    toc | top

    A3.5 OpenAPI Definitions Table Explanation

    Table A3.5 provides the key to the OpenAPI definitions information.

    Table A3.5 The key to the tabular description of the OpenAPI definitions information.
    Category Definition and Usage
    Annotations The definition of the complex-type as supplied in the data model definition for the associated class.
    Diagram A visual representation of the definition of the complex-type. These diagrams will be supplied in later versions of the specficiation.
    Type Hierachy The identification of the superclass upon which this type is based (the superclass is shown on the top line). This indicates the source of the inherited set of JSON properties (this line is only displayed when there is a type hierarchy).
    Model The set of child properties. This is an ordered list of properties (as per the implied or actual sequence in the object) and accompanied by their multiplicity. In the case where the type is an enumeration or primitiveType then the value is "N/A". The value may also be "Empty" to indicate that no children are permitted. In some situations the value may be "None" denoting that there are no children defined e.g. for a base class from which other classes are derived and which may have children as part of the extension.
    Source The equivalent JSON Schema (OpenAPI dialect) code for the declaration of the complex-type. This is the full declaration. See the corresponding OpenAPI documentation [OAS, 14] and [OAS, 17] for the description of the permitted contents for this declaration.

    toc | top

    Appendix B OpenAPI Listings

    This Section is NORMATIVE.

    B1 CAT Service OpenAPI JSON Listing

    B1.1 OpenAPI 2.0 JSON Listing

    The OpenAPI 2 (JSON) listing (based upon [OAS, 14]) is shown below (the OpenAPI JSON is available at: https://purl.imsglobal.org/cat/v1p0/schema/openapi/imscatv1p0_openapi2_v1p0.json).

    {
        "swagger" : "2.0",
        "info" : {
            "version" : "1.0",
            "title" : "Computer Adaptive Testing (CAT) Service OpenAPI (JSON) Definition",
            "description" : "The Computer Adaptive Testing (CAT) Service enables a standard way of implementing adaptive testing using Question and Test Interoperability (QTI). This service has been described using the IMS Model Driven Specification development approach, this being the Platform Specific Model (PSM) of the service.",
            "termsOfService" : "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 IMS or its successors or assigns. THIS API DEFINITION 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 IMPLEMENTERS 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 API DEFINITION.",
            "contact" : {
                "name" : "Lisa Mattson (COO), IMS Global ",
                "url" : "http://www.imsglobal.org",
                "email" : "lmattson@imsglobal.org"
            },
            "license" : {
                "name" : "IMS Global",
                "url" : "https://www.imsglobal.org/license.html"
            }
        },
        "host" : "www.imsglobal.org",
        "basePath" : "/ims/cat/v1p0",
        "schemes" : [ "http","https" ],
        "tags" : [
            {
                "name" : "SectionsManager",
                "description" : "The set of service operations that manage access to the adaptive Sections being handled by the CAT Engine."
            },
            {
                "name" : "SessionsManager",
                "description" : "The set of service operations that manage access to the adaptive Sessions being handled by the CAT Engine."
            }
        ],
        "securityDefinitions" : {
            "OAuth2CCG" : {
                "type" : "oauth2",
                "description" : "A CAT engine implementation may adopt any scope structure and naming scheme which meets its requirements, including not using scopes at all. The scopes shown here are recommended, not required.",
                "flow" : "application",
                "tokenUrl" : "https://www.service-dependent.com/oauth2Token",
                "scopes" : {
                    "https://purl.imsglobal.org/cat/v1p0/scope/api" : "This enables access to all of the endpoints.",
                    "https://purl.imsglobal.org/cat/v1p0/scope/configure" : "This enables access to the endoints that permit the management of Sections.",
                    "https://purl.imsglobal.org/cat/v1p0/scope/deliver" : "This enables access to the endoints that permit the management of Sessions."
                }
            }
        },
        "paths" : {
            "/sections" : {
                "post" : {
                    "operationId" : "createSection",
                    "summary" : "The REST createbp request message for the createSection() API call.",
                    "tags" : [ "SectionsManager" ],
                    "description" : "This is a request to the CAT Engine to create a new adaptive Section. The CAT Engine is responsible for assigning the unique identifier to be used for this Section in other exchanges. This request is NOT idempotent.",
                    "parameters" : [
                        {
                            "name" : "section",
                            "in" : "body",
                            "description" : "The data for the configuration of the new adaptive Section.",
                            "required" : true,
                            "schema" : {
                                "$ref" : "#/definitions/SectionDType"
                            }
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/cat/v1p0/scope/api",
                                "https://purl.imsglobal.org/cat/v1p0/scope/configure"
                            ]
                        }
                    ],
                    "responses" : {
                        "201" : {
                            "description" : "The response code for when the new Section has been created in the CAT Engine and the associated identifier has been returned.",
                            "schema" : {
                                "$ref" : "#/definitions/CreateSectionResponseBodyDType"
                            }
                        },
                        "400" : {
                            "description" : "The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "401" : {
                            "description" : "The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "500" : {
                            "description" : "This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        }
                    }
                }
            },
            "/sections/{sectionIdentifier}" : {
                "get" : {
                    "operationId" : "getSection",
                    "summary" : "The REST read request message for the getSection() API call.",
                    "tags" : [ "SectionsManager" ],
                    "description" : "This request returns the parameters which were used by the CAT engine to create the adaptive section, and the list of the items in the adaptive section's item pool, as configured by the CAT engine. It is recommended that assessment platforms and/or delivery engines use this request to verify that the item pool, as configured by the CAT engine, corresponds exactly to the list of items in the QTI source for the adaptive section. It is also recommended that test administrators verify that each item in the item pool is accessible and deliverable before commencing delivery of candidate sessions. The Get Section request may be used for this, and may be made at any time after a successful Create Section request, as many times as required.",
                    "parameters" : [
                        {
                            "name" : "sectionIdentifier",
                            "in" : "path",
                            "description" : "The LUID that identifies the Section for which the data on the CAT Engine is to be obtained.",
                            "required" : true,
                            "type" : "string"
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/cat/v1p0/scope/api",
                                "https://purl.imsglobal.org/cat/v1p0/scope/configure"
                            ]
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "The response code for when the list of Items in the section's item pool has been returned. The response message contains the list of Items, the section configuration used to create the section, and any qtiUsagedata and qtiMetadata used to create the section.",
                            "schema" : {
                                "$ref" : "#/definitions/GetSectionResponseBodyDType"
                            }
                        },
                        "400" : {
                            "description" : "The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "401" : {
                            "description" : "The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "404" : {
                            "description" : "The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "500" : {
                            "description" : "This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        }
                    }
                },
                "delete" : {
                    "operationId" : "endSection",
                    "summary" : "The REST delete request message for the endSection() API call.",
                    "tags" : [ "SectionsManager" ],
                    "description" : "This request ends all candidate sessions for the section which have not already ended, and ends the section. The sectionIdentifier, sessionIdentifiers, and sessionStates returned from previous requests related to the section become invalid. The delivery engine should not make any further requests related to the section or any session for the section. For a REST-based binding this request uses the DELETE HTTP method because of REST conventions, but the CAT engine is not required to physically delete any session or section data. This request should not be repeated once it has succeeded. ",
                    "parameters" : [
                        {
                            "name" : "sectionIdentifier",
                            "in" : "path",
                            "description" : "The LUID that identifies the Section to be deleted on the CAT Engine.",
                            "required" : true,
                            "type" : "string"
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/cat/v1p0/scope/api",
                                "https://purl.imsglobal.org/cat/v1p0/scope/configure"
                            ]
                        }
                    ],
                    "responses" : {
                        "204" : {
                            "description" : "The response code for when the identified Section has been deleted in the CAT Engine. There is no response payload."
                        },
                        "400" : {
                            "description" : "The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "401" : {
                            "description" : "The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "404" : {
                            "description" : "The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "500" : {
                            "description" : "This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        }
                    }
                }
            },
            "/sections/{sectionIdentifier}/sessions" : {
                "post" : {
                    "operationId" : "createSession",
                    "summary" : "The REST createbp request message for the createSession() API call.",
                    "tags" : [ "SessionsManager" ],
                    "description" : "This request initializes a candidate session for the adaptive section. The request optionally provides the CAT engine with information related to the candidate. The CAT engine returns the initial stage (list of items) to be presented to the candidate. This request may be made multiple times after a successful Create Section request, once per candidate, when each candidate enters the adaptive section on the test. This request is NOT idempotent.",
                    "parameters" : [
                        {
                            "name" : "sectionIdentifier",
                            "in" : "path",
                            "description" : "The LUID that identifies the Section in the CAT Engine to which this new Session is to be assigned.",
                            "required" : true,
                            "type" : "string"
                        },
                        {
                            "name" : "session",
                            "in" : "body",
                            "description" : "The Session configuration data including the information about the examinee.",
                            "required" : true,
                            "schema" : {
                                "$ref" : "#/definitions/SessionDType"
                            }
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/cat/v1p0/scope/api",
                                "https://purl.imsglobal.org/cat/v1p0/scope/deliver"
                            ]
                        }
                    ],
                    "responses" : {
                        "201" : {
                            "description" : "The response code for when the new Session has been created in the CAT Engine and the associated identifier has been returned. The response message consists of the identifier allocated to the session, the initial set of Items to be presented and the session state to be used for later requests.",
                            "schema" : {
                                "$ref" : "#/definitions/CreateSessionResponseBodyDType"
                            }
                        },
                        "400" : {
                            "description" : "The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "401" : {
                            "description" : "The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "404" : {
                            "description" : "The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "500" : {
                            "description" : "This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        }
                    }
                }
            },
            "/sections/{sectionIdentifier}/sessions/{sessionIdentifier}" : {
                "delete" : {
                    "operationId" : "endSession",
                    "summary" : "The REST delete request message for the endSession() API call.",
                    "tags" : [ "SessionsManager" ],
                    "description" : "This request ends the candidate session. The sessionIdentifier, and the sessionState returned from any previous request in the session, become invalid. The delivery engine should not make any further requests related to the session. For a REST-based binding this request uses the DELETE HTTP method because of REST conventions; but it is not required that CAT engines physically delete data or resources associated with the session. If the identified session cannot be found then the 'unknownobject' status code must be reported.",
                    "parameters" : [
                        {
                            "name" : "sectionIdentifier",
                            "in" : "path",
                            "description" : "The LUID that identifies the Section to be deleted on the CAT Engine.",
                            "required" : true,
                            "type" : "string"
                        },
                        {
                            "name" : "sessionIdentifier",
                            "in" : "path",
                            "description" : "The LUID that identifies the Session, in the context of the identified Section, to be deleted on the CAT Engine.",
                            "required" : true,
                            "type" : "string"
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/cat/v1p0/scope/api",
                                "https://purl.imsglobal.org/cat/v1p0/scope/deliver"
                            ]
                        }
                    ],
                    "responses" : {
                        "204" : {
                            "description" : "The response code for when the identified Session has been deleted in the CAT Engine. There is no response payload."
                        },
                        "400" : {
                            "description" : "The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "401" : {
                            "description" : "The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "404" : {
                            "description" : "The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "500" : {
                            "description" : "This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        }
                    }
                }
            },
            "/sections/{sectionIdentifier}/sessions/{sessionIdentifier}/results" : {
                "post" : {
                    "operationId" : "submitResults",
                    "summary" : "The REST update request message for the submitResults() API call.",
                    "tags" : [ "SessionsManager" ],
                    "description" : "This request sends the results from the current item stage in a candidate session to the CAT engine. The CAT engine returns its computed outcome variable values for the current stage and the test as a whole. It also returns the next item stage to be presented to the candidate. Instead of the next item stage, it may also return an indication that the adaptive section has ended, by returning an empty list for nextItems. If the identified Section/Session cannot be found then the 'unknownobject' status code must be reported.",
                    "parameters" : [
                        {
                            "name" : "sectionIdentifier",
                            "in" : "path",
                            "description" : "The LUID that identifies the Section in the CAT Engine to be used.",
                            "required" : true,
                            "type" : "string"
                        },
                        {
                            "name" : "sessionIdentifier",
                            "in" : "path",
                            "description" : "The LUID that identifies the Session, in the context of the Section, in the CAT Engine to be used.",
                            "required" : true,
                            "type" : "string"
                        },
                        {
                            "name" : "resultSet",
                            "in" : "body",
                            "description" : "The set of results that have been obtained, so far, by the examinee for the identified session.",
                            "required" : true,
                            "schema" : {
                                "$ref" : "#/definitions/ResultsDType"
                            }
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/cat/v1p0/scope/api",
                                "https://purl.imsglobal.org/cat/v1p0/scope/deliver"
                            ]
                        }
                    ],
                    "responses" : {
                        "201" : {
                            "description" : "The response code for when the next set of Items to be presented to the examinee has been returned. The response message contains the next set of Items, the session state to be used in later requests and, optionally, the assessment results.",
                            "schema" : {
                                "$ref" : "#/definitions/SubmitResultsResponseBodyDType"
                            }
                        },
                        "400" : {
                            "description" : "The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "401" : {
                            "description" : "The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "404" : {
                            "description" : "The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "500" : {
                            "description" : "This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        }
                    }
                }
            }
        },
        "definitions" : {
            "CreateSessionResponseBodyDType" : {
                "description" : "The response code for when the new Session has been created in the CAT Engine and the associated identifier has been returned. The response message consists of the identifier allocated to the session, the initial set of Items to be presented and the session state to be used for later requests.",
                "type" : "object",
                "properties" : {
                    "sessionIdentifier" : {
                        "description" : "Model Primitive Datatype = NCName. The LUID that has been assigned by the CAT Engine to the new Session.",
                        "type" : "string"
                    },
                    "nextItems" : {
                        "$ref" : "#/definitions/NextItemSetDType"
                    },
                    "sessionState" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The session state to send back on subsequent calls within this session.",
                        "type" : "string"
                    }
                },
                "additionalProperties" : false
            },
            "GetSectionResponseBodyDType" : {
                "description" : "The response code for when the list of Items in the section's item pool has been returned. The response message contains the list of Items, the section configuration used to create the section, and any qtiUsagedata and qtiMetadata used to create the section.",
                "type" : "object",
                "properties" : {
                    "items" : {
                        "$ref" : "#/definitions/ItemSetDType"
                    },
                    "section" : {
                        "$ref" : "#/definitions/SectionDType"
                    }
                },
                "additionalProperties" : false
            },
            "SubmitResultsResponseBodyDType" : {
                "description" : "The response code for when the next set of Items to be presented to the examinee has been returned. The response message contains the next set of Items, the session state to be used in later requests and, optionally, the assessment results.",
                "type" : "object",
                "properties" : {
                    "nextItems" : {
                        "$ref" : "#/definitions/NextItemSetDType"
                    },
                    "assessmentResult" : {
                        "$ref" : "#/definitions/AssessmentResultDType"
                    },
                    "sessionState" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The session state to send back on subsequent calls within this session.",
                        "type" : "string"
                    }
                },
                "additionalProperties" : false
            },
            "CreateSectionResponseBodyDType" : {
                "description" : "The response code for when the new Section has been created in the CAT Engine and the associated identifier has been returned.",
                "type" : "object",
                "properties" : {
                    "sectionIdentifier" : {
                        "description" : "Model Primitive Datatype = NCName.",
                        "type" : "string"
                    }
                },
                "additionalProperties" : false
            },
            "AssessmentResultDType" : {
                "description" : "An Assessment Result is used to report the results of a candidate's interaction with a test and/or one or more items attempted. Information about the test is optional, in some systems it may be possible to interact with items that are not organized into a test at all. For example, items that are organized with learning resources and presented individually in a formative context.",
                "type" : "object",
                "properties" : {
                    "context" : {
                        "$ref" : "#/definitions/ContextDType"
                    },
                    "testResult" : {
                        "$ref" : "#/definitions/TestResultDType"
                    },
                    "itemResult" : {
                        "description" : "When a test result is given the following item results must relate only to items that were selected for presentation as part of the corresponding test session. Furthermore, all items selected for presentation should be reported with a corresponding itemResult.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ItemResultDType"
                        }
                    }
                },
                "additionalProperties" : false
            },
            "CandidateResponseDType" : {
                "description" : "The response given by the candidate.",
                "type" : "object",
                "properties" : {
                    "value" : {
                        "description" : "The value(s) of the response variable. A NULL value, resulting from no response, is indicated by the absence of any value. The order of the values is significant only if the response was declared with ordered cardinality.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ValueDType"
                        }
                    }
                },
                "additionalProperties" : false
            },
            "ContextDType" : {
                "description" : "This is the context for the 'assessmentResult'. It provides the corresponding set of identifiers.",
                "type" : "object",
                "properties" : {
                    "sourcedId" : {
                        "description" : "Model Primitive Datatype = NCName. A unique identifier for the test candidate.",
                        "type" : "string"
                    },
                    "sessionIdentifiers" : {
                        "description" : "The system that creates the result (for example, the test delivery system) should assign a session identifier that it can use to identify the session. Subsequent systems that process the result might assign their own identifier to the session which should be added to the context if the result is modified and exported for transport again.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/SessionIdentifierDType"
                        }
                    }
                },
                "additionalProperties" : false
            },
            "CorrectResponseDType" : {
                "description" : "The correct response may be output as part of the report if desired. Systems are not limited to reporting correct responses declared in responseDeclarations. For example, a correct response may be set by a templateRule or may simply have been suppressed from the declaration passed to the delivery engine e.g. for security.",
                "type" : "object",
                "properties" : {
                    "interpretation" : {
                        "description" : "Model Primitive Datatype = String. A human readable interpretation of the correct value.",
                        "type" : "string"
                    },
                    "value" : {
                        "description" : "The order of the values is signficant only when the response is of ordered cardinality.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ValueDType"
                        }
                    }
                },
                "additionalProperties" : false
            },
            "ItemResultDType" : {
                "description" : "The result of an item session is reported with an itemResult. A report may contain multiple results for the same instance of an item representing multiple attempts, progression through an adaptive item or even more detailed tracking. In these cases, each item result must have a different datestamp.",
                "type" : "object",
                "properties" : {
                    "identifier" : {
                        "description" : "Model Primitive Datatype = NCName. The identifier of the item for which this is a result. For item results that are reported as part of a test result this is the identifier used to refer to the item in the test (see assessmentItemRef). For item results that are reported on their own, this can be any suitable identifier for the item. Where possible, the value should match the identifier attribute on the associated assessmentItem.",
                        "type" : "string"
                    },
                    "sequenceIndex" : {
                        "description" : "Model Primitive Datatype = NonNegativeInteger. For item results that are reported as part of a test, this attribute must be used to indicate the position of the item within the specific instance of the test. The first item of the first part of the test is defined to have sequence index 1.",
                        "type" : "integer",
                        "format" : "int32",
                        "minimum" : 0
                    },
                    "datestamp" : {
                        "description" : "Model Primitive Datatype = DateTime. The date stamp of when this result was recorded.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "sessionStatus" : {
                        "description" : "The session status is used to interpret the values of the item variables. See the sessionStatus vocabulary.",
                        "type" : "string",
                        "enum" : [ "final","initial","pendingResponseProcessing","pendingSubmission" ]
                    },
                    "responseVariables" : {
                        "description" : "Indicates that a Response Variable is being reported. This is the value of one of the responses associated with an Item in the corresponding ASI instance.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ResponseVariableDType"
                        }
                    },
                    "templateVariables" : {
                        "description" : "Indicates that a Template Variable is being reported. This is the value of one of the template variables associated with an Item in the corresponding ASI instance.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/TemplateVariableDType"
                        }
                    },
                    "outcomeVariables" : {
                        "description" : "Indicates that an Outcome Variable is being reported. This is the value of one of the outcomes associated with either an Item or Test and defined in the corresponding ASI instance.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/OutcomeVariableDType"
                        }
                    },
                    "candidateComment" : {
                        "description" : "Model Primitive Datatype = String. An optional comment supplied by the candidate (see the allowComment in the ASI documentation [QTI, 20a]).",
                        "type" : "string"
                    }
                },
                "required" : [ "identifier","datestamp","sessionStatus" ],
                "additionalProperties" : false
            },
            "ItemSetDType" : {
                "description" : "A set of Item identfiers.",
                "type" : "object",
                "properties" : {
                    "itemIdentifiers" : {
                        "description" : "Model Primitive Datatype = NCName. The Identifiers for the set of Items. These should be the GUIDs that have been assigned to AssessmentItems when defined using IMS QTI.",
                        "type" : "array",
                        "minItems" : 1,
                        "items" : {
                            "type" : "string"
                        }
                    }
                },
                "required" : [ "itemIdentifiers" ],
                "additionalProperties" : false
            },
            "KeyValuePairDType" : {
                "description" : "The container for the values assigned to the Key/Value pair.",
                "type" : "object",
                "properties" : {
                    "glossaryURI" : {
                        "description" : "Model Primitive Datatype = AnyURI. This is a URI to the definition of the data being supplied in this accompanying key/value pair. This definition should provide a human readable description of the data-type and value space for the value being identified by its key. ",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "key" : {
                        "description" : "Model Primitive Datatype = String. The key for the value to be supplied.",
                        "type" : "string"
                    },
                    "value" : {
                        "description" : "Model Primitive Datatype = String. The value being supplied.",
                        "type" : "string"
                    }
                },
                "required" : [ "key","value" ],
                "additionalProperties" : false
            },
            "NextItemSetDType" : {
                "description" : "The container for the information about the set of next Items that should be presented to the examinee.",
                "type" : "object",
                "properties" : {
                    "itemIdentifiers" : {
                        "description" : "Model Primitive Datatype = NCName. The Identifiers for the set of Items that should be presented next. These should be the GUIDs that have been assigned to AssessmentItems when defined using IMS QTI.",
                        "type" : "array",
                        "minItems" : 1,
                        "items" : {
                            "type" : "string"
                        }
                    },
                    "stageLength" : {
                        "description" : "Model Primitive Datatype = NonNegativeInteger. The (minimum) number of items the CAT Engine can present before requesting next items",
                        "type" : "integer",
                        "format" : "int32",
                        "minimum" : 0
                    }
                },
                "required" : [ "itemIdentifiers" ],
                "additionalProperties" : false
            },
            "OutcomeVariableDType" : {
                "description" : "The Item result information related to an 'Outcome Variable'.",
                "type" : "object",
                "properties" : {
                    "identifier" : {
                        "description" : "Model Primitive Datatype = NCName. The identifier of the Outcome Variable.",
                        "type" : "string"
                    },
                    "cardinality" : {
                        "description" : "The cardinality of the Outcome Variable, taken from the corresponding declaration or definition.",
                        "type" : "string",
                        "enum" : [ "multiple","ordered","record","single" ]
                    },
                    "baseType" : {
                        "description" : "The base type of the Outcome Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.",
                        "type" : "string",
                        "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                    },
                    "view" : {
                        "description" : "The views (if any) declared for the outcome must be copied to the report to enable systems that render the report to hide information not relevant in a specific situation. If no values are given, the outcome's value should be considered relevant in all views.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string",
                            "enum" : [ "author","candidate","proctor","scorer","testConstructor","tutor" ]
                        }
                    },
                    "interpretation" : {
                        "description" : "Model Primitive Datatype = String. A human readable interpretation of the default value.",
                        "type" : "string"
                    },
                    "longInterpretation" : {
                        "description" : "Model Primitive Datatype = AnyURI. An optional link to an extended interpretation of the outcome variable's value.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "normalMaximum" : {
                        "description" : "Model Primitive Datatype = Double. The normalMaximum attribute optionally defines the maximum magnitude of numeric outcome variables, it must be a positive value. If given, the outcome's value can be divided by normalMaximum and then truncated (if necessary) to obtain a normalized score in the range [-1.0,1.0]. normalMaximum has no affect on responseProcessing or the values that the outcome variable itself can take.",
                        "type" : "number",
                        "format" : "double"
                    },
                    "normalMinimum" : {
                        "description" : "Model Primitive Datatype = Double. The normalMinimum attribute optionally defines the minimum value of numeric outcome variables, it may be negative.",
                        "type" : "number",
                        "format" : "double"
                    },
                    "masteryValue" : {
                        "description" : "Model Primitive Datatype = Double. The masteryValue attribute optionally defines a value for numeric outcome variables above which the aspect being measured is considered to have been mastered by the candidate.",
                        "type" : "number",
                        "format" : "double"
                    },
                    "value" : {
                        "description" : "The value(s) of the outcome variable. The order of the values is significant only if the outcome was declared with ordered cardinality.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ValueDType"
                        }
                    }
                },
                "required" : [ "identifier","cardinality" ],
                "additionalProperties" : false
            },
            "PCIContextDType" : {
                "description" : "This is the container for the contextual information that can be supplied for a PCI used within an Item. The contained information is only relevant when there is an 'interactionType' of 'portableCustomInteraction'.",
                "type" : "object",
                "properties" : {
                    "customTypeIdentifier" : {
                        "description" : "Model Primitive Datatype = NormalizedString. This is used alongside an 'interactionType' value of 'portableCustomInteraction' to disambiguate which class of PCI is in use as PCIs can vary widely in terms of how they might need to be psychometrically analyzed. This field could potentially also be used to identify which type of a traditional customInteraction is in use by the item.",
                        "type" : "string"
                    },
                    "interactionKind" : {
                        "description" : "Model Primitive Datatype = NormalizedString. This is used to provide insight into the nature of the PCI e.g. this is a PCI which allows a user to add notes to a musical stave to author some music that might be given a description of 'authoring'. This information could be used by a psychometrician, etc. as an indication of a similar type of standard interaction.",
                        "type" : "string"
                    }
                },
                "additionalProperties" : false
            },
            "QTIMetadataDType" : {
                "description" : "This contains the new category of metadata for the recording of QTI specific information.",
                "type" : "object",
                "properties" : {
                    "itemTemplate" : {
                        "description" : "Model Primitive Datatype = Boolean. True if the item is actually an item template, in other words, the item changes its appearance based on some random or external factor. An assessmentItem that contains a templateProcessing section.",
                        "type" : "boolean"
                    },
                    "timeDependent" : {
                        "description" : "Model Primitive Datatype = Boolean. Whether or not the item is time dependent. A time dependent item takes the length of time taken for an attempt into consideration when scoring.",
                        "type" : "boolean"
                    },
                    "composite" : {
                        "description" : "Model Primitive Datatype = Boolean. True if the item comprises more than one interaction, for example, an assessmentItem that contains more than one interaction.",
                        "type" : "boolean"
                    },
                    "interactionType" : {
                        "description" : "The interaction type(s) of the item. The vocabulary is comprised of the names, as defined in the information model, of the leaf classes derived from interaction.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string",
                            "enum" : [ "associateInteraction","choiceInteraction","customInteraction","drawingInteraction","endAttemptInteraction","extendedTextInteraction","gapMatchInteraction","graphicAssociateInteraction","graphicGapMatchInteraction","graphicOrderInteraction","hotspotInteraction","hottextInteraction","inlineChoiceInteraction","matchInteraction","mediaInteraction","orderInteraction","portableCustomInteraction","positionObjectInteraction","selectPointInteraction","sliderInteraction","textEntryInteraction","uploadInteraction" ]
                        }
                    },
                    "portableCustomInteractionContext" : {
                        "$ref" : "#/definitions/PCIContextDType"
                    },
                    "feedbackType" : {
                        "description" : "Describes the type of feedback, if any, available in the item. If feedback is available then it is described as being non-adaptive or adaptive depending on whether the item is itself adaptive. A non-adaptive item generates feedback based on the responses submitted as part of (the last) attempt only. An adaptive item generates feedback that takes into consideration the path taken through the item, in other words, feedback based on the accumulation of all attempts and not just the last.",
                        "type" : "string",
                        "enum" : [ "adaptive","nonadaptive","none" ]
                    },
                    "solutionAvailable" : {
                        "description" : "Model Primitive Datatype = Boolean. Set to true if a model solution is available for the item. For example, an assessmentItem that provides correct responses for all declared response variables.",
                        "type" : "boolean"
                    },
                    "scoringMode" : {
                        "description" : "The scoringMode is used to denote that the way in which the scoring is achieved. If the Item includes the response processing then the mode is 'responseprocessing'. If human scoring is required the value is 'human' and if some form of machine processing is required then the value is 'externalmachine'.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string",
                            "enum" : [ "human","externalmachine","responseprocessing" ]
                        }
                    },
                    "toolName" : {
                        "description" : "Model Primitive Datatype = String. The name of the tool used to author the evaluation object.",
                        "type" : "string",
                        "maxLength" : 256
                    },
                    "toolVersion" : {
                        "description" : "Model Primitive Datatype = String. The version of the tool used to author the evaluation object.",
                        "type" : "string",
                        "maxLength" : 256
                    },
                    "toolVendor" : {
                        "description" : "Model Primitive Datatype = String. The company which produced the tool used to author the evaluation object.",
                        "type" : "string",
                        "maxLength" : 256
                    }
                },
                "additionalProperties" : false
            },
            "ResponseVariableDType" : {
                "description" : "The Item result information related to a 'Response Variable'.",
                "type" : "object",
                "properties" : {
                    "identifier" : {
                        "description" : "Model Primitive Datatype = NCName. The identifier of the Response Variable.",
                        "type" : "string"
                    },
                    "cardinality" : {
                        "description" : "The cardinality of the Response Variable, taken from the corresponding declaration or definition.",
                        "type" : "string",
                        "enum" : [ "multiple","ordered","record","single" ]
                    },
                    "baseType" : {
                        "description" : "The base type of the Response Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.",
                        "type" : "string",
                        "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                    },
                    "choiceSequence" : {
                        "description" : "Model Primitive Datatype = NCName. When a response variable is bound to an interaction that supports the shuffling of choices, the sequence of choices experienced by the candidate will vary between test instances. When shuffling is in effect, the sequence of choices should be reported as a sequence of choice identifiers using this attribute.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string"
                        }
                    },
                    "correctResponse" : {
                        "$ref" : "#/definitions/CorrectResponseDType"
                    },
                    "candidateResponse" : {
                        "$ref" : "#/definitions/CandidateResponseDType"
                    }
                },
                "required" : [ "identifier","cardinality","candidateResponse" ],
                "additionalProperties" : false
            },
            "ResultsDType" : {
                "description" : "This is the container for the results that have been accrued by the examinee. These are passed to the CAT Engine to support the selection of the next set of Items.",
                "type" : "object",
                "properties" : {
                    "assessmentResult" : {
                        "$ref" : "#/definitions/AssessmentResultDType"
                    },
                    "sessionState" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The session state information. This is the data that was supplied by the CAT Engine when the session was created or the next set of Items was requested.",
                        "type" : "string"
                    }
                },
                "required" : [ "assessmentResult" ],
                "additionalProperties" : false
            },
            "SectionDType" : {
                "description" : "The container for the definition of the Section that is to be created in the CAT Engine. A Section is aligned to a QTI AssessmentSection [QTI, 20a].",
                "type" : "object",
                "properties" : {
                    "qtiMetadata" : {
                        "$ref" : "#/definitions/QTIMetadataDType"
                    },
                    "qtiUsagedata" : {
                        "description" : "Model Primitive Datatype = String. This is the Base64 encoded XML conforming to IMS QTI 3.0 Usage Date data model [QTI, 20c].",
                        "type" : "string"
                    },
                    "sectionConfiguration" : {
                        "description" : "Model Primitive Datatype = String. This is the Base64 encoded data containing section configuration, aligned with adaptive engine (black box). This format will be proprietary to each adaptive CAT Engine.",
                        "type" : "string"
                    }
                },
                "required" : [ "sectionConfiguration" ],
                "additionalProperties" : false
            },
            "SessionDType" : {
                "description" : "This is the container for the session configuration data that must be supplied to the CAT Engine when the session is to be created.",
                "type" : "object",
                "properties" : {
                    "personalNeedsAndPreferences" : {
                        "description" : "Model Primitive Datatype = NormalizedString. This is the Base64 encoded XML data for the Personal Needs and Preferences (PNP) for the examinee.  This data conforms to the XML as defined in the IMS Access for All Personal Needs and Preferences (AfAPNP) 3.0 XML Binding specification [AFAPNP, 20].",
                        "type" : "string"
                    },
                    "demographics" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The Base64 encoding of the JSON data for the Demographics information for the examinee. This data conforms to the JSON as defined in the IMS OneRoster 1.1 specification [OR, 17].",
                        "type" : "string"
                    },
                    "priorData" : {
                        "description" : "This is proprietary data that is supplied to the CAT Engine as a key/value pairs.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/KeyValuePairDType"
                        }
                    }
                },
                "additionalProperties" : false
            },
            "SessionIdentifierDType" : {
                "description" : "The system that creates the result (for example, the test delivery system) should assign a session identifier that it can use to identify the session.",
                "type" : "object",
                "properties" : {
                    "sourceID" : {
                        "description" : "Model Primitive Datatype = AnyURI. A unique identifier of the system which added this identifier to the result.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "identifier" : {
                        "description" : "Model Primitive Datatype = NCName. The system that creates the report should add a session identifier. Subsequent systems that process the results might use their own identifier for the session and should add this too if the result is exported again for further transport.",
                        "type" : "string"
                    }
                },
                "required" : [ "sourceID","identifier" ],
                "additionalProperties" : false
            },
            "TemplateVariableDType" : {
                "description" : "The Item result information related to a 'Template Variable'.",
                "type" : "object",
                "properties" : {
                    "identifier" : {
                        "description" : "Model Primitive Datatype = NCName. The identifier of the Template Variable.",
                        "type" : "string"
                    },
                    "cardinality" : {
                        "description" : "The cardinality of the Template Variable, taken from the corresponding declaration or definition.",
                        "type" : "string",
                        "enum" : [ "multiple","ordered","record","single" ]
                    },
                    "baseType" : {
                        "description" : "The base type of the Template Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.",
                        "type" : "string",
                        "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                    },
                    "value" : {
                        "description" : "The value(s) of the template variable. The order of the values is significant only if the template variable was declared with ordered cardinality.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ValueDType"
                        }
                    }
                },
                "required" : [ "identifier","cardinality" ],
                "additionalProperties" : false
            },
            "TestResultDType" : {
                "description" : "The container for the Test result. When a test result is given the following item results must relate only to items that were selected for presentation as part of the corresponding test session. Furthermore, all items selected for presentation should be reported with a corresponding itemResult.",
                "type" : "object",
                "properties" : {
                    "identifier" : {
                        "description" : "Model Primitive Datatype = NCName. The identifier of the test for which this is a result.",
                        "type" : "string"
                    },
                    "datestamp" : {
                        "description" : "Model Primitive Datatype = DateTime. The date stamp of when this result was recorded.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "responseVariables" : {
                        "description" : "Indicates that a Response Variable is being reported. This is the value of one of the responses associated with an Item in the corresponding ASI instance [QTI, 20a].",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ResponseVariableDType"
                        }
                    },
                    "templateVariables" : {
                        "description" : "Indicates that a Template Variable is being reported. This is the value of one of the template variables associated with an Item in the corresponding ASI instance [QTI, 20a].",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/TemplateVariableDType"
                        }
                    },
                    "outcomeVariables" : {
                        "description" : "Indicates that an Outcome Variable is being reported. This is the value of one of the outcomes associated with either an Item or Test and defined in the corresponding ASI instance [QTI, 20a].",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/OutcomeVariableDType"
                        }
                    }
                },
                "required" : [ "identifier","datestamp" ],
                "additionalProperties" : false
            },
            "ValueDType" : {
                "description" : "A class that can represent a single value of any baseType in variable declarations and result reports. The base-type is defined by the baseType attribute of the declaration except in the case of variables with record cardinality.",
                "type" : "object",
                "properties" : {
                    "fieldIdentifier" : {
                        "description" : "Model Primitive Datatype = NCName. This attribute is only used for specifying the field identifier for a value that forms part of a record.",
                        "type" : "string"
                    },
                    "baseType" : {
                        "description" : "This attribute is only used for specifying the base-type of a value that forms part of a record.",
                        "type" : "string",
                        "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                    },
                    "value" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The value being supplied.",
                        "type" : "string"
                    }
                },
                "required" : [ "value" ],
                "additionalProperties" : false
            },
            "imsx_CodeMinorDType" : {
                "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" : {
                        "description" : "Each reported code minor status code.",
                        "type" : "array",
                        "minItems" : 1,
                        "items" : {
                            "$ref" : "#/definitions/imsx_CodeMinorFieldDType"
                        }
                    }
                },
                "required" : [ "imsx_codeMinorField" ],
                "additionalProperties" : false
            },
            "imsx_CodeMinorFieldDType" : {
                "description" : "This is the container for a single code minor status code.",
                "type" : "object",
                "properties" : {
                    "imsx_codeMinorFieldName" : {
                        "description" : "Model Primitive Datatype = NormalizedString. This should contain the identity of the system that has produced the code minor status code report.",
                        "type" : "string"
                    },
                    "imsx_codeMinorFieldValue" : {
                        "description" : "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
                        "type" : "string",
                        "enum" : [ "fullsuccess","forbidden","invaliddata","unauthorisedrequest","internal_server_error","server_busy","unknownobject" ]
                    }
                },
                "required" : [ "imsx_codeMinorFieldName","imsx_codeMinorFieldValue" ],
                "additionalProperties" : false
            },
            "imsx_StatusInfoDType" : {
                "description" : "This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.",
                "type" : "object",
                "properties" : {
                    "imsx_codeMajor" : {
                        "description" : "The code major value (from the corresponding enumerated vocabulary).",
                        "type" : "string",
                        "enum" : [ "success","processing","failure","unsupported" ]
                    },
                    "imsx_severity" : {
                        "description" : "The severity value (from the corresponding enumerated vocabulary).",
                        "type" : "string",
                        "enum" : [ "status","warning","error" ]
                    },
                    "imsx_description" : {
                        "description" : "Model Primitive Datatype = String. A human readable description supplied by the entity creating the status code information.",
                        "type" : "string"
                    },
                    "imsx_codeMinor" : {
                        "$ref" : "#/definitions/imsx_CodeMinorDType"
                    }
                },
                "required" : [ "imsx_codeMajor","imsx_severity" ],
                "additionalProperties" : false
            }
        },
        "consumes" : [ "application/json" ],
        "produces" : [ "application/json" ]
    }
            

    B1.2 OpenAPI 3.0 JSON Listing

    The OpenAPI 3 (JSON) listing (based upon [OAS, 17]) is shown below (the OpenAPI JSON is available at: https://purl.imsglobal.org/cat/v1p0/schema/openapi/imscatv1p0_openapi3_v1p0.json).

    {
        "openapi" : "3.0.0",
        "info" : {
            "version" : "1.0",
            "title" : "Computer Adaptive Testing (CAT) Service OpenAPI (JSON) Definition",
            "description" : "The Computer Adaptive Testing (CAT) Service enables a standard way of implementing adaptive testing using Question and Test Interoperability (QTI). This service has been described using the IMS Model Driven Specification development approach, this being the Platform Specific Model (PSM) of the service.",
            "termsOfService" : "https://www.imsglobal.org/license.html",
            "contact" : {
                "name" : "Lisa Mattson (COO), IMS Global ",
                "url" : "http://www.imsglobal.org",
                "email" : "lmattson@imsglobal.org"
            },
            "license" : {
                "name" : "IMS Global",
                "url" : "https://www.imsglobal.org/license.html"
            }
        },
        "servers" : [
            {
                "url" : "www.imsglobal.org/ims/cat/v1p0",
                "description" : "The above Server URL should be changed to the actual server location."
            }
        ],
        "tags" : [
            {
                "name" : "SectionsManager",
                "description" : "The set of service operations that manage access to the adaptive Sections being handled by the CAT Engine."
            },
            {
                "name" : "SessionsManager",
                "description" : "The set of service operations that manage access to the adaptive Sessions being handled by the CAT Engine."
            }
        ],
        "paths" : {
            "/sections" : {
                "post" : {
                    "operationId" : "createSection",
                    "summary" : "The REST createbp request message for the createSection() API call.",
                    "tags" : [ "SectionsManager" ],
                    "description" : "This is a request to the CAT Engine to create a new adaptive Section. The CAT Engine is responsible for assigning the unique identifier to be used for this Section in other exchanges. This request is NOT idempotent.",
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/cat/v1p0/scope/api",
                                "https://purl.imsglobal.org/cat/v1p0/scope/configure"
                            ]
                        }
                    ],
                    "requestBody" : {
                        "description" : "The data for the configuration of the new adaptive Section.",
                        "content" : {
                            "application/json" : {
                                "schema" : {
                                    "$ref" : "#/components/schemas/SectionDType"
                                }
                            }
                        },
                        "required" : true
                    },
                    "responses" : {
                        "201" : {
                            "description" : "The response code for when the new Section has been created in the CAT Engine and the associated identifier has been returned.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                "$ref" : "#/components/schemas/CreateSectionResponseBodyDType"
                                    }
                                }
                            }
                        },
                        "400" : {
                            "description" : "The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "401" : {
                            "description" : "The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "500" : {
                            "description" : "This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "/sections/{sectionIdentifier}" : {
                "get" : {
                    "operationId" : "getSection",
                    "summary" : "The REST read request message for the getSection() API call.",
                    "tags" : [ "SectionsManager" ],
                    "description" : "This request returns the parameters which were used by the CAT engine to create the adaptive section, and the list of the items in the adaptive section's item pool, as configured by the CAT engine. It is recommended that assessment platforms and/or delivery engines use this request to verify that the item pool, as configured by the CAT engine, corresponds exactly to the list of items in the QTI source for the adaptive section. It is also recommended that test administrators verify that each item in the item pool is accessible and deliverable before commencing delivery of candidate sessions. The Get Section request may be used for this, and may be made at any time after a successful Create Section request, as many times as required.",
                    "parameters" : [
                        {
                            "name" : "sectionIdentifier",
                            "in" : "path",
                            "description" : "The LUID that identifies the Section for which the data on the CAT Engine is to be obtained.",
                            "required" : true,
                            "schema" : {
                                "type" : "string"
                            },
                            "style" : "simple"
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/cat/v1p0/scope/api",
                                "https://purl.imsglobal.org/cat/v1p0/scope/configure"
                            ]
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "The response code for when the list of Items in the section's item pool has been returned. The response message contains the list of Items, the section configuration used to create the section, and any qtiUsagedata and qtiMetadata used to create the section.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/GetSectionResponseBodyDType"
                                    }
                                }
                            }
                        },
                        "400" : {
                            "description" : "The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "401" : {
                            "description" : "The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "404" : {
                            "description" : "The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "500" : {
                            "description" : "This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        }
                    }
                },
                "delete" : {
                    "operationId" : "endSection",
                    "summary" : "The REST delete request message for the endSection() API call.",
                    "tags" : [ "SectionsManager" ],
                    "description" : "This request ends all candidate sessions for the section which have not already ended, and ends the section. The sectionIdentifier, sessionIdentifiers, and sessionStates returned from previous requests related to the section become invalid. The delivery engine should not make any further requests related to the section or any session for the section. For a REST-based binding this request uses the DELETE HTTP method because of REST conventions, but the CAT engine is not required to physically delete any session or section data. This request should not be repeated once it has succeeded. ",
                    "parameters" : [
                        {
                            "name" : "sectionIdentifier",
                            "in" : "path",
                            "description" : "The LUID that identifies the Section to be deleted on the CAT Engine.",
                            "required" : true,
                            "schema" : {
                                "type" : "string"
                            },
                            "style" : "simple"
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/cat/v1p0/scope/api",
                                "https://purl.imsglobal.org/cat/v1p0/scope/configure"
                            ]
                        }
                    ],
                    "responses" : {
                        "204" : {
                            "description" : "The response code for when the identified Section has been deleted in the CAT Engine. There is no response payload."
                        },
                        "400" : {
                            "description" : "The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "401" : {
                            "description" : "The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "404" : {
                            "description" : "The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "500" : {
                            "description" : "This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "/sections/{sectionIdentifier}/sessions" : {
                "post" : {
                    "operationId" : "createSession",
                    "summary" : "The REST createbp request message for the createSession() API call.",
                    "tags" : [ "SessionsManager" ],
                    "description" : "This request initializes a candidate session for the adaptive section. The request optionally provides the CAT engine with information related to the candidate. The CAT engine returns the initial stage (list of items) to be presented to the candidate. This request may be made multiple times after a successful Create Section request, once per candidate, when each candidate enters the adaptive section on the test. This request is NOT idempotent.",
                    "parameters" : [
                        {
                            "name" : "sectionIdentifier",
                            "in" : "path",
                            "description" : "The LUID that identifies the Section in the CAT Engine to which this new Session is to be assigned.",
                            "required" : true,
                            "schema" : {
                                "type" : "string"
                            },
                            "style" : "simple"
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/cat/v1p0/scope/api",
                                "https://purl.imsglobal.org/cat/v1p0/scope/deliver"
                            ]
                        }
                    ],
                    "requestBody" : {
                        "description" : "The Session configuration data including the information about the examinee.",
                        "content" : {
                            "application/json" : {
                                "schema" : {
                                    "$ref" : "#/components/schemas/SessionDType"
                                }
                            }
                        },
                        "required" : true
                    },
                    "responses" : {
                        "201" : {
                            "description" : "The response code for when the new Session has been created in the CAT Engine and the associated identifier has been returned. The response message consists of the identifier allocated to the session, the initial set of Items to be presented and the session state to be used for later requests.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/CreateSessionResponseBodyDType"
                                    }
                                }
                            }
                        },
                        "400" : {
                            "description" : "The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "401" : {
                            "description" : "The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "404" : {
                            "description" : "The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "500" : {
                            "description" : "This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "/sections/{sectionIdentifier}/sessions/{sessionIdentifier}" : {
                "delete" : {
                    "operationId" : "endSession",
                    "summary" : "The REST delete request message for the endSession() API call.",
                    "tags" : [ "SessionsManager" ],
                    "description" : "This request ends the candidate session. The sessionIdentifier, and the sessionState returned from any previous request in the session, become invalid. The delivery engine should not make any further requests related to the session. For a REST-based binding this request uses the DELETE HTTP method because of REST conventions; but it is not required that CAT engines physically delete data or resources associated with the session. If the identified session cannot be found then the 'unknownobject' status code must be reported.",
                    "parameters" : [
                        {
                            "name" : "sectionIdentifier",
                            "in" : "path",
                            "description" : "The LUID that identifies the Section to be deleted on the CAT Engine.",
                            "required" : true,
                            "schema" : {
                                "type" : "string"
                            },
                            "style" : "simple"
                        },
                        {
                            "name" : "sessionIdentifier",
                            "in" : "path",
                            "description" : "The LUID that identifies the Session, in the context of the identified Section, to be deleted on the CAT Engine.",
                            "required" : true,
                            "schema" : {
                                "type" : "string"
                            },
                            "style" : "simple"
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/cat/v1p0/scope/api",
                                "https://purl.imsglobal.org/cat/v1p0/scope/deliver"
                            ]
                        }
                    ],
                    "responses" : {
                        "204" : {
                            "description" : "The response code for when the identified Session has been deleted in the CAT Engine. There is no response payload."
                        },
                        "400" : {
                            "description" : "The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "401" : {
                            "description" : "The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "404" : {
                            "description" : "The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "500" : {
                            "description" : "This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "/sections/{sectionIdentifier}/sessions/{sessionIdentifier}/results" : {
                "post" : {
                    "operationId" : "submitResults",
                    "summary" : "The REST update request message for the submitResults() API call.",
                    "tags" : [ "SessionsManager" ],
                    "description" : "This request sends the results from the current item stage in a candidate session to the CAT engine. The CAT engine returns its computed outcome variable values for the current stage and the test as a whole. It also returns the next item stage to be presented to the candidate. Instead of the next item stage, it may also return an indication that the adaptive section has ended, by returning an empty list for nextItems. If the identified Section/Session cannot be found then the 'unknownobject' status code must be reported.",
                    "parameters" : [
                        {
                            "name" : "sectionIdentifier",
                            "in" : "path",
                            "description" : "The LUID that identifies the Section in the CAT Engine to be used.",
                            "required" : true,
                            "schema" : {
                                "type" : "string"
                            },
                            "style" : "simple"
                        },
                        {
                            "name" : "sessionIdentifier",
                            "in" : "path",
                            "description" : "The LUID that identifies the Session, in the context of the Section, in the CAT Engine to be used.",
                            "required" : true,
                            "schema" : {
                                "type" : "string"
                            },
                            "style" : "simple"
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/cat/v1p0/scope/api",
                                "https://purl.imsglobal.org/cat/v1p0/scope/deliver"
                            ]
                        }
                    ],
                    "requestBody" : {
                        "description" : "The set of results that have been obtained, so far, by the examinee for the identified session.",
                        "content" : {
                            "application/json" : {
                                "schema" : {
                                    "$ref" : "#/components/schemas/ResultsDType"
                                }
                            }
                        },
                        "required" : true
                    },
                    "responses" : {
                        "201" : {
                            "description" : "The response code for when the next set of Items to be presented to the examinee has been returned. The response message contains the next set of Items, the session state to be used in later requests and, optionally, the assessment results.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/SubmitResultsResponseBodyDType"
                                    }
                                }
                            }
                        },
                        "400" : {
                            "description" : "The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "401" : {
                            "description" : "The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "404" : {
                            "description" : "The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "500" : {
                            "description" : "This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "components" : {
            "securitySchemes" : {
                "OAuth2CCG" : {
                    "type" : "oauth2",
                    "description" : "A CAT engine implementation may adopt any scope structure and naming scheme which meets its requirements, including not using scopes at all. The scopes shown here are recommended, not required.",
                    "flows" : {
                        "clientCredentials" : {
                            "tokenUrl" : "https://www.service-dependent.com/oauth2Token",
                            "scopes" : {
                                "https://purl.imsglobal.org/cat/v1p0/scope/api" : "This enables access to all of the endpoints.",
                                "https://purl.imsglobal.org/cat/v1p0/scope/configure" : "This enables access to the endoints that permit the management of Sections.",
                                "https://purl.imsglobal.org/cat/v1p0/scope/deliver" : "This enables access to the endoints that permit the management of Sessions."
                            }
                        }
                    }
                }
            },
            "schemas" : {
                "CreateSessionResponseBodyDType" : {
                    "description" : "The response code for when the new Session has been created in the CAT Engine and the associated identifier has been returned. The response message consists of the identifier allocated to the session, the initial set of Items to be presented and the session state to be used for later requests.",
                    "type" : "object",
                    "properties" : {
                        "sessionIdentifier" : {
                            "description" : "Model Primitive Datatype = NCName. The LUID that has been assigned by the CAT Engine to the new Session.",
                            "type" : "string"
                        },
                        "nextItems" : {
                            "$ref" : "#/components/schemas/NextItemSetDType"
                        },
                        "sessionState" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The session state to send back on subsequent calls within this session.",
                            "type" : "string"
                        }
                    },
                    "additionalProperties" : false
                },
                "GetSectionResponseBodyDType" : {
                    "description" : "The response code for when the list of Items in the section's item pool has been returned. The response message contains the list of Items, the section configuration used to create the section, and any qtiUsagedata and qtiMetadata used to create the section.",
                    "type" : "object",
                    "properties" : {
                        "items" : {
                            "$ref" : "#/components/schemas/ItemSetDType"
                        },
                        "section" : {
                            "$ref" : "#/components/schemas/SectionDType"
                        }
                    },
                    "additionalProperties" : false
                },
                "SubmitResultsResponseBodyDType" : {
                    "description" : "The response code for when the next set of Items to be presented to the examinee has been returned. The response message contains the next set of Items, the session state to be used in later requests and, optionally, the assessment results.",
                    "type" : "object",
                    "properties" : {
                        "nextItems" : {
                            "$ref" : "#/components/schemas/NextItemSetDType"
                        },
                        "assessmentResult" : {
                            "$ref" : "#/components/schemas/AssessmentResultDType"
                        },
                        "sessionState" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The session state to send back on subsequent calls within this session.",
                            "type" : "string"
                        }
                    },
                    "additionalProperties" : false
                },
                "CreateSectionResponseBodyDType" : {
                    "description" : "The response code for when the new Section has been created in the CAT Engine and the associated identifier has been returned.",
                    "type" : "object",
                    "properties" : {
                        "sectionIdentifier" : {
                            "description" : "Model Primitive Datatype = NCName.",
                            "type" : "string"
                        }
                    },
                    "additionalProperties" : false
                },
                "AssessmentResultDType" : {
                    "description" : "An Assessment Result is used to report the results of a candidate's interaction with a test and/or one or more items attempted. Information about the test is optional, in some systems it may be possible to interact with items that are not organized into a test at all. For example, items that are organized with learning resources and presented individually in a formative context.",
                    "type" : "object",
                    "properties" : {
                        "context" : {
                            "$ref" : "#/components/schemas/ContextDType"
                        },
                        "testResult" : {
                            "$ref" : "#/components/schemas/TestResultDType"
                        },
                        "itemResult" : {
                            "description" : "When a test result is given the following item results must relate only to items that were selected for presentation as part of the corresponding test session. Furthermore, all items selected for presentation should be reported with a corresponding itemResult.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/ItemResultDType"
                            }
                        }
                    },
                    "additionalProperties" : false
                },
                "CandidateResponseDType" : {
                    "description" : "The response given by the candidate.",
                    "type" : "object",
                    "properties" : {
                        "value" : {
                            "description" : "The value(s) of the response variable. A NULL value, resulting from no response, is indicated by the absence of any value. The order of the values is significant only if the response was declared with ordered cardinality.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/ValueDType"
                            }
                        }
                    },
                    "additionalProperties" : false
                },
                "ContextDType" : {
                    "description" : "This is the context for the 'assessmentResult'. It provides the corresponding set of identifiers.",
                    "type" : "object",
                    "properties" : {
                        "sourcedId" : {
                            "description" : "Model Primitive Datatype = NCName. A unique identifier for the test candidate.",
                            "type" : "string"
                        },
                        "sessionIdentifiers" : {
                            "description" : "The system that creates the result (for example, the test delivery system) should assign a session identifier that it can use to identify the session. Subsequent systems that process the result might assign their own identifier to the session which should be added to the context if the result is modified and exported for transport again.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/SessionIdentifierDType"
                            }
                        }
                    },
                    "additionalProperties" : false
                },
                "CorrectResponseDType" : {
                    "description" : "The correct response may be output as part of the report if desired. Systems are not limited to reporting correct responses declared in responseDeclarations. For example, a correct response may be set by a templateRule or may simply have been suppressed from the declaration passed to the delivery engine e.g. for security.",
                    "type" : "object",
                    "properties" : {
                        "interpretation" : {
                            "description" : "Model Primitive Datatype = String. A human readable interpretation of the correct value.",
                            "type" : "string"
                        },
                        "value" : {
                            "description" : "The order of the values is signficant only when the response is of ordered cardinality.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/ValueDType"
                            }
                        }
                    },
                    "additionalProperties" : false
                },
                "ItemResultDType" : {
                    "description" : "The result of an item session is reported with an itemResult. A report may contain multiple results for the same instance of an item representing multiple attempts, progression through an adaptive item or even more detailed tracking. In these cases, each item result must have a different datestamp.",
                    "type" : "object",
                    "properties" : {
                        "identifier" : {
                            "description" : "Model Primitive Datatype = NCName. The identifier of the item for which this is a result. For item results that are reported as part of a test result this is the identifier used to refer to the item in the test (see assessmentItemRef). For item results that are reported on their own, this can be any suitable identifier for the item. Where possible, the value should match the identifier attribute on the associated assessmentItem.",
                            "type" : "string"
                        },
                        "sequenceIndex" : {
                            "description" : "Model Primitive Datatype = NonNegativeInteger. For item results that are reported as part of a test, this attribute must be used to indicate the position of the item within the specific instance of the test. The first item of the first part of the test is defined to have sequence index 1.",
                            "type" : "integer",
                            "format" : "int32",
                            "minimum" : 0
                        },
                        "datestamp" : {
                            "description" : "Model Primitive Datatype = DateTime. The date stamp of when this result was recorded.",
                            "type" : "string",
                            "format" : "date-time"
                        },
                        "sessionStatus" : {
                            "description" : "The session status is used to interpret the values of the item variables. See the sessionStatus vocabulary.",
                            "type" : "string",
                            "enum" : [ "final","initial","pendingResponseProcessing","pendingSubmission" ]
                        },
                        "responseVariables" : {
                            "description" : "Indicates that a Response Variable is being reported. This is the value of one of the responses associated with an Item in the corresponding ASI instance.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/ResponseVariableDType"
                            }
                        },
                        "templateVariables" : {
                            "description" : "Indicates that a Template Variable is being reported. This is the value of one of the template variables associated with an Item in the corresponding ASI instance.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/TemplateVariableDType"
                            }
                        },
                        "outcomeVariables" : {
                            "description" : "Indicates that an Outcome Variable is being reported. This is the value of one of the outcomes associated with either an Item or Test and defined in the corresponding ASI instance.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/OutcomeVariableDType"
                            }
                        },
                        "candidateComment" : {
                            "description" : "Model Primitive Datatype = String. An optional comment supplied by the candidate (see the allowComment in the ASI documentation [QTI, 20a]).",
                            "type" : "string"
                        }
                    },
                    "required" : [ "identifier","datestamp","sessionStatus" ],
                    "additionalProperties" : false
                },
                "ItemSetDType" : {
                    "description" : "A set of Item identfiers.",
                    "type" : "object",
                    "properties" : {
                        "itemIdentifiers" : {
                            "description" : "Model Primitive Datatype = NCName. The Identifiers for the set of Items. These should be the GUIDs that have been assigned to AssessmentItems when defined using IMS QTI.",
                            "type" : "array",
                            "minItems" : 1,
                            "items" : {
                                "type" : "string"
                            }
                        }
                    },
                    "required" : [ "itemIdentifiers" ],
                    "additionalProperties" : false
                },
                "KeyValuePairDType" : {
                    "description" : "The container for the values assigned to the Key/Value pair.",
                    "type" : "object",
                    "properties" : {
                        "glossaryURI" : {
                            "description" : "Model Primitive Datatype = AnyURI. This is a URI to the definition of the data being supplied in this accompanying key/value pair. This definition should provide a human readable description of the data-type and value space for the value being identified by its key. ",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "key" : {
                            "description" : "Model Primitive Datatype = String. The key for the value to be supplied.",
                            "type" : "string"
                        },
                        "value" : {
                            "description" : "Model Primitive Datatype = String. The value being supplied.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "key","value" ],
                    "additionalProperties" : false
                },
                "NextItemSetDType" : {
                    "description" : "The container for the information about the set of next Items that should be presented to the examinee.",
                    "type" : "object",
                    "properties" : {
                        "itemIdentifiers" : {
                            "description" : "Model Primitive Datatype = NCName. The Identifiers for the set of Items that should be presented next. These should be the GUIDs that have been assigned to AssessmentItems when defined using IMS QTI.",
                            "type" : "array",
                            "minItems" : 1,
                            "items" : {
                                "type" : "string"
                            }
                        },
                        "stageLength" : {
                            "description" : "Model Primitive Datatype = NonNegativeInteger. The (minimum) number of items the CAT Engine can present before requesting next items",
                            "type" : "integer",
                            "format" : "int32",
                            "minimum" : 0
                        }
                    },
                    "required" : [ "itemIdentifiers" ],
                    "additionalProperties" : false
                },
                "OutcomeVariableDType" : {
                    "description" : "The Item result information related to an 'Outcome Variable'.",
                    "type" : "object",
                    "properties" : {
                        "identifier" : {
                            "description" : "Model Primitive Datatype = NCName. The identifier of the Outcome Variable.",
                            "type" : "string"
                        },
                        "cardinality" : {
                            "description" : "The cardinality of the Outcome Variable, taken from the corresponding declaration or definition.",
                            "type" : "string",
                            "enum" : [ "multiple","ordered","record","single" ]
                        },
                        "baseType" : {
                            "description" : "The base type of the Outcome Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.",
                            "type" : "string",
                            "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                        },
                        "view" : {
                            "description" : "The views (if any) declared for the outcome must be copied to the report to enable systems that render the report to hide information not relevant in a specific situation. If no values are given, the outcome's value should be considered relevant in all views.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string",
                                "enum" : [ "author","candidate","proctor","scorer","testConstructor","tutor" ]
                            }
                        },
                        "interpretation" : {
                            "description" : "Model Primitive Datatype = String. A human readable interpretation of the default value.",
                            "type" : "string"
                        },
                        "longInterpretation" : {
                            "description" : "Model Primitive Datatype = AnyURI. An optional link to an extended interpretation of the outcome variable's value.",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "normalMaximum" : {
                            "description" : "Model Primitive Datatype = Double. The normalMaximum attribute optionally defines the maximum magnitude of numeric outcome variables, it must be a positive value. If given, the outcome's value can be divided by normalMaximum and then truncated (if necessary) to obtain a normalized score in the range [-1.0,1.0]. normalMaximum has no affect on responseProcessing or the values that the outcome variable itself can take.",
                            "type" : "number",
                            "format" : "double"
                        },
                        "normalMinimum" : {
                            "description" : "Model Primitive Datatype = Double. The normalMinimum attribute optionally defines the minimum value of numeric outcome variables, it may be negative.",
                            "type" : "number",
                            "format" : "double"
                        },
                        "masteryValue" : {
                            "description" : "Model Primitive Datatype = Double. The masteryValue attribute optionally defines a value for numeric outcome variables above which the aspect being measured is considered to have been mastered by the candidate.",
                            "type" : "number",
                            "format" : "double"
                        },
                        "value" : {
                            "description" : "The value(s) of the outcome variable. The order of the values is significant only if the outcome was declared with ordered cardinality.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/ValueDType"
                            }
                        }
                    },
                    "required" : [ "identifier","cardinality" ],
                    "additionalProperties" : false
                },
                "PCIContextDType" : {
                    "description" : "This is the container for the contextual information that can be supplied for a PCI used within an Item. The contained information is only relevant when there is an 'interactionType' of 'portableCustomInteraction'.",
                    "type" : "object",
                    "properties" : {
                        "customTypeIdentifier" : {
                            "description" : "Model Primitive Datatype = NormalizedString. This is used alongside an 'interactionType' value of 'portableCustomInteraction' to disambiguate which class of PCI is in use as PCIs can vary widely in terms of how they might need to be psychometrically analyzed. This field could potentially also be used to identify which type of a traditional customInteraction is in use by the item.",
                            "type" : "string"
                        },
                        "interactionKind" : {
                            "description" : "Model Primitive Datatype = NormalizedString. This is used to provide insight into the nature of the PCI e.g. this is a PCI which allows a user to add notes to a musical stave to author some music that might be given a description of 'authoring'. This information could be used by a psychometrician, etc. as an indication of a similar type of standard interaction.",
                            "type" : "string"
                        }
                    },
                    "additionalProperties" : false
                },
                "QTIMetadataDType" : {
                    "description" : "This contains the new category of metadata for the recording of QTI specific information.",
                    "type" : "object",
                    "properties" : {
                        "itemTemplate" : {
                            "description" : "Model Primitive Datatype = Boolean. True if the item is actually an item template, in other words, the item changes its appearance based on some random or external factor. An assessmentItem that contains a templateProcessing section.",
                            "type" : "boolean"
                        },
                        "timeDependent" : {
                            "description" : "Model Primitive Datatype = Boolean. Whether or not the item is time dependent. A time dependent item takes the length of time taken for an attempt into consideration when scoring.",
                            "type" : "boolean"
                        },
                        "composite" : {
                            "description" : "Model Primitive Datatype = Boolean. True if the item comprises more than one interaction, for example, an assessmentItem that contains more than one interaction.",
                            "type" : "boolean"
                        },
                        "interactionType" : {
                            "description" : "The interaction type(s) of the item. The vocabulary is comprised of the names, as defined in the information model, of the leaf classes derived from interaction.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string",
                                "enum" : [ "associateInteraction","choiceInteraction","customInteraction","drawingInteraction","endAttemptInteraction","extendedTextInteraction","gapMatchInteraction","graphicAssociateInteraction","graphicGapMatchInteraction","graphicOrderInteraction","hotspotInteraction","hottextInteraction","inlineChoiceInteraction","matchInteraction","mediaInteraction","orderInteraction","portableCustomInteraction","positionObjectInteraction","selectPointInteraction","sliderInteraction","textEntryInteraction","uploadInteraction" ]
                            }
                        },
                        "portableCustomInteractionContext" : {
                            "$ref" : "#/components/schemas/PCIContextDType"
                        },
                        "feedbackType" : {
                            "description" : "Describes the type of feedback, if any, available in the item. If feedback is available then it is described as being non-adaptive or adaptive depending on whether the item is itself adaptive. A non-adaptive item generates feedback based on the responses submitted as part of (the last) attempt only. An adaptive item generates feedback that takes into consideration the path taken through the item, in other words, feedback based on the accumulation of all attempts and not just the last.",
                            "type" : "string",
                            "enum" : [ "adaptive","nonadaptive","none" ]
                        },
                        "solutionAvailable" : {
                            "description" : "Model Primitive Datatype = Boolean. Set to true if a model solution is available for the item. For example, an assessmentItem that provides correct responses for all declared response variables.",
                            "type" : "boolean"
                        },
                        "scoringMode" : {
                            "description" : "The scoringMode is used to denote that the way in which the scoring is achieved. If the Item includes the response processing then the mode is 'responseprocessing'. If human scoring is required the value is 'human' and if some form of machine processing is required then the value is 'externalmachine'.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string",
                                "enum" : [ "human","externalmachine","responseprocessing" ]
                            }
                        },
                        "toolName" : {
                            "description" : "Model Primitive Datatype = String. The name of the tool used to author the evaluation object.",
                            "type" : "string",
                            "maxLength" : 256
                        },
                        "toolVersion" : {
                            "description" : "Model Primitive Datatype = String. The version of the tool used to author the evaluation object.",
                            "type" : "string",
                            "maxLength" : 256
                        },
                        "toolVendor" : {
                            "description" : "Model Primitive Datatype = String. The company which produced the tool used to author the evaluation object.",
                            "type" : "string",
                            "maxLength" : 256
                        }
                    },
                    "additionalProperties" : false
                },
                "ResponseVariableDType" : {
                    "description" : "The Item result information related to a 'Response Variable'.",
                    "type" : "object",
                    "properties" : {
                        "identifier" : {
                            "description" : "Model Primitive Datatype = NCName. The identifier of the Response Variable.",
                            "type" : "string"
                        },
                        "cardinality" : {
                            "description" : "The cardinality of the Response Variable, taken from the corresponding declaration or definition.",
                            "type" : "string",
                            "enum" : [ "multiple","ordered","record","single" ]
                        },
                        "baseType" : {
                            "description" : "The base type of the Response Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.",
                            "type" : "string",
                            "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                        },
                        "choiceSequence" : {
                            "description" : "Model Primitive Datatype = NCName. When a response variable is bound to an interaction that supports the shuffling of choices, the sequence of choices experienced by the candidate will vary between test instances. When shuffling is in effect, the sequence of choices should be reported as a sequence of choice identifiers using this attribute.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string"
                            }
                        },
                        "correctResponse" : {
                            "$ref" : "#/components/schemas/CorrectResponseDType"
                        },
                        "candidateResponse" : {
                            "$ref" : "#/components/schemas/CandidateResponseDType"
                        }
                    },
                    "required" : [ "identifier","cardinality","candidateResponse" ],
                    "additionalProperties" : false
                },
                "ResultsDType" : {
                    "description" : "This is the container for the results that have been accrued by the examinee. These are passed to the CAT Engine to support the selection of the next set of Items.",
                    "type" : "object",
                    "properties" : {
                        "assessmentResult" : {
                            "$ref" : "#/components/schemas/AssessmentResultDType"
                        },
                        "sessionState" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The session state information. This is the data that was supplied by the CAT Engine when the session was created or the next set of Items was requested.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "assessmentResult" ],
                    "additionalProperties" : false
                },
                "SectionDType" : {
                    "description" : "The container for the definition of the Section that is to be created in the CAT Engine. A Section is aligned to a QTI AssessmentSection [QTI, 20a].",
                    "type" : "object",
                    "properties" : {
                        "qtiMetadata" : {
                            "$ref" : "#/components/schemas/QTIMetadataDType"
                        },
                        "qtiUsagedata" : {
                            "description" : "Model Primitive Datatype = String. This is the Base64 encoded XML conforming to IMS QTI 3.0 Usage Date data model [QTI, 20c].",
                            "type" : "string"
                        },
                        "sectionConfiguration" : {
                            "description" : "Model Primitive Datatype = String. This is the Base64 encoded data containing section configuration, aligned with adaptive engine (black box). This format will be proprietary to each adaptive CAT Engine.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "sectionConfiguration" ],
                    "additionalProperties" : false
                },
                "SessionDType" : {
                    "description" : "This is the container for the session configuration data that must be supplied to the CAT Engine when the session is to be created.",
                    "type" : "object",
                    "properties" : {
                        "personalNeedsAndPreferences" : {
                            "description" : "Model Primitive Datatype = NormalizedString. This is the Base64 encoded XML data for the Personal Needs and Preferences (PNP) for the examinee.  This data conforms to the XML as defined in the IMS Access for All Personal Needs and Preferences (AfAPNP) 3.0 XML Binding specification [AFAPNP, 20].",
                            "type" : "string"
                        },
                        "demographics" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The Base64 encoding of the JSON data for the Demographics information for the examinee. This data conforms to the JSON as defined in the IMS OneRoster 1.1 specification [OR, 17].",
                            "type" : "string"
                        },
                        "priorData" : {
                            "description" : "This is proprietary data that is supplied to the CAT Engine as a key/value pairs.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/KeyValuePairDType"
                            }
                        }
                    },
                    "additionalProperties" : false
                },
                "SessionIdentifierDType" : {
                    "description" : "The system that creates the result (for example, the test delivery system) should assign a session identifier that it can use to identify the session.",
                    "type" : "object",
                    "properties" : {
                        "sourceID" : {
                            "description" : "Model Primitive Datatype = AnyURI. A unique identifier of the system which added this identifier to the result.",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "identifier" : {
                            "description" : "Model Primitive Datatype = NCName. The system that creates the report should add a session identifier. Subsequent systems that process the results might use their own identifier for the session and should add this too if the result is exported again for further transport.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "sourceID","identifier" ],
                    "additionalProperties" : false
                },
                "TemplateVariableDType" : {
                    "description" : "The Item result information related to a 'Template Variable'.",
                    "type" : "object",
                    "properties" : {
                        "identifier" : {
                            "description" : "Model Primitive Datatype = NCName. The identifier of the Template Variable.",
                            "type" : "string"
                        },
                        "cardinality" : {
                            "description" : "The cardinality of the Template Variable, taken from the corresponding declaration or definition.",
                            "type" : "string",
                            "enum" : [ "multiple","ordered","record","single" ]
                        },
                        "baseType" : {
                            "description" : "The base type of the Template Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.",
                            "type" : "string",
                            "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                        },
                        "value" : {
                            "description" : "The value(s) of the template variable. The order of the values is significant only if the template variable was declared with ordered cardinality.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/ValueDType"
                            }
                        }
                    },
                    "required" : [ "identifier","cardinality" ],
                    "additionalProperties" : false
                },
                "TestResultDType" : {
                    "description" : "The container for the Test result. When a test result is given the following item results must relate only to items that were selected for presentation as part of the corresponding test session. Furthermore, all items selected for presentation should be reported with a corresponding itemResult.",
                    "type" : "object",
                    "properties" : {
                        "identifier" : {
                            "description" : "Model Primitive Datatype = NCName. The identifier of the test for which this is a result.",
                            "type" : "string"
                        },
                        "datestamp" : {
                            "description" : "Model Primitive Datatype = DateTime. The date stamp of when this result was recorded.",
                            "type" : "string",
                            "format" : "date-time"
                        },
                        "responseVariables" : {
                            "description" : "Indicates that a Response Variable is being reported. This is the value of one of the responses associated with an Item in the corresponding ASI instance [QTI, 20a].",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/ResponseVariableDType"
                            }
                        },
                        "templateVariables" : {
                            "description" : "Indicates that a Template Variable is being reported. This is the value of one of the template variables associated with an Item in the corresponding ASI instance [QTI, 20a].",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/TemplateVariableDType"
                            }
                        },
                        "outcomeVariables" : {
                            "description" : "Indicates that an Outcome Variable is being reported. This is the value of one of the outcomes associated with either an Item or Test and defined in the corresponding ASI instance [QTI, 20a].",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/OutcomeVariableDType"
                            }
                        }
                    },
                    "required" : [ "identifier","datestamp" ],
                    "additionalProperties" : false
                },
                "ValueDType" : {
                    "description" : "A class that can represent a single value of any baseType in variable declarations and result reports. The base-type is defined by the baseType attribute of the declaration except in the case of variables with record cardinality.",
                    "type" : "object",
                    "properties" : {
                        "fieldIdentifier" : {
                            "description" : "Model Primitive Datatype = NCName. This attribute is only used for specifying the field identifier for a value that forms part of a record.",
                            "type" : "string"
                        },
                        "baseType" : {
                            "description" : "This attribute is only used for specifying the base-type of a value that forms part of a record.",
                            "type" : "string",
                            "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                        },
                        "value" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The value being supplied.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "value" ],
                    "additionalProperties" : false
                },
                "imsx_CodeMinorDType" : {
                    "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" : {
                            "description" : "Each reported code minor status code.",
                            "type" : "array",
                            "minItems" : 1,
                            "items" : {
                                "$ref" : "#/components/schemas/imsx_CodeMinorFieldDType"
                            }
                        }
                    },
                    "required" : [ "imsx_codeMinorField" ],
                    "additionalProperties" : false
                },
                "imsx_CodeMinorFieldDType" : {
                    "description" : "This is the container for a single code minor status code.",
                    "type" : "object",
                    "properties" : {
                        "imsx_codeMinorFieldName" : {
                            "description" : "Model Primitive Datatype = NormalizedString. This should contain the identity of the system that has produced the code minor status code report.",
                            "type" : "string"
                        },
                        "imsx_codeMinorFieldValue" : {
                            "description" : "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
                            "type" : "string",
                            "enum" : [ "fullsuccess","forbidden","invaliddata","unauthorisedrequest","internal_server_error","server_busy","unknownobject" ]
                        }
                    },
                    "required" : [ "imsx_codeMinorFieldName","imsx_codeMinorFieldValue" ],
                    "additionalProperties" : false
                },
                "imsx_StatusInfoDType" : {
                    "description" : "This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.",
                    "type" : "object",
                    "properties" : {
                        "imsx_codeMajor" : {
                            "description" : "The code major value (from the corresponding enumerated vocabulary).",
                            "type" : "string",
                            "enum" : [ "success","processing","failure","unsupported" ]
                        },
                        "imsx_severity" : {
                            "description" : "The severity value (from the corresponding enumerated vocabulary).",
                            "type" : "string",
                            "enum" : [ "status","warning","error" ]
                        },
                        "imsx_description" : {
                            "description" : "Model Primitive Datatype = String. A human readable description supplied by the entity creating the status code information.",
                            "type" : "string"
                        },
                        "imsx_codeMinor" : {
                            "$ref" : "#/components/schemas/imsx_CodeMinorDType"
                        }
                    },
                    "required" : [ "imsx_codeMajor","imsx_severity" ],
                    "additionalProperties" : false
                }
            }
        }
    }
            

    B2 CAT Service OpenAPI YAML Listing

    B2.1 OpenAPI 2.0 YAML Listing

    The OpenAPI 2 (YAML) listing (based upon [OAS, 14]) is shown below (the OpenAPI YAML is available at: https://purl.imsglobal.org/cat/v1p0/schema/openapi/imscatv1p0_openapi2_v1p0.yaml).

    # #####################################################################################
    # YAML File Information
    # #####################################################################################
    # 
    # Author:         Colin Smythe (IMS Global, UK), Mark McKell (IMS Global, USA)
    # Date:           9th November, 2020
    # Version:        1.0
    # Status:         IMS Candidate Final
    # Description:    The Computer Adaptive Testing (CAT) Service enables a standard way of implementing adaptive testing using Question and Test Interoperability (QTI). This service has been described using the IMS Model Driven Specification development approach, this being the Platform Specific Model (PSM) of the service.
    # 
    # History:        This is the first release of the Computer Adaptive Testing (CAT) Service definition.
    # 
    # License:        IPR and Distribution Notices
    # 
    #                 This machine readable file is derived from the IMS Computer Adaptive Testing (CAT) Service Version 1.0
    #                 found at http://www.imsglobal.org/cat and the original IMS Global schema binding or code base
    #                 http://www.imsglobal.org/cat.
    # 
    #                 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.
    # 
    #                 IMS 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 IMS procedures with respect to rights in IMS 
    #                 specifications can be found at the IMS Global Intellectual Property Rights web page: http://www.imsglobal.org/ipr/imsipr_policyFinal.pdf.
    # 
    #                 Copyright (c) IMS Global Learning Consortium 1999-2021. All Rights Reserved.
    # 
    #                 Use of this specification to develop products or services is governed by the license with IMS found on the IMS website: http://www.imsglobal.org/license.html.
    # 
    #                 Permission is granted to all parties to use excerpts from this document as needed in producing requests for proposals.
    # 
    #                 The limited permissions granted above are perpetual and will not be revoked by IMS 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 IMPLEMENTERS 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.
    # 
    # Source UML File Information
    # ===========================
    # The source file information must be supplied as an XMI file (without diagram layout information).
    # The supported UML authoring tools are:
    # (a) Poseidon - v6 (and later)
    # (b) Papyrus - v1.1.3 (and later)
    # 
    # Source XSLT File Information
    # ============================
    # XSL Generator:    Specificationv1p0_GenerationToolv1.xsl
    # XSLT Processor:   Saxon
    # Release:          1.0
    # Date:             31st January, 2021
    # Autogen Engineer: Colin Smythe (IMS Global, UK)
    # Autogen Date:     2021-01-30
    # 
    # IMS Global Auto-generation Binding Tool-kit (I-BAT)
    # ===================================================
    # This file was auto-generated using the IMS Global Binding Auto-generation Tool-kit (I-BAT).  While every
    # attempt has been made to ensure that this tool auto-generates the files correctly, users should be aware
    # that this is an experimental tool.  Permission is given to make use of this tool.  IMS Global makes no
    # claim on the materials created by third party users of this tool.  Details on how to use this tool
    # are contained in the IMS Global "I-BAT" documentation available at the IMS Global web-site:
    # http://www.imsglobal.org.
    # 
    # Tool Copyright:  2012-2021  (c) IMS Global Learning Consortium Inc.  All Rights Reserved.
    # 
    # #####################################################################################
    
    swagger: '2.0'
    
    #####################################################################################
    #                               API Information                                     #
    #####################################################################################
    info: 
        version: '1.0'
        title: Computer Adaptive Testing (CAT) Service OpenAPI (YAML) Definition
        description: The Computer Adaptive Testing (CAT) Service enables a standard way of implementing adaptive testing using Question and Test Interoperability (QTI). This service has been described using the IMS Model Driven Specification development approach, this being the Platform Specific Model (PSM) of the service.
        termsOfService: 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 IMS or its successors or assigns. THIS API DEFINITION 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 IMPLEMENTERS 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 API DEFINITION.
        contact: 
            name: Lisa Mattson (COO), IMS Global
            url: http://www.imsglobal.org
            email: lmattson@imsglobal.org
        license: 
            name: IMS Global
            url: https://www.imsglobal.org/license.html
    
    #####################################################################################
    #                   Host, Base Path, Schemes and Content Types                      #
    #####################################################################################
    host: www.imsglobal.org
    basePath: /ims/cat/v1p0
    schemes: 
        - http
        - https
    consumes: 
        - application/json
    produces: 
        - application/json
    
    #####################################################################################
    #                                  Tags                                             #
    #####################################################################################
    tags: 
        - name: SectionsManager
          description: |
            The set of service operations that manage access to the adaptive Sections being handled by the CAT Engine.
        - name: SessionsManager
          description: |
            The set of service operations that manage access to the adaptive Sessions being handled by the CAT Engine.
    
    #####################################################################################
    #                                 Security                                          #
    #####################################################################################
    securityDefinitions:
        OAuth2CCG:
            type: oauth2
            description: A CAT engine implementation may adopt any scope structure and naming scheme which meets its requirements, including not using scopes at all. The scopes shown here are recommended, not required.
            flow: application
            tokenUrl: https://www.service-dependent.com/oauth2Token
            scopes: 
                https://purl.imsglobal.org/cat/v1p0/scope/api: This enables access to all of the endpoints.
                https://purl.imsglobal.org/cat/v1p0/scope/configure: This enables access to the endoints that permit the management of Sections.
                https://purl.imsglobal.org/cat/v1p0/scope/deliver: This enables access to the endoints that permit the management of Sessions.
    
    
    #####################################################################################
    #                                   Paths                                           #
    #####################################################################################
    paths: 
        /sections:
            post:
                operationId: createSection
                summary: The REST createbp request message for the createSection() API call.
                tags: 
                    - SectionsManager
                description: |
                    This is a request to the CAT Engine to create a new adaptive Section. The CAT Engine is responsible for assigning the unique identifier to be used for this Section in other exchanges. This request is NOT idempotent.
                parameters: 
                    - name: section
                      in: body
                      description: |
                          The data for the configuration of the new adaptive Section.
                      required: true
                      schema: 
                          $ref: "#/definitions/SectionDType"
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/cat/v1p0/scope/api
                        - https://purl.imsglobal.org/cat/v1p0/scope/configure
                responses: 
                    "201" : 
                        description: |
                            The response code for when the new Section has been created in the CAT Engine and the associated identifier has been returned.
                        schema: 
                            $ref: "#/definitions/CreateSectionResponseBodyDType"
                    "400" : 
                        description: |
                            The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "500" : 
                        description: |
                            This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
    
        /sections/{sectionIdentifier}:
            get:
                operationId: getSection
                summary: The REST read request message for the getSection() API call.
                tags: 
                    - SectionsManager
                description: |
                    This request returns the parameters which were used by the CAT engine to create the adaptive section, and the list of the items in the adaptive section's item pool, as configured by the CAT engine. It is recommended that assessment platforms and/or delivery engines use this request to verify that the item pool, as configured by the CAT engine, corresponds exactly to the list of items in the QTI source for the adaptive section. It is also recommended that test administrators verify that each item in the item pool is accessible and deliverable before commencing delivery of candidate sessions. The Get Section request may be used for this, and may be made at any time after a successful Create Section request, as many times as required.
                parameters: 
                    - name: sectionIdentifier
                      in: path
                      description: |
                          The LUID that identifies the Section for which the data on the CAT Engine is to be obtained.
                      required: true
                      type: string
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/cat/v1p0/scope/api
                        - https://purl.imsglobal.org/cat/v1p0/scope/configure
                responses: 
                    "200" : 
                        description: |
                            The response code for when the list of Items in the section's item pool has been returned. The response message contains the list of Items, the section configuration used to create the section, and any qtiUsagedata and qtiMetadata used to create the section.
                        schema: 
                            $ref: "#/definitions/GetSectionResponseBodyDType"
                    "400" : 
                        description: |
                            The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "500" : 
                        description: |
                            This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
            delete:
                operationId: endSection
                summary: The REST delete request message for the endSection() API call.
                tags: 
                    - SectionsManager
                description: |
                    This request ends all candidate sessions for the section which have not already ended, and ends the section. The sectionIdentifier, sessionIdentifiers, and sessionStates returned from previous requests related to the section become invalid. The delivery engine should not make any further requests related to the section or any session for the section. For a REST-based binding this request uses the DELETE HTTP method because of REST conventions, but the CAT engine is not required to physically delete any session or section data. This request should not be repeated once it has succeeded. 
                parameters: 
                    - name: sectionIdentifier
                      in: path
                      description: |
                          The LUID that identifies the Section to be deleted on the CAT Engine.
                      required: true
                      type: string
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/cat/v1p0/scope/api
                        - https://purl.imsglobal.org/cat/v1p0/scope/configure
                responses: 
                    "204" : 
                        description: |
                            The response code for when the identified Section has been deleted in the CAT Engine. There is no response payload.
                    "400" : 
                        description: |
                            The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "500" : 
                        description: |
                            This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
    
        /sections/{sectionIdentifier}/sessions:
            post:
                operationId: createSession
                summary: The REST createbp request message for the createSession() API call.
                tags: 
                    - SessionsManager
                description: |
                    This request initializes a candidate session for the adaptive section. The request optionally provides the CAT engine with information related to the candidate. The CAT engine returns the initial stage (list of items) to be presented to the candidate. This request may be made multiple times after a successful Create Section request, once per candidate, when each candidate enters the adaptive section on the test. This request is NOT idempotent.
                parameters: 
                    - name: sectionIdentifier
                      in: path
                      description: |
                          The LUID that identifies the Section in the CAT Engine to which this new Session is to be assigned.
                      required: true
                      type: string
                    - name: session
                      in: body
                      description: |
                          The Session configuration data including the information about the examinee.
                      required: true
                      schema: 
                          $ref: "#/definitions/SessionDType"
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/cat/v1p0/scope/api
                        - https://purl.imsglobal.org/cat/v1p0/scope/deliver
                responses: 
                    "201" : 
                        description: |
                            The response code for when the new Session has been created in the CAT Engine and the associated identifier has been returned. The response message consists of the identifier allocated to the session, the initial set of Items to be presented and the session state to be used for later requests.
                        schema: 
                            $ref: "#/definitions/CreateSessionResponseBodyDType"
                    "400" : 
                        description: |
                            The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "500" : 
                        description: |
                            This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
    
        /sections/{sectionIdentifier}/sessions/{sessionIdentifier}:
            delete:
                operationId: endSession
                summary: The REST delete request message for the endSession() API call.
                tags: 
                    - SessionsManager
                description: |
                    This request ends the candidate session. The sessionIdentifier, and the sessionState returned from any previous request in the session, become invalid. The delivery engine should not make any further requests related to the session. For a REST-based binding this request uses the DELETE HTTP method because of REST conventions; but it is not required that CAT engines physically delete data or resources associated with the session. If the identified session cannot be found then the 'unknownobject' status code must be reported.
                parameters: 
                    - name: sectionIdentifier
                      in: path
                      description: |
                          The LUID that identifies the Section to be deleted on the CAT Engine.
                      required: true
                      type: string
                    - name: sessionIdentifier
                      in: path
                      description: |
                          The LUID that identifies the Session, in the context of the identified Section, to be deleted on the CAT Engine.
                      required: true
                      type: string
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/cat/v1p0/scope/api
                        - https://purl.imsglobal.org/cat/v1p0/scope/deliver
                responses: 
                    "204" : 
                        description: |
                            The response code for when the identified Session has been deleted in the CAT Engine. There is no response payload.
                    "400" : 
                        description: |
                            The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "500" : 
                        description: |
                            This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
    
        /sections/{sectionIdentifier}/sessions/{sessionIdentifier}/results:
            post:
                operationId: submitResults
                summary: The REST update request message for the submitResults() API call.
                tags: 
                    - SessionsManager
                description: |
                    This request sends the results from the current item stage in a candidate session to the CAT engine. The CAT engine returns its computed outcome variable values for the current stage and the test as a whole. It also returns the next item stage to be presented to the candidate. Instead of the next item stage, it may also return an indication that the adaptive section has ended, by returning an empty list for nextItems. If the identified Section/Session cannot be found then the 'unknownobject' status code must be reported.
                parameters: 
                    - name: sectionIdentifier
                      in: path
                      description: |
                          The LUID that identifies the Section in the CAT Engine to be used.
                      required: true
                      type: string
                    - name: sessionIdentifier
                      in: path
                      description: |
                          The LUID that identifies the Session, in the context of the Section, in the CAT Engine to be used.
                      required: true
                      type: string
                    - name: resultSet
                      in: body
                      description: |
                          The set of results that have been obtained, so far, by the examinee for the identified session.
                      required: true
                      schema: 
                          $ref: "#/definitions/ResultsDType"
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/cat/v1p0/scope/api
                        - https://purl.imsglobal.org/cat/v1p0/scope/deliver
                responses: 
                    "201" : 
                        description: |
                            The response code for when the next set of Items to be presented to the examinee has been returned. The response message contains the next set of Items, the session state to be used in later requests and, optionally, the assessment results.
                        schema: 
                            $ref: "#/definitions/SubmitResultsResponseBodyDType"
                    "400" : 
                        description: |
                            The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "500" : 
                        description: |
                            This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
    
    
    #####################################################################################
    #                               Definitions                                         #
    #####################################################################################
        definitions: 
        CreateSessionResponseBodyDType:
            description: |
                The response code for when the new Session has been created in the CAT Engine and the associated identifier has been returned. The response message consists of the identifier allocated to the session, the initial set of Items to be presented and the session state to be used for later requests.
            type: object
            properties: 
                sessionIdentifier:
                    description: Model Primitive Datatype = NCName.
                    type: string
                nextItems:
                    $ref: "#/definitions/NextItemSetDType"
                sessionState:
                    description: Model Primitive Datatype = NormalizedString.
                    type: string
            additionalProperties: false
        GetSectionResponseBodyDType:
            description: |
                The response code for when the list of Items in the section's item pool has been returned. The response message contains the list of Items, the section configuration used to create the section, and any qtiUsagedata and qtiMetadata used to create the section.
            type: object
            properties: 
                items:
                    $ref: "#/definitions/ItemSetDType"
                section:
                    $ref: "#/definitions/SectionDType"
            additionalProperties: false
        SubmitResultsResponseBodyDType:
            description: |
                The response code for when the next set of Items to be presented to the examinee has been returned. The response message contains the next set of Items, the session state to be used in later requests and, optionally, the assessment results.
            type: object
            properties: 
                nextItems:
                    $ref: "#/definitions/NextItemSetDType"
                assessmentResult:
                    $ref: "#/definitions/AssessmentResultDType"
                sessionState:
                    description: Model Primitive Datatype = NormalizedString.
                    type: string
            additionalProperties: false
        CreateSectionResponseBodyDType:
            description: |
                The response code for when the new Section has been created in the CAT Engine and the associated identifier has been returned.
            type: object
            properties: 
                sectionIdentifier:
                    description: Model Primitive Datatype = NCName.
                    type: string
            additionalProperties: false
        AssessmentResultDType:
            description: |
                An Assessment Result is used to report the results of a candidate's interaction with a test and/or one or more items attempted. Information about the test is optional, in some systems it may be possible to interact with items that are not organized into a test at all. For example, items that are organized with learning resources and presented individually in a formative context.
            type: object
            properties: 
                context: 
                    $ref: "#/definitions/ContextDType"
                testResult: 
                    $ref: "#/definitions/TestResultDType"
                itemResult: 
                    description: |
                        When a test result is given the following item results must relate only to items that were selected for presentation as part of the corresponding test session. Furthermore, all items selected for presentation should be reported with a corresponding itemResult.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/ItemResultDType"
            additionalProperties: false
        CandidateResponseDType:
            description: |
                The response given by the candidate.
            type: object
            properties: 
                value: 
                    description: |
                        The value(s) of the response variable. A NULL value, resulting from no response, is indicated by the absence of any value. The order of the values is significant only if the response was declared with ordered cardinality.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/ValueDType"
            additionalProperties: false
        ContextDType:
            description: |
                This is the context for the 'assessmentResult'. It provides the corresponding set of identifiers.
            type: object
            properties: 
                sourcedId: 
                    description: A unique identifier for the test candidate. Model Primitive Datatype = NCName.
                    type: string
                sessionIdentifiers: 
                    description: |
                        The system that creates the result (for example, the test delivery system) should assign a session identifier that it can use to identify the session. Subsequent systems that process the result might assign their own identifier to the session which should be added to the context if the result is modified and exported for transport again.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/SessionIdentifierDType"
            additionalProperties: false
        CorrectResponseDType:
            description: |
                The correct response may be output as part of the report if desired. Systems are not limited to reporting correct responses declared in responseDeclarations. For example, a correct response may be set by a templateRule or may simply have been suppressed from the declaration passed to the delivery engine e.g. for security.
            type: object
            properties: 
                interpretation: 
                    description: A human readable interpretation of the correct value. Model Primitive Datatype = String.
                    type: string
                value: 
                    description: |
                        The order of the values is signficant only when the response is of ordered cardinality.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/ValueDType"
            additionalProperties: false
        ItemResultDType:
            description: |
                The result of an item session is reported with an itemResult. A report may contain multiple results for the same instance of an item representing multiple attempts, progression through an adaptive item or even more detailed tracking. In these cases, each item result must have a different datestamp.
            type: object
            required: 
                - identifier
                - datestamp
                - sessionStatus
            properties: 
                identifier: 
                    description: The identifier of the item for which this is a result. For item results that are reported as part of a test result this is the identifier used to refer to the item in the test (see assessmentItemRef). For item results that are reported on their own, this can be any suitable identifier for the item. Where possible, the value should match the identifier attribute on the associated assessmentItem. Model Primitive Datatype = NCName.
                    type: string
                sequenceIndex: 
                    description: For item results that are reported as part of a test, this attribute must be used to indicate the position of the item within the specific instance of the test. The first item of the first part of the test is defined to have sequence index 1. Model Primitive Datatype = NonNegativeInteger.
                    type: integer
                    format: int32
                    minimum: 0
                datestamp: 
                    description: The date stamp of when this result was recorded. Model Primitive Datatype = DateTime.
                    type: string
                    format: date-time
                sessionStatus: 
                    description: |
                        The session status is used to interpret the values of the item variables. See the sessionStatus vocabulary.
                    type: string
                    enum: 
                       - final
                       - initial
                       - pendingResponseProcessing
                       - pendingSubmission
                responseVariables: 
                    description: |
                        Indicates that a Response Variable is being reported. This is the value of one of the responses associated with an Item in the corresponding ASI instance.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/ResponseVariableDType"
                templateVariables: 
                    description: |
                        Indicates that a Template Variable is being reported. This is the value of one of the template variables associated with an Item in the corresponding ASI instance.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/TemplateVariableDType"
                outcomeVariables: 
                    description: |
                        Indicates that an Outcome Variable is being reported. This is the value of one of the outcomes associated with either an Item or Test and defined in the corresponding ASI instance.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/OutcomeVariableDType"
                candidateComment: 
                    description: An optional comment supplied by the candidate (see the allowComment in the ASI documentation [QTI, 20a]). Model Primitive Datatype = String.
                    type: string
            additionalProperties: false
        ItemSetDType:
            description: |
                A set of Item identfiers.
            type: object
            required: 
                - itemIdentifiers
            properties: 
                itemIdentifiers: 
                    description: |
                        The Identifiers for the set of Items. These should be the GUIDs that have been assigned to AssessmentItems when defined using IMS QTI. Model Primitive Datatype = NCName.
                    type: array
                    minItems: 1
                    items: 
                        type: string
            additionalProperties: false
        KeyValuePairDType:
            description: |
                The container for the values assigned to the Key/Value pair.
            type: object
            required: 
                - key
                - value
            properties: 
                glossaryURI: 
                    description: This is a URI to the definition of the data being supplied in this accompanying key/value pair. This definition should provide a human readable description of the data-type and value space for the value being identified by its key.  Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                key: 
                    description: The key for the value to be supplied. Model Primitive Datatype = String.
                    type: string
                value: 
                    description: The value being supplied. Model Primitive Datatype = String.
                    type: string
            additionalProperties: false
        NextItemSetDType:
            description: |
                The container for the information about the set of next Items that should be presented to the examinee.
            type: object
            required: 
                - itemIdentifiers
            properties: 
                itemIdentifiers: 
                    description: |
                        The Identifiers for the set of Items that should be presented next. These should be the GUIDs that have been assigned to AssessmentItems when defined using IMS QTI. Model Primitive Datatype = NCName.
                    type: array
                    minItems: 1
                    items: 
                        type: string
                stageLength: 
                    description: The (minimum) number of items the CAT Engine can present before requesting next items Model Primitive Datatype = NonNegativeInteger.
                    type: integer
                    format: int32
                    minimum: 0
            additionalProperties: false
        OutcomeVariableDType:
            description: |
                The Item result information related to an 'Outcome Variable'.
            type: object
            required: 
                - identifier
                - cardinality
            properties: 
                identifier: 
                    description: The identifier of the Outcome Variable. Model Primitive Datatype = NCName.
                    type: string
                cardinality: 
                    description: |
                        The cardinality of the Outcome Variable, taken from the corresponding declaration or definition.
                    type: string
                    enum: 
                       - multiple
                       - ordered
                       - record
                       - single
                baseType: 
                    description: |
                        The base type of the Outcome Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.
                    type: string
                    enum: 
                       - boolean
                       - directedPair
                       - duration
                       - file
                       - float
                       - identifier
                       - integer
                       - pair
                       - point
                       - string
                       - uri
                view: 
                    description: |
                        The views (if any) declared for the outcome must be copied to the report to enable systems that render the report to hide information not relevant in a specific situation. If no values are given, the outcome's value should be considered relevant in all views.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                        enum: 
                           - author
                           - candidate
                           - proctor
                           - scorer
                           - testConstructor
                           - tutor
                interpretation: 
                    description: A human readable interpretation of the default value. Model Primitive Datatype = String.
                    type: string
                longInterpretation: 
                    description: An optional link to an extended interpretation of the outcome variable's value. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                normalMaximum: 
                    description: The normalMaximum attribute optionally defines the maximum magnitude of numeric outcome variables, it must be a positive value. If given, the outcome's value can be divided by normalMaximum and then truncated (if necessary) to obtain a normalized score in the range [-1.0,1.0]. normalMaximum has no affect on responseProcessing or the values that the outcome variable itself can take. Model Primitive Datatype = Double.
                    type: number
                    format: double
                normalMinimum: 
                    description: The normalMinimum attribute optionally defines the minimum value of numeric outcome variables, it may be negative. Model Primitive Datatype = Double.
                    type: number
                    format: double
                masteryValue: 
                    description: The masteryValue attribute optionally defines a value for numeric outcome variables above which the aspect being measured is considered to have been mastered by the candidate. Model Primitive Datatype = Double.
                    type: number
                    format: double
                value: 
                    description: |
                        The value(s) of the outcome variable. The order of the values is significant only if the outcome was declared with ordered cardinality.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/ValueDType"
            additionalProperties: false
        PCIContextDType:
            description: |
                This is the container for the contextual information that can be supplied for a PCI used within an Item. The contained information is only relevant when there is an 'interactionType' of 'portableCustomInteraction'.
            type: object
            properties: 
                customTypeIdentifier: 
                    description: This is used alongside an 'interactionType' value of 'portableCustomInteraction' to disambiguate which class of PCI is in use as PCIs can vary widely in terms of how they might need to be psychometrically analyzed. This field could potentially also be used to identify which type of a traditional customInteraction is in use by the item. Model Primitive Datatype = NormalizedString.
                    type: string
                interactionKind: 
                    description: This is used to provide insight into the nature of the PCI e.g. this is a PCI which allows a user to add notes to a musical stave to author some music that might be given a description of 'authoring'. This information could be used by a psychometrician, etc. as an indication of a similar type of standard interaction. Model Primitive Datatype = NormalizedString.
                    type: string
            additionalProperties: false
        QTIMetadataDType:
            description: |
                This contains the new category of metadata for the recording of QTI specific information.
            type: object
            properties: 
                itemTemplate: 
                    description: True if the item is actually an item template, in other words, the item changes its appearance based on some random or external factor. An assessmentItem that contains a templateProcessing section. Model Primitive Datatype = Boolean.
                    type: boolean
                timeDependent: 
                    description: Whether or not the item is time dependent. A time dependent item takes the length of time taken for an attempt into consideration when scoring. Model Primitive Datatype = Boolean.
                    type: boolean
                composite: 
                    description: True if the item comprises more than one interaction, for example, an assessmentItem that contains more than one interaction. Model Primitive Datatype = Boolean.
                    type: boolean
                interactionType: 
                    description: |
                        The interaction type(s) of the item. The vocabulary is comprised of the names, as defined in the information model, of the leaf classes derived from interaction.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                        enum: 
                           - associateInteraction
                           - choiceInteraction
                           - customInteraction
                           - drawingInteraction
                           - endAttemptInteraction
                           - extendedTextInteraction
                           - gapMatchInteraction
                           - graphicAssociateInteraction
                           - graphicGapMatchInteraction
                           - graphicOrderInteraction
                           - hotspotInteraction
                           - hottextInteraction
                           - inlineChoiceInteraction
                           - matchInteraction
                           - mediaInteraction
                           - orderInteraction
                           - portableCustomInteraction
                           - positionObjectInteraction
                           - selectPointInteraction
                           - sliderInteraction
                           - textEntryInteraction
                           - uploadInteraction
                portableCustomInteractionContext: 
                    $ref: "#/definitions/PCIContextDType"
                feedbackType: 
                    description: |
                        Describes the type of feedback, if any, available in the item. If feedback is available then it is described as being non-adaptive or adaptive depending on whether the item is itself adaptive. A non-adaptive item generates feedback based on the responses submitted as part of (the last) attempt only. An adaptive item generates feedback that takes into consideration the path taken through the item, in other words, feedback based on the accumulation of all attempts and not just the last.
                    type: string
                    enum: 
                       - adaptive
                       - nonadaptive
                       - none
                solutionAvailable: 
                    description: Set to true if a model solution is available for the item. For example, an assessmentItem that provides correct responses for all declared response variables. Model Primitive Datatype = Boolean.
                    type: boolean
                scoringMode: 
                    description: |
                        The scoringMode is used to denote that the way in which the scoring is achieved. If the Item includes the response processing then the mode is 'responseprocessing'. If human scoring is required the value is 'human' and if some form of machine processing is required then the value is 'externalmachine'.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                        enum: 
                           - human
                           - externalmachine
                           - responseprocessing
                toolName: 
                    description: The name of the tool used to author the evaluation object. Model Primitive Datatype = String.
                    type: string
                toolVersion: 
                    description: The version of the tool used to author the evaluation object. Model Primitive Datatype = String.
                    type: string
                toolVendor: 
                    description: The company which produced the tool used to author the evaluation object. Model Primitive Datatype = String.
                    type: string
            additionalProperties: false
        ResponseVariableDType:
            description: |
                The Item result information related to a 'Response Variable'.
            type: object
            required: 
                - identifier
                - cardinality
                - candidateResponse
            properties: 
                identifier: 
                    description: The identifier of the Response Variable. Model Primitive Datatype = NCName.
                    type: string
                cardinality: 
                    description: |
                        The cardinality of the Response Variable, taken from the corresponding declaration or definition.
                    type: string
                    enum: 
                       - multiple
                       - ordered
                       - record
                       - single
                baseType: 
                    description: |
                        The base type of the Response Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.
                    type: string
                    enum: 
                       - boolean
                       - directedPair
                       - duration
                       - file
                       - float
                       - identifier
                       - integer
                       - pair
                       - point
                       - string
                       - uri
                choiceSequence: 
                    description: |
                        When a response variable is bound to an interaction that supports the shuffling of choices, the sequence of choices experienced by the candidate will vary between test instances. When shuffling is in effect, the sequence of choices should be reported as a sequence of choice identifiers using this attribute. Model Primitive Datatype = NCName.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                correctResponse: 
                    $ref: "#/definitions/CorrectResponseDType"
                candidateResponse: 
                    $ref: "#/definitions/CandidateResponseDType"
            additionalProperties: false
        ResultsDType:
            description: |
                This is the container for the results that have been accrued by the examinee. These are passed to the CAT Engine to support the selection of the next set of Items.
            type: object
            required: 
                - assessmentResult
            properties: 
                assessmentResult: 
                    $ref: "#/definitions/AssessmentResultDType"
                sessionState: 
                    description: The session state information. This is the data that was supplied by the CAT Engine when the session was created or the next set of Items was requested. Model Primitive Datatype = NormalizedString.
                    type: string
            additionalProperties: false
        SectionDType:
            description: |
                The container for the definition of the Section that is to be created in the CAT Engine. A Section is aligned to a QTI AssessmentSection [QTI, 20a].
            type: object
            required: 
                - sectionConfiguration
            properties: 
                qtiMetadata: 
                    $ref: "#/definitions/QTIMetadataDType"
                qtiUsagedata: 
                    description: This is the Base64 encoded XML conforming to IMS QTI 3.0 Usage Date data model [QTI, 20c]. Model Primitive Datatype = String.
                    type: string
                sectionConfiguration: 
                    description: This is the Base64 encoded data containing section configuration, aligned with adaptive engine (black box). This format will be proprietary to each adaptive CAT Engine. Model Primitive Datatype = String.
                    type: string
            additionalProperties: false
        SessionDType:
            description: |
                This is the container for the session configuration data that must be supplied to the CAT Engine when the session is to be created.
            type: object
            properties: 
                personalNeedsAndPreferences: 
                    description: This is the Base64 encoded XML data for the Personal Needs and Preferences (PNP) for the examinee.  This data conforms to the XML as defined in the IMS Access for All Personal Needs and Preferences (AfAPNP) 3.0 XML Binding specification [AFAPNP, 20]. Model Primitive Datatype = NormalizedString.
                    type: string
                demographics: 
                    description: The Base64 encoding of the JSON data for the Demographics information for the examinee. This data conforms to the JSON as defined in the IMS OneRoster 1.1 specification [OR, 17]. Model Primitive Datatype = NormalizedString.
                    type: string
                priorData: 
                    description: |
                        This is proprietary data that is supplied to the CAT Engine as a key/value pairs.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/KeyValuePairDType"
            additionalProperties: false
        SessionIdentifierDType:
            description: |
                The system that creates the result (for example, the test delivery system) should assign a session identifier that it can use to identify the session.
            type: object
            required: 
                - sourceID
                - identifier
            properties: 
                sourceID: 
                    description: A unique identifier of the system which added this identifier to the result. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                identifier: 
                    description: The system that creates the report should add a session identifier. Subsequent systems that process the results might use their own identifier for the session and should add this too if the result is exported again for further transport. Model Primitive Datatype = NCName.
                    type: string
            additionalProperties: false
        TemplateVariableDType:
            description: |
                The Item result information related to a 'Template Variable'.
            type: object
            required: 
                - identifier
                - cardinality
            properties: 
                identifier: 
                    description: The identifier of the Template Variable. Model Primitive Datatype = NCName.
                    type: string
                cardinality: 
                    description: |
                        The cardinality of the Template Variable, taken from the corresponding declaration or definition.
                    type: string
                    enum: 
                       - multiple
                       - ordered
                       - record
                       - single
                baseType: 
                    description: |
                        The base type of the Template Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.
                    type: string
                    enum: 
                       - boolean
                       - directedPair
                       - duration
                       - file
                       - float
                       - identifier
                       - integer
                       - pair
                       - point
                       - string
                       - uri
                value: 
                    description: |
                        The value(s) of the template variable. The order of the values is significant only if the template variable was declared with ordered cardinality.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/ValueDType"
            additionalProperties: false
        TestResultDType:
            description: |
                The container for the Test result. When a test result is given the following item results must relate only to items that were selected for presentation as part of the corresponding test session. Furthermore, all items selected for presentation should be reported with a corresponding itemResult.
            type: object
            required: 
                - identifier
                - datestamp
            properties: 
                identifier: 
                    description: The identifier of the test for which this is a result. Model Primitive Datatype = NCName.
                    type: string
                datestamp: 
                    description: The date stamp of when this result was recorded. Model Primitive Datatype = DateTime.
                    type: string
                    format: date-time
                responseVariables: 
                    description: |
                        Indicates that a Response Variable is being reported. This is the value of one of the responses associated with an Item in the corresponding ASI instance [QTI, 20a].
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/ResponseVariableDType"
                templateVariables: 
                    description: |
                        Indicates that a Template Variable is being reported. This is the value of one of the template variables associated with an Item in the corresponding ASI instance [QTI, 20a].
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/TemplateVariableDType"
                outcomeVariables: 
                    description: |
                        Indicates that an Outcome Variable is being reported. This is the value of one of the outcomes associated with either an Item or Test and defined in the corresponding ASI instance [QTI, 20a].
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/OutcomeVariableDType"
            additionalProperties: false
        ValueDType:
            description: |
                A class that can represent a single value of any baseType in variable declarations and result reports. The base-type is defined by the baseType attribute of the declaration except in the case of variables with record cardinality.
            type: object
            required: 
                - value
            properties: 
                fieldIdentifier: 
                    description: This attribute is only used for specifying the field identifier for a value that forms part of a record. Model Primitive Datatype = NCName.
                    type: string
                baseType: 
                    description: |
                        This attribute is only used for specifying the base-type of a value that forms part of a record.
                    type: string
                    enum: 
                       - boolean
                       - directedPair
                       - duration
                       - file
                       - float
                       - identifier
                       - integer
                       - pair
                       - point
                       - string
                       - uri
                value: 
                    description: The value being supplied. Model Primitive Datatype = NormalizedString.
                    type: string
            additionalProperties: false
        imsx_CodeMinorDType:
            description: |
                This is the container for the set of code minor status codes reported in the responses from the Service Provider.
            type: object
            required: 
                - imsx_codeMinorField
            properties: 
                imsx_codeMinorField: 
                    description: |
                        Each reported code minor status code.
                    type: array
                    minItems: 1
                    items: 
                        $ref: "#/definitions/imsx_CodeMinorFieldDType"
            additionalProperties: false
        imsx_CodeMinorFieldDType:
            description: |
                This is the container for a single code minor status code.
            type: object
            required: 
                - imsx_codeMinorFieldName
                - imsx_codeMinorFieldValue
            properties: 
                imsx_codeMinorFieldName: 
                    description: This should contain the identity of the system that has produced the code minor status code report. Model Primitive Datatype = NormalizedString.
                    type: string
                imsx_codeMinorFieldValue: 
                    description: |
                        The code minor status code (this is a value from the corresponding enumerated vocabulary).
                    type: string
                    enum: 
                       - fullsuccess
                       - forbidden
                       - invaliddata
                       - unauthorisedrequest
                       - internal_server_error
                       - server_busy
                       - unknownobject
            additionalProperties: false
        imsx_StatusInfoDType:
            description: |
                This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.
            type: object
            required: 
                - imsx_codeMajor
                - imsx_severity
            properties: 
                imsx_codeMajor: 
                    description: |
                        The code major value (from the corresponding enumerated vocabulary).
                    type: string
                    enum: 
                       - success
                       - processing
                       - failure
                       - unsupported
                imsx_severity: 
                    description: |
                        The severity value (from the corresponding enumerated vocabulary).
                    type: string
                    enum: 
                       - status
                       - warning
                       - error
                imsx_description: 
                    description: A human readable description supplied by the entity creating the status code information. Model Primitive Datatype = String.
                    type: string
                imsx_codeMinor: 
                    $ref: "#/definitions/imsx_CodeMinorDType"
            additionalProperties: false
            

    B2.2 OpenAPI 3.0 YAML Listing

    The OpenAPI 3 (YAML) listing (based upon [OAS, 17]) is shown below (the OpenAPI YAML is available at: https://purl.imsglobal.org/cat/v1p0/schema/openapi/imscatv1p0_openapi3_v1p0.yaml).

    # #####################################################################################
    # YAML File Information
    # #####################################################################################
    # 
    # Author:         Colin Smythe (IMS Global, UK), Mark McKell (IMS Global, USA)
    # Date:           9th November, 2020
    # Version:        1.0
    # Status:         IMS Candidate Final
    # Description:    The Computer Adaptive Testing (CAT) Service enables a standard way of implementing adaptive testing using Question and Test Interoperability (QTI). This service has been described using the IMS Model Driven Specification development approach, this being the Platform Specific Model (PSM) of the service.
    # 
    # History:        This is the first release of the Computer Adaptive Testing (CAT) Service definition.
    # 
    # License:        IPR and Distribution Notices
    # 
    #                 This machine readable file is derived from the IMS Computer Adaptive Testing (CAT) Service Version 1.0
    #                 found at http://www.imsglobal.org/cat and the original IMS Global schema binding or code base
    #                 http://www.imsglobal.org/cat.
    # 
    #                 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.
    # 
    #                 IMS 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 IMS procedures with respect to rights in IMS 
    #                 specifications can be found at the IMS Global Intellectual Property Rights web page: http://www.imsglobal.org/ipr/imsipr_policyFinal.pdf.
    # 
    #                 Copyright (c) IMS Global Learning Consortium 1999-2021. All Rights Reserved.
    # 
    #                 Use of this specification to develop products or services is governed by the license with IMS found on the IMS website: http://www.imsglobal.org/license.html.
    # 
    #                 Permission is granted to all parties to use excerpts from this document as needed in producing requests for proposals.
    # 
    #                 The limited permissions granted above are perpetual and will not be revoked by IMS 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 IMPLEMENTERS 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.
    # 
    # Source UML File Information
    # ===========================
    # The source file information must be supplied as an XMI file (without diagram layout information).
    # The supported UML authoring tools are:
    # (a) Poseidon - v6 (and later)
    # (b) Papyrus - v1.1.3 (and later)
    # 
    # Source XSLT File Information
    # ============================
    # XSL Generator:    Specificationv1p0_GenerationToolv1.xsl
    # XSLT Processor:   Saxon
    # Release:          1.0
    # Date:             31st January, 2021
    # Autogen Engineer: Colin Smythe (IMS Global, UK)
    # Autogen Date:     2021-01-30
    # 
    # IMS Global Auto-generation Binding Tool-kit (I-BAT)
    # ===================================================
    # This file was auto-generated using the IMS Global Binding Auto-generation Tool-kit (I-BAT).  While every
    # attempt has been made to ensure that this tool auto-generates the files correctly, users should be aware
    # that this is an experimental tool.  Permission is given to make use of this tool.  IMS Global makes no
    # claim on the materials created by third party users of this tool.  Details on how to use this tool
    # are contained in the IMS Global "I-BAT" documentation available at the IMS Global web-site:
    # http://www.imsglobal.org.
    # 
    # Tool Copyright:  2012-2021  (c) IMS Global Learning Consortium Inc.  All Rights Reserved.
    # 
    # #####################################################################################
    
    openapi: '3.0.0'
    
    #####################################################################################
    #                               API Information                                     #
    #####################################################################################
    info: 
        version: '1.0'
        title: Computer Adaptive Testing (CAT) Service OpenAPI (YAML) Definition
        description: The Computer Adaptive Testing (CAT) Service enables a standard way of implementing adaptive testing using Question and Test Interoperability (QTI). This service has been described using the IMS Model Driven Specification development approach, this being the Platform Specific Model (PSM) of the service.
        termsOfService: https://www.imsglobal.org/license.html
        contact: 
            name: Lisa Mattson (COO), IMS Global
            url: http://www.imsglobal.org
            email: lmattson@imsglobal.org
        license: 
            name: IMS Global
            url: https://www.imsglobal.org/license.html
    
    #####################################################################################
    #                                 Servers                                           #
    #####################################################################################
    servers: 
        - url: www.imsglobal.org/ims/cat/v1p0
          description: The above Server URL should be changed to the actual server location.
    
    #####################################################################################
    #                                  Tags                                             #
    #####################################################################################
    tags: 
        - name: SectionsManager
          description: |
            The set of service operations that manage access to the adaptive Sections being handled by the CAT Engine.
        - name: SessionsManager
          description: |
            The set of service operations that manage access to the adaptive Sessions being handled by the CAT Engine.
    
    #####################################################################################
    #                                   Paths                                           #
    #####################################################################################
    paths: 
        /sections:
            post:
                operationId: createSection
                summary: The REST createbp request message for the createSection() API call.
                tags: 
                    - SectionsManager
                description: |
                    This is a request to the CAT Engine to create a new adaptive Section. The CAT Engine is responsible for assigning the unique identifier to be used for this Section in other exchanges. This request is NOT idempotent.
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/cat/v1p0/scope/api
                        - https://purl.imsglobal.org/cat/v1p0/scope/configure
                requestBody:
                    description: |
                        The data for the configuration of the new adaptive Section.
                    content: 
                        application/json: 
                            schema: 
                                $ref: "#/components/schemas/SectionDType"
                    required: true
                responses: 
                    "201" : 
                        description: |
                            The response code for when the new Section has been created in the CAT Engine and the associated identifier has been returned.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/CreateSectionResponseBodyDType"
                    "400" : 
                        description: |
                            The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "500" : 
                        description: |
                            This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
    
        /sections/{sectionIdentifier}:
            get:
                operationId: getSection
                summary: The REST read request message for the getSection() API call.
                tags: 
                    - SectionsManager
                description: |
                    This request returns the parameters which were used by the CAT engine to create the adaptive section, and the list of the items in the adaptive section's item pool, as configured by the CAT engine. It is recommended that assessment platforms and/or delivery engines use this request to verify that the item pool, as configured by the CAT engine, corresponds exactly to the list of items in the QTI source for the adaptive section. It is also recommended that test administrators verify that each item in the item pool is accessible and deliverable before commencing delivery of candidate sessions. The Get Section request may be used for this, and may be made at any time after a successful Create Section request, as many times as required.
                parameters: 
                    - name: sectionIdentifier
                      in: path
                      description: |
                          The LUID that identifies the Section for which the data on the CAT Engine is to be obtained.
                      required: true
                      schema: 
                          type: string
                      style: simple
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/cat/v1p0/scope/api
                        - https://purl.imsglobal.org/cat/v1p0/scope/configure
                responses: 
                    "200" : 
                        description: |
                            The response code for when the list of Items in the section's item pool has been returned. The response message contains the list of Items, the section configuration used to create the section, and any qtiUsagedata and qtiMetadata used to create the section.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/GetSectionResponseBodyDType"
                    "400" : 
                        description: |
                            The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "500" : 
                        description: |
                            This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
            delete:
                operationId: endSection
                summary: The REST delete request message for the endSection() API call.
                tags: 
                    - SectionsManager
                description: |
                    This request ends all candidate sessions for the section which have not already ended, and ends the section. The sectionIdentifier, sessionIdentifiers, and sessionStates returned from previous requests related to the section become invalid. The delivery engine should not make any further requests related to the section or any session for the section. For a REST-based binding this request uses the DELETE HTTP method because of REST conventions, but the CAT engine is not required to physically delete any session or section data. This request should not be repeated once it has succeeded. 
                parameters: 
                    - name: sectionIdentifier
                      in: path
                      description: |
                          The LUID that identifies the Section to be deleted on the CAT Engine.
                      required: true
                      schema: 
                          type: string
                      style: simple
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/cat/v1p0/scope/api
                        - https://purl.imsglobal.org/cat/v1p0/scope/configure
                responses: 
                    "204" : 
                        description: |
                            The response code for when the identified Section has been deleted in the CAT Engine. There is no response payload.
                    "400" : 
                        description: |
                            The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "500" : 
                        description: |
                            This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
    
        /sections/{sectionIdentifier}/sessions:
            post:
                operationId: createSession
                summary: The REST createbp request message for the createSession() API call.
                tags: 
                    - SessionsManager
                description: |
                    This request initializes a candidate session for the adaptive section. The request optionally provides the CAT engine with information related to the candidate. The CAT engine returns the initial stage (list of items) to be presented to the candidate. This request may be made multiple times after a successful Create Section request, once per candidate, when each candidate enters the adaptive section on the test. This request is NOT idempotent.
                parameters: 
                    - name: sectionIdentifier
                      in: path
                      description: |
                          The LUID that identifies the Section in the CAT Engine to which this new Session is to be assigned.
                      required: true
                      schema: 
                          type: string
                      style: simple
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/cat/v1p0/scope/api
                        - https://purl.imsglobal.org/cat/v1p0/scope/deliver
                requestBody:
                    description: |
                        The Session configuration data including the information about the examinee.
                    content: 
                        application/json: 
                            schema: 
                                $ref: "#/components/schemas/SessionDType"
                    required: true
                responses: 
                    "201" : 
                        description: |
                            The response code for when the new Session has been created in the CAT Engine and the associated identifier has been returned. The response message consists of the identifier allocated to the session, the initial set of Items to be presented and the session state to be used for later requests.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/CreateSessionResponseBodyDType"
                    "400" : 
                        description: |
                            The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "500" : 
                        description: |
                            This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
    
        /sections/{sectionIdentifier}/sessions/{sessionIdentifier}:
            delete:
                operationId: endSession
                summary: The REST delete request message for the endSession() API call.
                tags: 
                    - SessionsManager
                description: |
                    This request ends the candidate session. The sessionIdentifier, and the sessionState returned from any previous request in the session, become invalid. The delivery engine should not make any further requests related to the session. For a REST-based binding this request uses the DELETE HTTP method because of REST conventions; but it is not required that CAT engines physically delete data or resources associated with the session. If the identified session cannot be found then the 'unknownobject' status code must be reported.
                parameters: 
                    - name: sectionIdentifier
                      in: path
                      description: |
                          The LUID that identifies the Section to be deleted on the CAT Engine.
                      required: true
                      schema: 
                          type: string
                      style: simple
                    - name: sessionIdentifier
                      in: path
                      description: |
                          The LUID that identifies the Session, in the context of the identified Section, to be deleted on the CAT Engine.
                      required: true
                      schema: 
                          type: string
                      style: simple
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/cat/v1p0/scope/api
                        - https://purl.imsglobal.org/cat/v1p0/scope/deliver
                responses: 
                    "204" : 
                        description: |
                            The response code for when the identified Session has been deleted in the CAT Engine. There is no response payload.
                    "400" : 
                        description: |
                            The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "500" : 
                        description: |
                            This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
    
        /sections/{sectionIdentifier}/sessions/{sessionIdentifier}/results:
            post:
                operationId: submitResults
                summary: The REST update request message for the submitResults() API call.
                tags: 
                    - SessionsManager
                description: |
                    This request sends the results from the current item stage in a candidate session to the CAT engine. The CAT engine returns its computed outcome variable values for the current stage and the test as a whole. It also returns the next item stage to be presented to the candidate. Instead of the next item stage, it may also return an indication that the adaptive section has ended, by returning an empty list for nextItems. If the identified Section/Session cannot be found then the 'unknownobject' status code must be reported.
                parameters: 
                    - name: sectionIdentifier
                      in: path
                      description: |
                          The LUID that identifies the Section in the CAT Engine to be used.
                      required: true
                      schema: 
                          type: string
                      style: simple
                    - name: sessionIdentifier
                      in: path
                      description: |
                          The LUID that identifies the Session, in the context of the Section, in the CAT Engine to be used.
                      required: true
                      schema: 
                          type: string
                      style: simple
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/cat/v1p0/scope/api
                        - https://purl.imsglobal.org/cat/v1p0/scope/deliver
                requestBody:
                    description: |
                        The set of results that have been obtained, so far, by the examinee for the identified session.
                    content: 
                        application/json: 
                            schema: 
                                $ref: "#/components/schemas/ResultsDType"
                    required: true
                responses: 
                    "201" : 
                        description: |
                            The response code for when the next set of Items to be presented to the examinee has been returned. The response message contains the next set of Items, the session state to be used in later requests and, optionally, the assessment results.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/SubmitResultsResponseBodyDType"
                    "400" : 
                        description: |
                            The request has been declared as 'bad'.  This will be due to the provision of bad data in the request payloads, including  a poorly formed JSON payload. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            The request was not correctly authorized i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            The supplied identifier is unknown in the CAT Engine and so the object could not be processed. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. The statement 'Unknown Object' of should also be presented.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "500" : 
                        description: |
                            This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
    
    
    #####################################################################################
    #                               Components                                          #
    #####################################################################################
    components:
        securitySchemes:
            OAuth2CCG:
                type: oauth2
                description: |
                    A CAT engine implementation may adopt any scope structure and naming scheme which meets its requirements, including not using scopes at all. The scopes shown here are recommended, not required.
                flows:
                    clientCredentials:
                        tokenUrl: https://www.service-dependent.com/oauth2Token
                        scopes: 
                            https://purl.imsglobal.org/cat/v1p0/scope/api: This enables access to all of the endpoints.
                            https://purl.imsglobal.org/cat/v1p0/scope/configure: This enables access to the endoints that permit the management of Sections.
                            https://purl.imsglobal.org/cat/v1p0/scope/deliver: This enables access to the endoints that permit the management of Sessions.
        schemas: 
            CreateSessionResponseBodyDType:
                description: |
                    The response code for when the new Session has been created in the CAT Engine and the associated identifier has been returned. The response message consists of the identifier allocated to the session, the initial set of Items to be presented and the session state to be used for later requests.
                type: object
                properties: 
                    sessionIdentifier:
                        description: Model Primitive Datatype = NCName.
                        type: string
                    nextItems:
                        $ref: "#/components/schemas/NextItemSetDType"
                    sessionState:
                        description: Model Primitive Datatype = NormalizedString.
                        type: string
                additionalProperties: false
            GetSectionResponseBodyDType:
                description: |
                    The response code for when the list of Items in the section's item pool has been returned. The response message contains the list of Items, the section configuration used to create the section, and any qtiUsagedata and qtiMetadata used to create the section.
                type: object
                properties: 
                    items:
                        $ref: "#/components/schemas/ItemSetDType"
                    section:
                        $ref: "#/components/schemas/SectionDType"
                additionalProperties: false
            SubmitResultsResponseBodyDType:
                description: |
                    The response code for when the next set of Items to be presented to the examinee has been returned. The response message contains the next set of Items, the session state to be used in later requests and, optionally, the assessment results.
                type: object
                properties: 
                    nextItems:
                        $ref: "#/components/schemas/NextItemSetDType"
                    assessmentResult:
                        $ref: "#/components/schemas/AssessmentResultDType"
                    sessionState:
                        description: Model Primitive Datatype = NormalizedString.
                        type: string
                additionalProperties: false
            CreateSectionResponseBodyDType:
                description: |
                    The response code for when the new Section has been created in the CAT Engine and the associated identifier has been returned.
                type: object
                properties: 
                    sectionIdentifier:
                        description: Model Primitive Datatype = NCName.
                        type: string
                additionalProperties: false
            AssessmentResultDType:
                description: |
                    An Assessment Result is used to report the results of a candidate's interaction with a test and/or one or more items attempted. Information about the test is optional, in some systems it may be possible to interact with items that are not organized into a test at all. For example, items that are organized with learning resources and presented individually in a formative context.
                type: object
                properties: 
                    context: 
                        $ref: "#/components/schemas/ContextDType"
                    testResult: 
                        $ref: "#/components/schemas/TestResultDType"
                    itemResult: 
                        description: |
                            When a test result is given the following item results must relate only to items that were selected for presentation as part of the corresponding test session. Furthermore, all items selected for presentation should be reported with a corresponding itemResult.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/ItemResultDType"
                additionalProperties: false
            CandidateResponseDType:
                description: |
                    The response given by the candidate.
                type: object
                properties: 
                    value: 
                        description: |
                            The value(s) of the response variable. A NULL value, resulting from no response, is indicated by the absence of any value. The order of the values is significant only if the response was declared with ordered cardinality.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/ValueDType"
                additionalProperties: false
            ContextDType:
                description: |
                    This is the context for the 'assessmentResult'. It provides the corresponding set of identifiers.
                type: object
                properties: 
                    sourcedId: 
                        description: A unique identifier for the test candidate. Model Primitive Datatype = NCName.
                        type: string
                    sessionIdentifiers: 
                        description: |
                            The system that creates the result (for example, the test delivery system) should assign a session identifier that it can use to identify the session. Subsequent systems that process the result might assign their own identifier to the session which should be added to the context if the result is modified and exported for transport again.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/SessionIdentifierDType"
                additionalProperties: false
            CorrectResponseDType:
                description: |
                    The correct response may be output as part of the report if desired. Systems are not limited to reporting correct responses declared in responseDeclarations. For example, a correct response may be set by a templateRule or may simply have been suppressed from the declaration passed to the delivery engine e.g. for security.
                type: object
                properties: 
                    interpretation: 
                        description: A human readable interpretation of the correct value. Model Primitive Datatype = String.
                        type: string
                    value: 
                        description: |
                            The order of the values is signficant only when the response is of ordered cardinality.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/ValueDType"
                additionalProperties: false
            ItemResultDType:
                description: |
                    The result of an item session is reported with an itemResult. A report may contain multiple results for the same instance of an item representing multiple attempts, progression through an adaptive item or even more detailed tracking. In these cases, each item result must have a different datestamp.
                type: object
                required: 
                    - identifier
                    - datestamp
                    - sessionStatus
                properties: 
                    identifier: 
                        description: The identifier of the item for which this is a result. For item results that are reported as part of a test result this is the identifier used to refer to the item in the test (see assessmentItemRef). For item results that are reported on their own, this can be any suitable identifier for the item. Where possible, the value should match the identifier attribute on the associated assessmentItem. Model Primitive Datatype = NCName.
                        type: string
                    sequenceIndex: 
                        description: For item results that are reported as part of a test, this attribute must be used to indicate the position of the item within the specific instance of the test. The first item of the first part of the test is defined to have sequence index 1. Model Primitive Datatype = NonNegativeInteger.
                        type: integer
                        format: int32
                        minimum: 0
                    datestamp: 
                        description: The date stamp of when this result was recorded. Model Primitive Datatype = DateTime.
                        type: string
                        format: date-time
                    sessionStatus: 
                        description: |
                            The session status is used to interpret the values of the item variables. See the sessionStatus vocabulary.
                        type: string
                        enum: 
                           - final
                           - initial
                           - pendingResponseProcessing
                           - pendingSubmission
                    responseVariables: 
                        description: |
                            Indicates that a Response Variable is being reported. This is the value of one of the responses associated with an Item in the corresponding ASI instance.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/ResponseVariableDType"
                    templateVariables: 
                        description: |
                            Indicates that a Template Variable is being reported. This is the value of one of the template variables associated with an Item in the corresponding ASI instance.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/TemplateVariableDType"
                    outcomeVariables: 
                        description: |
                            Indicates that an Outcome Variable is being reported. This is the value of one of the outcomes associated with either an Item or Test and defined in the corresponding ASI instance.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/OutcomeVariableDType"
                    candidateComment: 
                        description: An optional comment supplied by the candidate (see the allowComment in the ASI documentation [QTI, 20a]). Model Primitive Datatype = String.
                        type: string
                additionalProperties: false
            ItemSetDType:
                description: |
                    A set of Item identfiers.
                type: object
                required: 
                    - itemIdentifiers
                properties: 
                    itemIdentifiers: 
                        description: |
                            The Identifiers for the set of Items. These should be the GUIDs that have been assigned to AssessmentItems when defined using IMS QTI. Model Primitive Datatype = NCName.
                        type: array
                        minItems: 1
                        items: 
                            type: string
                additionalProperties: false
            KeyValuePairDType:
                description: |
                    The container for the values assigned to the Key/Value pair.
                type: object
                required: 
                    - key
                    - value
                properties: 
                    glossaryURI: 
                        description: This is a URI to the definition of the data being supplied in this accompanying key/value pair. This definition should provide a human readable description of the data-type and value space for the value being identified by its key.  Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    key: 
                        description: The key for the value to be supplied. Model Primitive Datatype = String.
                        type: string
                    value: 
                        description: The value being supplied. Model Primitive Datatype = String.
                        type: string
                additionalProperties: false
            NextItemSetDType:
                description: |
                    The container for the information about the set of next Items that should be presented to the examinee.
                type: object
                required: 
                    - itemIdentifiers
                properties: 
                    itemIdentifiers: 
                        description: |
                            The Identifiers for the set of Items that should be presented next. These should be the GUIDs that have been assigned to AssessmentItems when defined using IMS QTI. Model Primitive Datatype = NCName.
                        type: array
                        minItems: 1
                        items: 
                            type: string
                    stageLength: 
                        description: The (minimum) number of items the CAT Engine can present before requesting next items Model Primitive Datatype = NonNegativeInteger.
                        type: integer
                        format: int32
                        minimum: 0
                additionalProperties: false
            OutcomeVariableDType:
                description: |
                    The Item result information related to an 'Outcome Variable'.
                type: object
                required: 
                    - identifier
                    - cardinality
                properties: 
                    identifier: 
                        description: The identifier of the Outcome Variable. Model Primitive Datatype = NCName.
                        type: string
                    cardinality: 
                        description: |
                            The cardinality of the Outcome Variable, taken from the corresponding declaration or definition.
                        type: string
                        enum: 
                           - multiple
                           - ordered
                           - record
                           - single
                    baseType: 
                        description: |
                            The base type of the Outcome Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.
                        type: string
                        enum: 
                           - boolean
                           - directedPair
                           - duration
                           - file
                           - float
                           - identifier
                           - integer
                           - pair
                           - point
                           - string
                           - uri
                    view: 
                        description: |
                            The views (if any) declared for the outcome must be copied to the report to enable systems that render the report to hide information not relevant in a specific situation. If no values are given, the outcome's value should be considered relevant in all views.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                            enum: 
                               - author
                               - candidate
                               - proctor
                               - scorer
                               - testConstructor
                               - tutor
                    interpretation: 
                        description: A human readable interpretation of the default value. Model Primitive Datatype = String.
                        type: string
                    longInterpretation: 
                        description: An optional link to an extended interpretation of the outcome variable's value. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    normalMaximum: 
                        description: The normalMaximum attribute optionally defines the maximum magnitude of numeric outcome variables, it must be a positive value. If given, the outcome's value can be divided by normalMaximum and then truncated (if necessary) to obtain a normalized score in the range [-1.0,1.0]. normalMaximum has no affect on responseProcessing or the values that the outcome variable itself can take. Model Primitive Datatype = Double.
                        type: number
                        format: double
                    normalMinimum: 
                        description: The normalMinimum attribute optionally defines the minimum value of numeric outcome variables, it may be negative. Model Primitive Datatype = Double.
                        type: number
                        format: double
                    masteryValue: 
                        description: The masteryValue attribute optionally defines a value for numeric outcome variables above which the aspect being measured is considered to have been mastered by the candidate. Model Primitive Datatype = Double.
                        type: number
                        format: double
                    value: 
                        description: |
                            The value(s) of the outcome variable. The order of the values is significant only if the outcome was declared with ordered cardinality.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/ValueDType"
                additionalProperties: false
            PCIContextDType:
                description: |
                    This is the container for the contextual information that can be supplied for a PCI used within an Item. The contained information is only relevant when there is an 'interactionType' of 'portableCustomInteraction'.
                type: object
                properties: 
                    customTypeIdentifier: 
                        description: This is used alongside an 'interactionType' value of 'portableCustomInteraction' to disambiguate which class of PCI is in use as PCIs can vary widely in terms of how they might need to be psychometrically analyzed. This field could potentially also be used to identify which type of a traditional customInteraction is in use by the item. Model Primitive Datatype = NormalizedString.
                        type: string
                    interactionKind: 
                        description: This is used to provide insight into the nature of the PCI e.g. this is a PCI which allows a user to add notes to a musical stave to author some music that might be given a description of 'authoring'. This information could be used by a psychometrician, etc. as an indication of a similar type of standard interaction. Model Primitive Datatype = NormalizedString.
                        type: string
                additionalProperties: false
            QTIMetadataDType:
                description: |
                    This contains the new category of metadata for the recording of QTI specific information.
                type: object
                properties: 
                    itemTemplate: 
                        description: True if the item is actually an item template, in other words, the item changes its appearance based on some random or external factor. An assessmentItem that contains a templateProcessing section. Model Primitive Datatype = Boolean.
                        type: boolean
                    timeDependent: 
                        description: Whether or not the item is time dependent. A time dependent item takes the length of time taken for an attempt into consideration when scoring. Model Primitive Datatype = Boolean.
                        type: boolean
                    composite: 
                        description: True if the item comprises more than one interaction, for example, an assessmentItem that contains more than one interaction. Model Primitive Datatype = Boolean.
                        type: boolean
                    interactionType: 
                        description: |
                            The interaction type(s) of the item. The vocabulary is comprised of the names, as defined in the information model, of the leaf classes derived from interaction.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                            enum: 
                               - associateInteraction
                               - choiceInteraction
                               - customInteraction
                               - drawingInteraction
                               - endAttemptInteraction
                               - extendedTextInteraction
                               - gapMatchInteraction
                               - graphicAssociateInteraction
                               - graphicGapMatchInteraction
                               - graphicOrderInteraction
                               - hotspotInteraction
                               - hottextInteraction
                               - inlineChoiceInteraction
                               - matchInteraction
                               - mediaInteraction
                               - orderInteraction
                               - portableCustomInteraction
                               - positionObjectInteraction
                               - selectPointInteraction
                               - sliderInteraction
                               - textEntryInteraction
                               - uploadInteraction
                    portableCustomInteractionContext: 
                        $ref: "#/components/schemas/PCIContextDType"
                    feedbackType: 
                        description: |
                            Describes the type of feedback, if any, available in the item. If feedback is available then it is described as being non-adaptive or adaptive depending on whether the item is itself adaptive. A non-adaptive item generates feedback based on the responses submitted as part of (the last) attempt only. An adaptive item generates feedback that takes into consideration the path taken through the item, in other words, feedback based on the accumulation of all attempts and not just the last.
                        type: string
                        enum: 
                           - adaptive
                           - nonadaptive
                           - none
                    solutionAvailable: 
                        description: Set to true if a model solution is available for the item. For example, an assessmentItem that provides correct responses for all declared response variables. Model Primitive Datatype = Boolean.
                        type: boolean
                    scoringMode: 
                        description: |
                            The scoringMode is used to denote that the way in which the scoring is achieved. If the Item includes the response processing then the mode is 'responseprocessing'. If human scoring is required the value is 'human' and if some form of machine processing is required then the value is 'externalmachine'.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                            enum: 
                               - human
                               - externalmachine
                               - responseprocessing
                    toolName: 
                        description: The name of the tool used to author the evaluation object. Model Primitive Datatype = String.
                        type: string
                    toolVersion: 
                        description: The version of the tool used to author the evaluation object. Model Primitive Datatype = String.
                        type: string
                    toolVendor: 
                        description: The company which produced the tool used to author the evaluation object. Model Primitive Datatype = String.
                        type: string
                additionalProperties: false
            ResponseVariableDType:
                description: |
                    The Item result information related to a 'Response Variable'.
                type: object
                required: 
                    - identifier
                    - cardinality
                    - candidateResponse
                properties: 
                    identifier: 
                        description: The identifier of the Response Variable. Model Primitive Datatype = NCName.
                        type: string
                    cardinality: 
                        description: |
                            The cardinality of the Response Variable, taken from the corresponding declaration or definition.
                        type: string
                        enum: 
                           - multiple
                           - ordered
                           - record
                           - single
                    baseType: 
                        description: |
                            The base type of the Response Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.
                        type: string
                        enum: 
                           - boolean
                           - directedPair
                           - duration
                           - file
                           - float
                           - identifier
                           - integer
                           - pair
                           - point
                           - string
                           - uri
                    choiceSequence: 
                        description: |
                            When a response variable is bound to an interaction that supports the shuffling of choices, the sequence of choices experienced by the candidate will vary between test instances. When shuffling is in effect, the sequence of choices should be reported as a sequence of choice identifiers using this attribute. Model Primitive Datatype = NCName.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                    correctResponse: 
                        $ref: "#/components/schemas/CorrectResponseDType"
                    candidateResponse: 
                        $ref: "#/components/schemas/CandidateResponseDType"
                additionalProperties: false
            ResultsDType:
                description: |
                    This is the container for the results that have been accrued by the examinee. These are passed to the CAT Engine to support the selection of the next set of Items.
                type: object
                required: 
                    - assessmentResult
                properties: 
                    assessmentResult: 
                        $ref: "#/components/schemas/AssessmentResultDType"
                    sessionState: 
                        description: The session state information. This is the data that was supplied by the CAT Engine when the session was created or the next set of Items was requested. Model Primitive Datatype = NormalizedString.
                        type: string
                additionalProperties: false
            SectionDType:
                description: |
                    The container for the definition of the Section that is to be created in the CAT Engine. A Section is aligned to a QTI AssessmentSection [QTI, 20a].
                type: object
                required: 
                    - sectionConfiguration
                properties: 
                    qtiMetadata: 
                        $ref: "#/components/schemas/QTIMetadataDType"
                    qtiUsagedata: 
                        description: This is the Base64 encoded XML conforming to IMS QTI 3.0 Usage Date data model [QTI, 20c]. Model Primitive Datatype = String.
                        type: string
                    sectionConfiguration: 
                        description: This is the Base64 encoded data containing section configuration, aligned with adaptive engine (black box). This format will be proprietary to each adaptive CAT Engine. Model Primitive Datatype = String.
                        type: string
                additionalProperties: false
            SessionDType:
                description: |
                    This is the container for the session configuration data that must be supplied to the CAT Engine when the session is to be created.
                type: object
                properties: 
                    personalNeedsAndPreferences: 
                        description: This is the Base64 encoded XML data for the Personal Needs and Preferences (PNP) for the examinee.  This data conforms to the XML as defined in the IMS Access for All Personal Needs and Preferences (AfAPNP) 3.0 XML Binding specification [AFAPNP, 20]. Model Primitive Datatype = NormalizedString.
                        type: string
                    demographics: 
                        description: The Base64 encoding of the JSON data for the Demographics information for the examinee. This data conforms to the JSON as defined in the IMS OneRoster 1.1 specification [OR, 17]. Model Primitive Datatype = NormalizedString.
                        type: string
                    priorData: 
                        description: |
                            This is proprietary data that is supplied to the CAT Engine as a key/value pairs.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/KeyValuePairDType"
                additionalProperties: false
            SessionIdentifierDType:
                description: |
                    The system that creates the result (for example, the test delivery system) should assign a session identifier that it can use to identify the session.
                type: object
                required: 
                    - sourceID
                    - identifier
                properties: 
                    sourceID: 
                        description: A unique identifier of the system which added this identifier to the result. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    identifier: 
                        description: The system that creates the report should add a session identifier. Subsequent systems that process the results might use their own identifier for the session and should add this too if the result is exported again for further transport. Model Primitive Datatype = NCName.
                        type: string
                additionalProperties: false
            TemplateVariableDType:
                description: |
                    The Item result information related to a 'Template Variable'.
                type: object
                required: 
                    - identifier
                    - cardinality
                properties: 
                    identifier: 
                        description: The identifier of the Template Variable. Model Primitive Datatype = NCName.
                        type: string
                    cardinality: 
                        description: |
                            The cardinality of the Template Variable, taken from the corresponding declaration or definition.
                        type: string
                        enum: 
                           - multiple
                           - ordered
                           - record
                           - single
                    baseType: 
                        description: |
                            The base type of the Template Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.
                        type: string
                        enum: 
                           - boolean
                           - directedPair
                           - duration
                           - file
                           - float
                           - identifier
                           - integer
                           - pair
                           - point
                           - string
                           - uri
                    value: 
                        description: |
                            The value(s) of the template variable. The order of the values is significant only if the template variable was declared with ordered cardinality.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/ValueDType"
                additionalProperties: false
            TestResultDType:
                description: |
                    The container for the Test result. When a test result is given the following item results must relate only to items that were selected for presentation as part of the corresponding test session. Furthermore, all items selected for presentation should be reported with a corresponding itemResult.
                type: object
                required: 
                    - identifier
                    - datestamp
                properties: 
                    identifier: 
                        description: The identifier of the test for which this is a result. Model Primitive Datatype = NCName.
                        type: string
                    datestamp: 
                        description: The date stamp of when this result was recorded. Model Primitive Datatype = DateTime.
                        type: string
                        format: date-time
                    responseVariables: 
                        description: |
                            Indicates that a Response Variable is being reported. This is the value of one of the responses associated with an Item in the corresponding ASI instance [QTI, 20a].
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/ResponseVariableDType"
                    templateVariables: 
                        description: |
                            Indicates that a Template Variable is being reported. This is the value of one of the template variables associated with an Item in the corresponding ASI instance [QTI, 20a].
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/TemplateVariableDType"
                    outcomeVariables: 
                        description: |
                            Indicates that an Outcome Variable is being reported. This is the value of one of the outcomes associated with either an Item or Test and defined in the corresponding ASI instance [QTI, 20a].
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/OutcomeVariableDType"
                additionalProperties: false
            ValueDType:
                description: |
                    A class that can represent a single value of any baseType in variable declarations and result reports. The base-type is defined by the baseType attribute of the declaration except in the case of variables with record cardinality.
                type: object
                required: 
                    - value
                properties: 
                    fieldIdentifier: 
                        description: This attribute is only used for specifying the field identifier for a value that forms part of a record. Model Primitive Datatype = NCName.
                        type: string
                    baseType: 
                        description: |
                            This attribute is only used for specifying the base-type of a value that forms part of a record.
                        type: string
                        enum: 
                           - boolean
                           - directedPair
                           - duration
                           - file
                           - float
                           - identifier
                           - integer
                           - pair
                           - point
                           - string
                           - uri
                    value: 
                        description: The value being supplied. Model Primitive Datatype = NormalizedString.
                        type: string
                additionalProperties: false
            imsx_CodeMinorDType:
                description: |
                    This is the container for the set of code minor status codes reported in the responses from the Service Provider.
                type: object
                required: 
                    - imsx_codeMinorField
                properties: 
                    imsx_codeMinorField: 
                        description: |
                            Each reported code minor status code.
                        type: array
                        minItems: 1
                        items: 
                            $ref: "#/components/schemas/imsx_CodeMinorFieldDType"
                additionalProperties: false
            imsx_CodeMinorFieldDType:
                description: |
                    This is the container for a single code minor status code.
                type: object
                required: 
                    - imsx_codeMinorFieldName
                    - imsx_codeMinorFieldValue
                properties: 
                    imsx_codeMinorFieldName: 
                        description: This should contain the identity of the system that has produced the code minor status code report. Model Primitive Datatype = NormalizedString.
                        type: string
                    imsx_codeMinorFieldValue: 
                        description: |
                            The code minor status code (this is a value from the corresponding enumerated vocabulary).
                        type: string
                        enum: 
                           - fullsuccess
                           - forbidden
                           - invaliddata
                           - unauthorisedrequest
                           - internal_server_error
                           - server_busy
                           - unknownobject
                additionalProperties: false
            imsx_StatusInfoDType:
                description: |
                    This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.
                type: object
                required: 
                    - imsx_codeMajor
                    - imsx_severity
                properties: 
                    imsx_codeMajor: 
                        description: |
                            The code major value (from the corresponding enumerated vocabulary).
                        type: string
                        enum: 
                           - success
                           - processing
                           - failure
                           - unsupported
                    imsx_severity: 
                        description: |
                            The severity value (from the corresponding enumerated vocabulary).
                        type: string
                        enum: 
                           - status
                           - warning
                           - error
                    imsx_description: 
                        description: A human readable description supplied by the entity creating the status code information. Model Primitive Datatype = String.
                        type: string
                    imsx_codeMinor: 
                        $ref: "#/components/schemas/imsx_CodeMinorDType"
                additionalProperties: false
            

    toc | top

    Appendix C JSON Schema Listings

    C1 JSON Schemas for Payload Validation

    This is the set of JSON Schema listing that are used to validate the set of JSON payloads used by this service.

    C1.1a JSON Schema for the "createSection" Operation Request Payload Validation.

    The JSON Schema listing is shown below (the JSON Schema is available at: https://purl.imsglobal.org/cat/v1p0/schema/jsd/catservicegroupv1p0-createsection-requestpayload-schemav1p0.json).

    MISSING JSON SCHEMA DESCRIPTION.

    C1.1b JSON Schema for the "createSection" Operation Response Payload Validation for HTTP Codes (201)

    The JSON Schema listing is shown below (the JSON Schema is available at: https://purl.imsglobal.org/cat/v1p0/schema/jsd/catservicegroupv1p0-createsection-201-responsepayload-schemav1p0.json).

    {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$id" : "createSection-201-responsepayload-schema.json",
        "title" : "Computer Adaptive Testing (CAT) Service Version 1.0 IMS Candidate Final JSON Schema Binding (createSection-201-responsepayload-schema)",
        "description" : "Author-Colin Smythe (IMS Global, UK);  Version-1.0;  Release Date-9th November, 2020. ",
        "type" : "object",
        "properties" : {
    
        },
        "additionalProperties" : false
    }
            

    C1.1c JSON Schema for the "createSection" Operation Response Payload Validation for HTTP Codes (400,401,500,default)

    The JSON Schema listing is shown below (the JSON Schema is available at: https://purl.imsglobal.org/cat/v1p0/schema/jsd/catservicegroupv1p0-createsection-400-401-500-default-responsepayload-schemav1p0.json).

    {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$id" : "createSection-400-401-500-default-responsepayload-schema.json",
        "title" : "Computer Adaptive Testing (CAT) Service Version 1.0 IMS Candidate Final JSON Schema Binding (createSection-400-401-500-default-responsepayload-schema)",
        "description" : "Author-Colin Smythe (IMS Global, UK);  Version-1.0;  Release Date-9th November, 2020. ",
        "type" : "object",
        "properties" : {
            "imsx_codeMajor" : {
                "description" : "The code major value (from the corresponding enumerated vocabulary).",
                "type" : "string",
                "enum" : [ "success","processing","failure","unsupported" ]
            },
            "imsx_severity" : {
                "description" : "The severity value (from the corresponding enumerated vocabulary).",
                "type" : "string",
                "enum" : [ "status","warning","error" ]
            },
            "imsx_description" : {
                "description" : "Model Primitive Datatype = String. A human readable description supplied by the entity creating the status code information.",
                "type" : "string"
            },
            "imsx_codeMinor" : {
                "description" : "The set of reported code minor status codes.",
                "$ref" : "#/definitions/imsx_CodeMinorDType"
            }
        },
        "required" : [ "imsx_codeMajor","imsx_severity" ],
        "additionalProperties" : false,
        "definitions" : {
            "imsx_CodeMinorDType" : {
                "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" : {
                        "description" : "Each reported code minor status code.",
                        "type" : "array",
                        "minItems" : 1,
                        "items" : {
                            "$ref" : "#/definitions/imsx_CodeMinorFieldDType"
                        }
                    }
                },
                "required" : [ "imsx_codeMinorField" ],
                "additionalProperties" : false
            },
            "imsx_CodeMinorFieldDType" : {
                "description" : "This is the container for a single code minor status code.",
                "type" : "object",
                "properties" : {
                    "imsx_codeMinorFieldName" : {
                        "description" : "Model Primitive Datatype = NormalizedString. This should contain the identity of the system that has produced the code minor status code report.",
                        "type" : "string"
                    },
                    "imsx_codeMinorFieldValue" : {
                        "description" : "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
                        "type" : "string",
                        "enum" : [ "fullsuccess","forbidden","invaliddata","unauthorisedrequest","internal_server_error","server_busy","unknownobject" ]
                    }
                },
                "required" : [ "imsx_codeMinorFieldName","imsx_codeMinorFieldValue" ],
                "additionalProperties" : false
            }
        }
    }
            

    C1.2a JSON Schema for the "createSession" Operation Request Payload Validation.

    The JSON Schema listing is shown below (the JSON Schema is available at: https://purl.imsglobal.org/cat/v1p0/schema/jsd/catservicegroupv1p0-createsession-requestpayload-schemav1p0.json).

    {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$id" : "createSession-requestpayload-schema.json",
        "title" : "Computer Adaptive Testing (CAT) Service Version 1.0 IMS Candidate Final JSON Schema Binding (createSession-requestpayload-schema)",
        "description" : "Author-Colin Smythe (IMS Global, UK);  Version-1.0;  Release Date-9th November, 2020. ",
        "type" : "object",
        "properties" : {
            "personalNeedsAndPreferences" : {
                "description" : "Model Primitive Datatype = NormalizedString. This is the Base64 encoded XML data for the Personal Needs and Preferences (PNP) for the examinee.  This data conforms to the XML as defined in the IMS Access for All Personal Needs and Preferences (AfAPNP) 3.0 XML Binding specification [AFAPNP, 20].",
                "type" : "string"
            },
            "demographics" : {
                "description" : "Model Primitive Datatype = NormalizedString. The Base64 encoding of the JSON data for the Demographics information for the examinee. This data conforms to the JSON as defined in the IMS OneRoster 1.1 specification [OR, 17].",
                "type" : "string"
            },
            "priorData" : {
                "description" : "This is proprietary data that is supplied to the CAT Engine as a key/value pairs.",
                "type" : "array",
                "minItems" : 0,
                "items" : {
                    "$ref" : "#/definitions/KeyValuePairDType"
                }
            }
        },
        "additionalProperties" : false,
        "definitions" : {
            "KeyValuePairDType" : {
                "description" : "The container for the values assigned to the Key/Value pair.",
                "type" : "object",
                "properties" : {
                    "glossaryURI" : {
                        "description" : "Model Primitive Datatype = AnyURI. This is a URI to the definition of the data being supplied in this accompanying key/value pair. This definition should provide a human readable description of the data-type and value space for the value being identified by its key. ",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "key" : {
                        "description" : "Model Primitive Datatype = String. The key for the value to be supplied.",
                        "type" : "string"
                    },
                    "value" : {
                        "description" : "Model Primitive Datatype = String. The value being supplied.",
                        "type" : "string"
                    }
                },
                "required" : [ "key","value" ],
                "additionalProperties" : false
            }
        }
    }
            

    C1.2b JSON Schema for the "createSession" Operation Response Payload Validation for HTTP Codes (201)

    The JSON Schema listing is shown below (the JSON Schema is available at: https://purl.imsglobal.org/cat/v1p0/schema/jsd/catservicegroupv1p0-createsession-201-responsepayload-schemav1p0.json).

    {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$id" : "createSession-201-responsepayload-schema.json",
        "title" : "Computer Adaptive Testing (CAT) Service Version 1.0 IMS Candidate Final JSON Schema Binding (createSession-201-responsepayload-schema)",
        "description" : "Author-Colin Smythe (IMS Global, UK);  Version-1.0;  Release Date-9th November, 2020. ",
        "type" : "object",
        "properties" : {
    
        },
        "additionalProperties" : false
    }
            

    C1.2c JSON Schema for the "createSession" Operation Response Payload Validation for HTTP Codes (400,401,404,500,default)

    The JSON Schema listing is shown below (the JSON Schema is available at: https://purl.imsglobal.org/cat/v1p0/schema/jsd/catservicegroupv1p0-createsession-400-401-404-500-default-responsepayload-schemav1p0.json).

    {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$id" : "createSession-400-401-404-500-default-responsepayload-schema.json",
        "title" : "Computer Adaptive Testing (CAT) Service Version 1.0 IMS Candidate Final JSON Schema Binding (createSession-400-401-404-500-default-responsepayload-schema)",
        "description" : "Author-Colin Smythe (IMS Global, UK);  Version-1.0;  Release Date-9th November, 2020. ",
        "type" : "object",
        "properties" : {
            "imsx_codeMajor" : {
                "description" : "The code major value (from the corresponding enumerated vocabulary).",
                "type" : "string",
                "enum" : [ "success","processing","failure","unsupported" ]
            },
            "imsx_severity" : {
                "description" : "The severity value (from the corresponding enumerated vocabulary).",
                "type" : "string",
                "enum" : [ "status","warning","error" ]
            },
            "imsx_description" : {
                "description" : "Model Primitive Datatype = String. A human readable description supplied by the entity creating the status code information.",
                "type" : "string"
            },
            "imsx_codeMinor" : {
                "description" : "The set of reported code minor status codes.",
                "$ref" : "#/definitions/imsx_CodeMinorDType"
            }
        },
        "required" : [ "imsx_codeMajor","imsx_severity" ],
        "additionalProperties" : false,
        "definitions" : {
            "imsx_CodeMinorDType" : {
                "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" : {
                        "description" : "Each reported code minor status code.",
                        "type" : "array",
                        "minItems" : 1,
                        "items" : {
                            "$ref" : "#/definitions/imsx_CodeMinorFieldDType"
                        }
                    }
                },
                "required" : [ "imsx_codeMinorField" ],
                "additionalProperties" : false
            },
            "imsx_CodeMinorFieldDType" : {
                "description" : "This is the container for a single code minor status code.",
                "type" : "object",
                "properties" : {
                    "imsx_codeMinorFieldName" : {
                        "description" : "Model Primitive Datatype = NormalizedString. This should contain the identity of the system that has produced the code minor status code report.",
                        "type" : "string"
                    },
                    "imsx_codeMinorFieldValue" : {
                        "description" : "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
                        "type" : "string",
                        "enum" : [ "fullsuccess","forbidden","invaliddata","unauthorisedrequest","internal_server_error","server_busy","unknownobject" ]
                    }
                },
                "required" : [ "imsx_codeMinorFieldName","imsx_codeMinorFieldValue" ],
                "additionalProperties" : false
            }
        }
    }
            

    C1.3a JSON Schema for the "endSection" Operation Request Payload Validation.

    No request payload is sent for this delete request and so there is no JSON Schema listing.

    C1.3b JSON Schema for the "endSection" Operation Response Payload Validation for HTTP Codes (204)

    No payload is returned for this HTTP code and so there is no JSON Schema listing.

    C1.3c JSON Schema for the "endSection" Operation Response Payload Validation for HTTP Codes (400,401,404,500,default)

    The JSON Schema listing is shown below (the JSON Schema is available at: https://purl.imsglobal.org/cat/v1p0/schema/jsd/catservicegroupv1p0-endsection-400-401-404-500-default-responsepayload-schemav1p0.json).

    {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$id" : "endSection-400-401-404-500-default-responsepayload-schema.json",
        "title" : "Computer Adaptive Testing (CAT) Service Version 1.0 IMS Candidate Final JSON Schema Binding (endSection-400-401-404-500-default-responsepayload-schema)",
        "description" : "Author-Colin Smythe (IMS Global, UK);  Version-1.0;  Release Date-9th November, 2020. ",
        "type" : "object",
        "properties" : {
            "imsx_codeMajor" : {
                "description" : "The code major value (from the corresponding enumerated vocabulary).",
                "type" : "string",
                "enum" : [ "success","processing","failure","unsupported" ]
            },
            "imsx_severity" : {
                "description" : "The severity value (from the corresponding enumerated vocabulary).",
                "type" : "string",
                "enum" : [ "status","warning","error" ]
            },
            "imsx_description" : {
                "description" : "Model Primitive Datatype = String. A human readable description supplied by the entity creating the status code information.",
                "type" : "string"
            },
            "imsx_codeMinor" : {
                "description" : "The set of reported code minor status codes.",
                "$ref" : "#/definitions/imsx_CodeMinorDType"
            }
        },
        "required" : [ "imsx_codeMajor","imsx_severity" ],
        "additionalProperties" : false,
        "definitions" : {
            "imsx_CodeMinorDType" : {
                "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" : {
                        "description" : "Each reported code minor status code.",
                        "type" : "array",
                        "minItems" : 1,
                        "items" : {
                            "$ref" : "#/definitions/imsx_CodeMinorFieldDType"
                        }
                    }
                },
                "required" : [ "imsx_codeMinorField" ],
                "additionalProperties" : false
            },
            "imsx_CodeMinorFieldDType" : {
                "description" : "This is the container for a single code minor status code.",
                "type" : "object",
                "properties" : {
                    "imsx_codeMinorFieldName" : {
                        "description" : "Model Primitive Datatype = NormalizedString. This should contain the identity of the system that has produced the code minor status code report.",
                        "type" : "string"
                    },
                    "imsx_codeMinorFieldValue" : {
                        "description" : "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
                        "type" : "string",
                        "enum" : [ "fullsuccess","forbidden","invaliddata","unauthorisedrequest","internal_server_error","server_busy","unknownobject" ]
                    }
                },
                "required" : [ "imsx_codeMinorFieldName","imsx_codeMinorFieldValue" ],
                "additionalProperties" : false
            }
        }
    }
            

    C1.4a JSON Schema for the "endSession" Operation Request Payload Validation.

    No request payload is sent for this delete request and so there is no JSON Schema listing.

    C1.4b JSON Schema for the "endSession" Operation Response Payload Validation for HTTP Codes (204)

    No payload is returned for this HTTP code and so there is no JSON Schema listing.

    C1.4c JSON Schema for the "endSession" Operation Response Payload Validation for HTTP Codes (400,401,404,500,default)

    The JSON Schema listing is shown below (the JSON Schema is available at: https://purl.imsglobal.org/cat/v1p0/schema/jsd/catservicegroupv1p0-endsession-400-401-404-500-default-responsepayload-schemav1p0.json).

    {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$id" : "endSession-400-401-404-500-default-responsepayload-schema.json",
        "title" : "Computer Adaptive Testing (CAT) Service Version 1.0 IMS Candidate Final JSON Schema Binding (endSession-400-401-404-500-default-responsepayload-schema)",
        "description" : "Author-Colin Smythe (IMS Global, UK);  Version-1.0;  Release Date-9th November, 2020. ",
        "type" : "object",
        "properties" : {
            "imsx_codeMajor" : {
                "description" : "The code major value (from the corresponding enumerated vocabulary).",
                "type" : "string",
                "enum" : [ "success","processing","failure","unsupported" ]
            },
            "imsx_severity" : {
                "description" : "The severity value (from the corresponding enumerated vocabulary).",
                "type" : "string",
                "enum" : [ "status","warning","error" ]
            },
            "imsx_description" : {
                "description" : "Model Primitive Datatype = String. A human readable description supplied by the entity creating the status code information.",
                "type" : "string"
            },
            "imsx_codeMinor" : {
                "description" : "The set of reported code minor status codes.",
                "$ref" : "#/definitions/imsx_CodeMinorDType"
            }
        },
        "required" : [ "imsx_codeMajor","imsx_severity" ],
        "additionalProperties" : false,
        "definitions" : {
            "imsx_CodeMinorDType" : {
                "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" : {
                        "description" : "Each reported code minor status code.",
                        "type" : "array",
                        "minItems" : 1,
                        "items" : {
                            "$ref" : "#/definitions/imsx_CodeMinorFieldDType"
                        }
                    }
                },
                "required" : [ "imsx_codeMinorField" ],
                "additionalProperties" : false
            },
            "imsx_CodeMinorFieldDType" : {
                "description" : "This is the container for a single code minor status code.",
                "type" : "object",
                "properties" : {
                    "imsx_codeMinorFieldName" : {
                        "description" : "Model Primitive Datatype = NormalizedString. This should contain the identity of the system that has produced the code minor status code report.",
                        "type" : "string"
                    },
                    "imsx_codeMinorFieldValue" : {
                        "description" : "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
                        "type" : "string",
                        "enum" : [ "fullsuccess","forbidden","invaliddata","unauthorisedrequest","internal_server_error","server_busy","unknownobject" ]
                    }
                },
                "required" : [ "imsx_codeMinorFieldName","imsx_codeMinorFieldValue" ],
                "additionalProperties" : false
            }
        }
    }
            

    C1.5a JSON Schema for the "getSection" Operation Request Payload Validation.

    No request payload is sent for this request, only a single path parameter is supplied, and so there is no JSON Schema listing.

    C1.5b JSON Schema for the "getSection" Operation Response Payload Validation for HTTP Codes (200)

    The JSON Schema listing is shown below (the JSON Schema is available at: https://purl.imsglobal.org/cat/v1p0/schema/jsd/catservicegroupv1p0-getsection-200-responsepayload-schemav1p0.json).

    {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$id" : "getSection-200-responsepayload-schema.json",
        "title" : "Computer Adaptive Testing (CAT) Service Version 1.0 IMS Candidate Final JSON Schema Binding (getSection-200-responsepayload-schema)",
        "description" : "Author-Colin Smythe (IMS Global, UK);  Version-1.0;  Release Date-9th November, 2020. ",
        "type" : "object",
        "properties" : {
    
        },
        "additionalProperties" : false
    }
            

    C1.5c JSON Schema for the "getSection" Operation Response Payload Validation for HTTP Codes (400,401,404,500,default)

    The JSON Schema listing is shown below (the JSON Schema is available at: https://purl.imsglobal.org/cat/v1p0/schema/jsd/catservicegroupv1p0-getsection-400-401-404-500-default-responsepayload-schemav1p0.json).

    {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$id" : "getSection-400-401-404-500-default-responsepayload-schema.json",
        "title" : "Computer Adaptive Testing (CAT) Service Version 1.0 IMS Candidate Final JSON Schema Binding (getSection-400-401-404-500-default-responsepayload-schema)",
        "description" : "Author-Colin Smythe (IMS Global, UK);  Version-1.0;  Release Date-9th November, 2020. ",
        "type" : "object",
        "properties" : {
            "imsx_codeMajor" : {
                "description" : "The code major value (from the corresponding enumerated vocabulary).",
                "type" : "string",
                "enum" : [ "success","processing","failure","unsupported" ]
            },
            "imsx_severity" : {
                "description" : "The severity value (from the corresponding enumerated vocabulary).",
                "type" : "string",
                "enum" : [ "status","warning","error" ]
            },
            "imsx_description" : {
                "description" : "Model Primitive Datatype = String. A human readable description supplied by the entity creating the status code information.",
                "type" : "string"
            },
            "imsx_codeMinor" : {
                "description" : "The set of reported code minor status codes.",
                "$ref" : "#/definitions/imsx_CodeMinorDType"
            }
        },
        "required" : [ "imsx_codeMajor","imsx_severity" ],
        "additionalProperties" : false,
        "definitions" : {
            "imsx_CodeMinorDType" : {
                "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" : {
                        "description" : "Each reported code minor status code.",
                        "type" : "array",
                        "minItems" : 1,
                        "items" : {
                            "$ref" : "#/definitions/imsx_CodeMinorFieldDType"
                        }
                    }
                },
                "required" : [ "imsx_codeMinorField" ],
                "additionalProperties" : false
            },
            "imsx_CodeMinorFieldDType" : {
                "description" : "This is the container for a single code minor status code.",
                "type" : "object",
                "properties" : {
                    "imsx_codeMinorFieldName" : {
                        "description" : "Model Primitive Datatype = NormalizedString. This should contain the identity of the system that has produced the code minor status code report.",
                        "type" : "string"
                    },
                    "imsx_codeMinorFieldValue" : {
                        "description" : "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
                        "type" : "string",
                        "enum" : [ "fullsuccess","forbidden","invaliddata","unauthorisedrequest","internal_server_error","server_busy","unknownobject" ]
                    }
                },
                "required" : [ "imsx_codeMinorFieldName","imsx_codeMinorFieldValue" ],
                "additionalProperties" : false
            }
        }
    }
            

    C1.6a JSON Schema for the "submitResults" Operation Request Payload Validation.

    The JSON Schema listing is shown below (the JSON Schema is available at: https://purl.imsglobal.org/cat/v1p0/schema/jsd/catservicegroupv1p0-submitresults-requestpayload-schemav1p0.json).

    {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$id" : "submitResults-requestpayload-schema.json",
        "title" : "Computer Adaptive Testing (CAT) Service Version 1.0 IMS Candidate Final JSON Schema Binding (submitResults-requestpayload-schema)",
        "description" : "Author-Colin Smythe (IMS Global, UK);  Version-1.0;  Release Date-9th November, 2020. ",
        "type" : "object",
        "properties" : {
            "assessmentResult" : {
                "description" : "The set of actual results achieved by the examinee (this is equivalent to the IMS QTI 2.2 Results Reporting data model [QTI, 20b]).",
                "$ref" : "#/definitions/AssessmentResultDType"
            },
            "sessionState" : {
                "description" : "Model Primitive Datatype = NormalizedString. The session state information. This is the data that was supplied by the CAT Engine when the session was created or the next set of Items was requested.",
                "type" : "string"
            }
        },
        "required" : [ "assessmentResult" ],
        "additionalProperties" : false,
        "definitions" : {
            "AssessmentResultDType" : {
                "description" : "An Assessment Result is used to report the results of a candidate's interaction with a test and/or one or more items attempted. Information about the test is optional, in some systems it may be possible to interact with items that are not organized into a test at all. For example, items that are organized with learning resources and presented individually in a formative context.",
                "type" : "object",
                "properties" : {
                    "context" : {
                        "description" : "Contains contextual information for the associated testResult and itemResults.",
                        "$ref" : "#/definitions/ContextDType"
                    },
                    "testResult" : {
                        "description" : "A summary report for a test is represented by an assessment result containing a testResult but no itemResults.",
                        "$ref" : "#/definitions/TestResultDType"
                    },
                    "itemResult" : {
                        "description" : "When a test result is given the following item results must relate only to items that were selected for presentation as part of the corresponding test session. Furthermore, all items selected for presentation should be reported with a corresponding itemResult.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ItemResultDType"
                        }
                    }
                },
                "additionalProperties" : false
            },
            "CandidateResponseDType" : {
                "description" : "The response given by the candidate.",
                "type" : "object",
                "properties" : {
                    "value" : {
                        "description" : "The value(s) of the response variable. A NULL value, resulting from no response, is indicated by the absence of any value. The order of the values is significant only if the response was declared with ordered cardinality.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ValueDType"
                        }
                    }
                },
                "additionalProperties" : false
            },
            "ContextDType" : {
                "description" : "This is the context for the 'assessmentResult'. It provides the corresponding set of identifiers.",
                "type" : "object",
                "properties" : {
                    "sourcedId" : {
                        "description" : "Model Primitive Datatype = NCName. A unique identifier for the test candidate.",
                        "type" : "string"
                    },
                    "sessionIdentifiers" : {
                        "description" : "The system that creates the result (for example, the test delivery system) should assign a session identifier that it can use to identify the session. Subsequent systems that process the result might assign their own identifier to the session which should be added to the context if the result is modified and exported for transport again.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/SessionIdentifierDType"
                        }
                    }
                },
                "additionalProperties" : false
            },
            "CorrectResponseDType" : {
                "description" : "The correct response may be output as part of the report if desired. Systems are not limited to reporting correct responses declared in responseDeclarations. For example, a correct response may be set by a templateRule or may simply have been suppressed from the declaration passed to the delivery engine e.g. for security.",
                "type" : "object",
                "properties" : {
                    "interpretation" : {
                        "description" : "Model Primitive Datatype = String. A human readable interpretation of the correct value.",
                        "type" : "string"
                    },
                    "value" : {
                        "description" : "The order of the values is signficant only when the response is of ordered cardinality.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ValueDType"
                        }
                    }
                },
                "additionalProperties" : false
            },
            "ItemResultDType" : {
                "description" : "The result of an item session is reported with an itemResult. A report may contain multiple results for the same instance of an item representing multiple attempts, progression through an adaptive item or even more detailed tracking. In these cases, each item result must have a different datestamp.",
                "type" : "object",
                "properties" : {
                    "identifier" : {
                        "description" : "Model Primitive Datatype = NCName. The identifier of the item for which this is a result. For item results that are reported as part of a test result this is the identifier used to refer to the item in the test (see assessmentItemRef). For item results that are reported on their own, this can be any suitable identifier for the item. Where possible, the value should match the identifier attribute on the associated assessmentItem.",
                        "type" : "string"
                    },
                    "sequenceIndex" : {
                        "description" : "Model Primitive Datatype = NonNegativeInteger. For item results that are reported as part of a test, this attribute must be used to indicate the position of the item within the specific instance of the test. The first item of the first part of the test is defined to have sequence index 1.",
                        "type" : "integer",
                        "format" : "int32",
                        "minimum" : 0
                    },
                    "datestamp" : {
                        "description" : "Model Primitive Datatype = DateTime. The date stamp of when this result was recorded.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "sessionStatus" : {
                        "description" : "The session status is used to interpret the values of the item variables. See the sessionStatus vocabulary.",
                        "type" : "string",
                        "enum" : [ "final","initial","pendingResponseProcessing","pendingSubmission" ]
                    },
                    "responseVariables" : {
                        "description" : "Indicates that a Response Variable is being reported. This is the value of one of the responses associated with an Item in the corresponding ASI instance.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ResponseVariableDType"
                        }
                    },
                    "templateVariables" : {
                        "description" : "Indicates that a Template Variable is being reported. This is the value of one of the template variables associated with an Item in the corresponding ASI instance.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/TemplateVariableDType"
                        }
                    },
                    "outcomeVariables" : {
                        "description" : "Indicates that an Outcome Variable is being reported. This is the value of one of the outcomes associated with either an Item or Test and defined in the corresponding ASI instance.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/OutcomeVariableDType"
                        }
                    },
                    "candidateComment" : {
                        "description" : "Model Primitive Datatype = String. An optional comment supplied by the candidate (see the allowComment in the ASI documentation [QTI, 20a]).",
                        "type" : "string"
                    }
                },
                "required" : [ "identifier","datestamp","sessionStatus" ],
                "additionalProperties" : false
            },
            "OutcomeVariableDType" : {
                "description" : "The Item result information related to an 'Outcome Variable'.",
                "type" : "object",
                "properties" : {
                    "identifier" : {
                        "description" : "Model Primitive Datatype = NCName. The identifier of the Outcome Variable.",
                        "type" : "string"
                    },
                    "cardinality" : {
                        "description" : "The cardinality of the Outcome Variable, taken from the corresponding declaration or definition.",
                        "type" : "string",
                        "enum" : [ "multiple","ordered","record","single" ]
                    },
                    "baseType" : {
                        "description" : "The base type of the Outcome Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.",
                        "type" : "string",
                        "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                    },
                    "view" : {
                        "description" : "The views (if any) declared for the outcome must be copied to the report to enable systems that render the report to hide information not relevant in a specific situation. If no values are given, the outcome's value should be considered relevant in all views.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string",
                            "enum" : [ "author","candidate","proctor","scorer","testConstructor","tutor" ]
                        }
                    },
                    "interpretation" : {
                        "description" : "Model Primitive Datatype = String. A human readable interpretation of the default value.",
                        "type" : "string"
                    },
                    "longInterpretation" : {
                        "description" : "Model Primitive Datatype = AnyURI. An optional link to an extended interpretation of the outcome variable's value.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "normalMaximum" : {
                        "description" : "Model Primitive Datatype = Double. The normalMaximum attribute optionally defines the maximum magnitude of numeric outcome variables, it must be a positive value. If given, the outcome's value can be divided by normalMaximum and then truncated (if necessary) to obtain a normalized score in the range [-1.0,1.0]. normalMaximum has no affect on responseProcessing or the values that the outcome variable itself can take.",
                        "type" : "number",
                        "format" : "double"
                    },
                    "normalMinimum" : {
                        "description" : "Model Primitive Datatype = Double. The normalMinimum attribute optionally defines the minimum value of numeric outcome variables, it may be negative.",
                        "type" : "number",
                        "format" : "double"
                    },
                    "masteryValue" : {
                        "description" : "Model Primitive Datatype = Double. The masteryValue attribute optionally defines a value for numeric outcome variables above which the aspect being measured is considered to have been mastered by the candidate.",
                        "type" : "number",
                        "format" : "double"
                    },
                    "value" : {
                        "description" : "The value(s) of the outcome variable. The order of the values is significant only if the outcome was declared with ordered cardinality.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ValueDType"
                        }
                    }
                },
                "required" : [ "identifier","cardinality" ],
                "additionalProperties" : false
            },
            "ResponseVariableDType" : {
                "description" : "The Item result information related to a 'Response Variable'.",
                "type" : "object",
                "properties" : {
                    "identifier" : {
                        "description" : "Model Primitive Datatype = NCName. The identifier of the Response Variable.",
                        "type" : "string"
                    },
                    "cardinality" : {
                        "description" : "The cardinality of the Response Variable, taken from the corresponding declaration or definition.",
                        "type" : "string",
                        "enum" : [ "multiple","ordered","record","single" ]
                    },
                    "baseType" : {
                        "description" : "The base type of the Response Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.",
                        "type" : "string",
                        "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                    },
                    "choiceSequence" : {
                        "description" : "Model Primitive Datatype = NCName. When a response variable is bound to an interaction that supports the shuffling of choices, the sequence of choices experienced by the candidate will vary between test instances. When shuffling is in effect, the sequence of choices should be reported as a sequence of choice identifiers using this attribute.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string"
                        }
                    },
                    "correctResponse" : {
                        "description" : "The correct response may be output as part of the report if desired. Systems are not limited to reporting correct responses declared in responseDeclarations. For example, a correct response may be set by a templateRule or may simply have been suppressed from the declaration passed to the delivery engine e.g. for security.",
                        "$ref" : "#/definitions/CorrectResponseDType"
                    },
                    "candidateResponse" : {
                        "description" : "The response given by the candidate.",
                        "$ref" : "#/definitions/CandidateResponseDType"
                    }
                },
                "required" : [ "identifier","cardinality","candidateResponse" ],
                "additionalProperties" : false
            },
            "SessionIdentifierDType" : {
                "description" : "The system that creates the result (for example, the test delivery system) should assign a session identifier that it can use to identify the session.",
                "type" : "object",
                "properties" : {
                    "sourceID" : {
                        "description" : "Model Primitive Datatype = AnyURI. A unique identifier of the system which added this identifier to the result.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "identifier" : {
                        "description" : "Model Primitive Datatype = NCName. The system that creates the report should add a session identifier. Subsequent systems that process the results might use their own identifier for the session and should add this too if the result is exported again for further transport.",
                        "type" : "string"
                    }
                },
                "required" : [ "sourceID","identifier" ],
                "additionalProperties" : false
            },
            "TemplateVariableDType" : {
                "description" : "The Item result information related to a 'Template Variable'.",
                "type" : "object",
                "properties" : {
                    "identifier" : {
                        "description" : "Model Primitive Datatype = NCName. The identifier of the Template Variable.",
                        "type" : "string"
                    },
                    "cardinality" : {
                        "description" : "The cardinality of the Template Variable, taken from the corresponding declaration or definition.",
                        "type" : "string",
                        "enum" : [ "multiple","ordered","record","single" ]
                    },
                    "baseType" : {
                        "description" : "The base type of the Template Variable, taken from the corresponding declaration of definition. This value is omitted only for variables with record cardinality.",
                        "type" : "string",
                        "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                    },
                    "value" : {
                        "description" : "The value(s) of the template variable. The order of the values is significant only if the template variable was declared with ordered cardinality.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ValueDType"
                        }
                    }
                },
                "required" : [ "identifier","cardinality" ],
                "additionalProperties" : false
            },
            "TestResultDType" : {
                "description" : "The container for the Test result. When a test result is given the following item results must relate only to items that were selected for presentation as part of the corresponding test session. Furthermore, all items selected for presentation should be reported with a corresponding itemResult.",
                "type" : "object",
                "properties" : {
                    "identifier" : {
                        "description" : "Model Primitive Datatype = NCName. The identifier of the test for which this is a result.",
                        "type" : "string"
                    },
                    "datestamp" : {
                        "description" : "Model Primitive Datatype = DateTime. The date stamp of when this result was recorded.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "responseVariables" : {
                        "description" : "Indicates that a Response Variable is being reported. This is the value of one of the responses associated with an Item in the corresponding ASI instance [QTI, 20a].",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ResponseVariableDType"
                        }
                    },
                    "templateVariables" : {
                        "description" : "Indicates that a Template Variable is being reported. This is the value of one of the template variables associated with an Item in the corresponding ASI instance [QTI, 20a].",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/TemplateVariableDType"
                        }
                    },
                    "outcomeVariables" : {
                        "description" : "Indicates that an Outcome Variable is being reported. This is the value of one of the outcomes associated with either an Item or Test and defined in the corresponding ASI instance [QTI, 20a].",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/OutcomeVariableDType"
                        }
                    }
                },
                "required" : [ "identifier","datestamp" ],
                "additionalProperties" : false
            },
            "ValueDType" : {
                "description" : "A class that can represent a single value of any baseType in variable declarations and result reports. The base-type is defined by the baseType attribute of the declaration except in the case of variables with record cardinality.",
                "type" : "object",
                "properties" : {
                    "fieldIdentifier" : {
                        "description" : "Model Primitive Datatype = NCName. This attribute is only used for specifying the field identifier for a value that forms part of a record.",
                        "type" : "string"
                    },
                    "baseType" : {
                        "description" : "This attribute is only used for specifying the base-type of a value that forms part of a record.",
                        "type" : "string",
                        "enum" : [ "boolean","directedPair","duration","file","float","identifier","integer","pair","point","string","uri" ]
                    },
                    "value" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The value being supplied.",
                        "type" : "string"
                    }
                },
                "required" : [ "value" ],
                "additionalProperties" : false
            }
        }
    }
            

    C1.6b JSON Schema for the "submitResults" Operation Response Payload Validation for HTTP Codes (201)

    The JSON Schema listing is shown below (the JSON Schema is available at: https://purl.imsglobal.org/cat/v1p0/schema/jsd/catservicegroupv1p0-submitresults-201-responsepayload-schemav1p0.json).

    {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$id" : "submitResults-201-responsepayload-schema.json",
        "title" : "Computer Adaptive Testing (CAT) Service Version 1.0 IMS Candidate Final JSON Schema Binding (submitResults-201-responsepayload-schema)",
        "description" : "Author-Colin Smythe (IMS Global, UK);  Version-1.0;  Release Date-9th November, 2020. ",
        "type" : "object",
        "properties" : {
    
        },
        "additionalProperties" : false
    }
            

    C1.6c JSON Schema for the "submitResults" Operation Response Payload Validation for HTTP Codes (400,401,404,500,default)

    The JSON Schema listing is shown below (the JSON Schema is available at: https://purl.imsglobal.org/cat/v1p0/schema/jsd/catservicegroupv1p0-submitresults-400-401-404-500-default-responsepayload-schemav1p0.json).

    {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "$id" : "submitResults-400-401-404-500-default-responsepayload-schema.json",
        "title" : "Computer Adaptive Testing (CAT) Service Version 1.0 IMS Candidate Final JSON Schema Binding (submitResults-400-401-404-500-default-responsepayload-schema)",
        "description" : "Author-Colin Smythe (IMS Global, UK);  Version-1.0;  Release Date-9th November, 2020. ",
        "type" : "object",
        "properties" : {
            "imsx_codeMajor" : {
                "description" : "The code major value (from the corresponding enumerated vocabulary).",
                "type" : "string",
                "enum" : [ "success","processing","failure","unsupported" ]
            },
            "imsx_severity" : {
                "description" : "The severity value (from the corresponding enumerated vocabulary).",
                "type" : "string",
                "enum" : [ "status","warning","error" ]
            },
            "imsx_description" : {
                "description" : "Model Primitive Datatype = String. A human readable description supplied by the entity creating the status code information.",
                "type" : "string"
            },
            "imsx_codeMinor" : {
                "description" : "The set of reported code minor status codes.",
                "$ref" : "#/definitions/imsx_CodeMinorDType"
            }
        },
        "required" : [ "imsx_codeMajor","imsx_severity" ],
        "additionalProperties" : false,
        "definitions" : {
            "imsx_CodeMinorDType" : {
                "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" : {
                        "description" : "Each reported code minor status code.",
                        "type" : "array",
                        "minItems" : 1,
                        "items" : {
                            "$ref" : "#/definitions/imsx_CodeMinorFieldDType"
                        }
                    }
                },
                "required" : [ "imsx_codeMinorField" ],
                "additionalProperties" : false
            },
            "imsx_CodeMinorFieldDType" : {
                "description" : "This is the container for a single code minor status code.",
                "type" : "object",
                "properties" : {
                    "imsx_codeMinorFieldName" : {
                        "description" : "Model Primitive Datatype = NormalizedString. This should contain the identity of the system that has produced the code minor status code report.",
                        "type" : "string"
                    },
                    "imsx_codeMinorFieldValue" : {
                        "description" : "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
                        "type" : "string",
                        "enum" : [ "fullsuccess","forbidden","invaliddata","unauthorisedrequest","internal_server_error","server_busy","unknownobject" ]
                    }
                },
                "required" : [ "imsx_codeMinorFieldName","imsx_codeMinorFieldValue" ],
                "additionalProperties" : false
            }
        }
    }
            

    toc | top

    About this Document

    Title: IMS Computer Adaptive Testing (CAT) Service REST/JSON Binding v1.0
    Editors: Colin Smythe, IMS Global (UK)
    Mark McKell, IMS Global (USA)

    Co-chairs: Jason Carlson, ACT (USA)
    Mark Molenaar, Independent Expert (The Netherlands)

    Version: 1.0
    Version Date: 2021-02-01
    Status: IMS Public Candidate Final
    Summary: The IMS Computer Adaptive Testing (CAT) Service defines how to implement adaptive testing using Question and Test Interoperability (QTI). This approach allows the use of protected algorithms (black box) with different sets of data such as psychometric data, constraints, stopping criteria, etc. This document contains the REST/JSON Binding definition for the CAT Service.

    Revision Information: First release of this specification.
    Purpose: For adoption and implementation by the CAT Task Force.
    Document Location: https://www.imsglobal.org/spec/cat/latest

    toc | top

    List of Contributors

    The following individuals contributed to the development of this document:

    Arjan Aarnink Cito (The Netherlands)
    Michelle Barrett Pacific Metrics (USA)
    Jason Carlson ACT (USA)
    Paul Grudnitski Pearson (USA)
    Mark Molenaar Independent Expert (The Netherlands)
    Wes Munsil ACT (USA)
    Padraig O'hiceadha Houghton Miflin Harcourt (Ireland)
    Ed Salvatierra ACT (USA)
    Amir Sehic Pacific Metrics (USA)
    Colin Smythe IMS Global (UK)
    Tjeerd Hans Terpstra Cito (The Netherlands)

    toc | top

    Revision History

    Version No. Release Date Comments
    Public Candidate Final 1.0 9th November, 2020 The Candidate Final document. This is a declaration that the specification is ready for adoption by Members of the Task Force. The aim is to obtain a certain number of implementations that pass conformance as preparation for Final Release.

    toc | top

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

    IMS Global makes no warranty or representation regarding the accuracy or completeness of the Specification.

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

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

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

    IMS Global would appreciate receiving your comments and suggestions.

    Please contact IMS Global through our website at http://www.imsglobal.org.

    Please refer to Document Name: IMS Computer Adaptive Testing (CAT) Service REST/JSON Binding v1.0

    Date: 2021-02-01

    toc | top