IMS Final Release

IMS Global Logo

IMS Comprehensive Learner Record Standard REST/JSON Binding Version 1.0

IMS Final Release
Version 1.0

Date Issued: January 14, 2021
Latest version: http://www.imsglobal.org/clr/

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 Comprehensive Learner Record Standard REST/JSON Binding v1.0

Revision: January 14, 2021

toc | top

Abstract

The IMS Comprehensive Learner Record Standard (CLR Standard) has been designed to create, transmit, and render an individual's set of achievements from one issuer, in a digital, machine-readable format. The standard allows for global adoption and supports shared tools within the IMS Global community.

The CLR Standard supports interoperability in that CLR Providers and Consumers can consistently send and receive records among conformant entities. The standard describes an information model, service definition, and implementation guide to allow institutions, suppliers, and others to 'extend' the traditional transcript with records and types of information that are typically not found in a traditional transcript, such as competency attainment and co-curricular activities, and to define and facilitate an institution's learner achievements record store for collection of CLRs.

The CLR Standard digitized information can be consumed by other schools, institutions, employers, and any other entities that are conformant as CLR consumers. In this machine readable format, CLR Standard data enables granular and expansive discoverability of learning achievements that was not previously possible.

toc | top

Table of Contents

Abstract

1. Introduction

1.1 Scope and Context

1.2 Conventions

1.3 Structure of this Document

1.4 Nomenclature

3. The REST Endpoints

3.1 Mapping of the Service Operations to the REST Endpoints

3.2 API Root URL and Versioning

3.3 Predefined Endpoint Query Parameters

3.3.1 "deleteClr" Endpoint Query Parameters

3.3.2 "getAssertion" Endpoint Query Parameters

3.3.3 "getClr" Endpoint Query Parameters

3.3.4 "getClrs" Endpoint Query Parameters

3.3.5 "getDiscoveryDocument" Endpoint Query Parameters

3.3.6 "getEndorsement" Endpoint Query Parameters

3.3.7 "getKey" Endpoint Query Parameters

3.3.8 "getRevocationList" Endpoint Query Parameters

3.3.9 "postClr" Endpoint Query Parameters

3.4 HTTP Code Handling

4. Security Framework

4.1 Overview

4.2 Architecture

4.3 OAuth 2.0 Client Credentials Grant Resource Access

4.3.1 CCG - Registration

4.3.2 CCG - Obtaining Tokens

4.3.3 CCG - Authenticating with Tokens

4.4 OAuth 2.0 Authorization Code Grant Resource Access

4.4.1 ACG - Registration

4.4.2 ACG - Obtaining Tokens

4.4.3 ACG - Authenticating with Tokens

5. JSON Payloads

5.1 Content-Type

5.2 JSON-LD Context

5.3 JSON Payloads

6. Service OpenAPI Description

6.1 General Information

6.2 Tags Information

6.3 Security Information

6.4 Paths Information

6.4.1 "/assertions/{sourcedId}" Path

6.4.2 "/clrs" Path

6.4.3 "/clrs/{sourcedId}" Path

6.4.4 "/discovery" Path

6.4.5 "/endorsements/{sourcedId}" Path

6.4.6 "/keys/{sourcedId}" Path

6.4.7 "/revocations/{sourcedId}" Path

6.5 Definitions Information

6.5.1 "AchievementDType" Definition

6.5.2 "AddressDType" Definition

6.5.3 "AlignmentDType" Definition

6.5.4 "ArtifactDType" Definition

6.5.5 "AssertionDType" Definition

6.5.6 "AssociationDType" Definition

6.5.7 "ClrDType" Definition

6.5.8 "ClrSetDType" Definition

6.5.9 "CriteriaDType" Definition

6.5.10 "CryptographicKeyDType" Definition

6.5.11 "DiscoveryDocumentDType" Definition

6.5.12 "EndorsementDType" Definition

6.5.13 "EndorsementClaimDType" Definition

6.5.14 "EndorsementProfileDType" Definition

6.5.15 "EvidenceDType" Definition

6.5.16 "GetAssertionPayloadDType" Definition

6.5.17 "GetClrPayloadDType" Definition

6.5.18 "GetCryptographicKeyPayloadDType" Definition

6.5.19 "GetEndorsementPayloadDType" Definition

6.5.20 "GetRevocationListPayloadDType" Definition

6.5.21 "IdentityDType" Definition

6.5.22 "PostClrPayloadDType" Definition

6.5.23 "ProfileDType" Definition

6.5.24 "ResultDType" Definition

6.5.25 "ResultDescriptionDType" Definition

6.5.26 "RubricCriterionLevelDType" Definition

6.5.27 "SystemIdentifierDType" Definition

6.5.28 "VerificationDType" Definition

6.5.29 "imsx_CodeMinorDType" Definition

6.5.30 "imsx_CodeMinorFieldDType" Definition

6.5.31 "imsx_StatusInfoDType" Definition

7. Extending and Profiling the Standard

7.1 Extending the Standard

7.1.1 Proprietary Operations

7.1.2 Proprietary Data Elements

7.2 Profiling the Standard

References

Appendix A REST/JSON Modelling 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 OpenAPI Descriptions Explanations

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

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

A2.2 OpenAPI Tags Table Explanation

A2.3 OpenAPI Security Table Explanation

A2.4 OpenAPI Paths Table Explanation

A2.5 OpenAPI Definitions Table Explanation

Appendix B OpenAPI Listings

B1 Comprehensive Learner Record Standard OpenAPI JSON Definition Listing

B1.1 OpenAPI 2.0 JSON Listing

B1.2 OpenAPI 3.0 JSON Listing

B2 Comprehensive Learner Record Standard OpenAPI YAML Definition Listing

B2.1 OpenAPI 2.0 YAML Listing

B2.2 OpenAPI 3.0 YAML Listing

About this Document

List of Contributors

Revision History

toc | top

List of Tables

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

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

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

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

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

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

Table 6.3.2 - The Set of OAuth 2.0 Authorization Code Grant Security Information Defined in the OpenAPI Description.

Table 6.4.1 - The Set of HTTP Verbs Permitted on the "/assertions/{sourcedId}" Path.

Table 6.4.2 - The Set of HTTP Verbs Permitted on the "/clrs" Path.

Table 6.4.3 - The Set of HTTP Verbs Permitted on the "/clrs/{sourcedId}" Path.

Table 6.4.4 - The Set of HTTP Verbs Permitted on the "/discovery" Path.

Table 6.4.5 - The Set of HTTP Verbs Permitted on the "/endorsements/{sourcedId}" Path.

Table 6.4.6 - The Set of HTTP Verbs Permitted on the "/keys/{sourcedId}" Path.

Table 6.4.7 - The Set of HTTP Verbs Permitted on the "/revocations/{sourcedId}" Path.

Table 6.5.1 - OpenAPI JSON Schema description for the "AchievementDType" Complex Type.

Table 6.5.2 - OpenAPI JSON Schema description for the "AddressDType" Complex Type.

Table 6.5.3 - OpenAPI JSON Schema description for the "AlignmentDType" Complex Type.

Table 6.5.4 - OpenAPI JSON Schema description for the "ArtifactDType" Complex Type.

Table 6.5.5 - OpenAPI JSON Schema description for the "AssertionDType" Complex Type.

Table 6.5.6 - OpenAPI JSON Schema description for the "AssociationDType" Complex Type.

Table 6.5.7 - OpenAPI JSON Schema description for the "ClrDType" Complex Type.

Table 6.5.8 - OpenAPI JSON Schema description for the "ClrSetDType" Complex Type.

Table 6.5.9 - OpenAPI JSON Schema description for the "CriteriaDType" Complex Type.

Table 6.5.10 - OpenAPI JSON Schema description for the "CryptographicKeyDType" Complex Type.

Table 6.5.11 - OpenAPI JSON Schema description for the "DiscoveryDocumentDType" Complex Type.

Table 6.5.12 - OpenAPI JSON Schema description for the "EndorsementDType" Complex Type.

Table 6.5.13 - OpenAPI JSON Schema description for the "EndorsementClaimDType" Complex Type.

Table 6.5.14 - OpenAPI JSON Schema description for the "EndorsementProfileDType" Complex Type.

Table 6.5.15 - OpenAPI JSON Schema description for the "EvidenceDType" Complex Type.

Table 6.5.16 - OpenAPI JSON Schema description for the "GetAssertionPayloadDType" Complex Type.

Table 6.5.17 - OpenAPI JSON Schema description for the "GetClrPayloadDType" Complex Type.

Table 6.5.18 - OpenAPI JSON Schema description for the "GetCryptographicKeyPayloadDType" Complex Type.

Table 6.5.19 - OpenAPI JSON Schema description for the "GetEndorsementPayloadDType" Complex Type.

Table 6.5.20 - OpenAPI JSON Schema description for the "GetRevocationListPayloadDType" Complex Type.

Table 6.5.21 - OpenAPI JSON Schema description for the "IdentityDType" Complex Type.

Table 6.5.22 - OpenAPI JSON Schema description for the "PostClrPayloadDType" Complex Type.

Table 6.5.23 - OpenAPI JSON Schema description for the "ProfileDType" Complex Type.

Table 6.5.24 - OpenAPI JSON Schema description for the "ResultDType" Complex Type.

Table 6.5.25 - OpenAPI JSON Schema description for the "ResultDescriptionDType" Complex Type.

Table 6.5.26 - OpenAPI JSON Schema description for the "RevocationListDType" Complex Type.

Table 6.5.27 - OpenAPI JSON Schema description for the "RubricCriterionLevelDType" Complex Type.

Table 6.5.28 - OpenAPI JSON Schema description for the "SystemIdentifierDType" Complex Type.

Table 6.5.29 - OpenAPI JSON Schema description for the "VerificationDType" Complex Type.

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

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

Table 6.5.32 - 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 A2.1a The key to the tabular description of the OpenAPI(2) general information

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

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

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

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

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

toc | top

1. Introduction

1.1. Scope and Context

This document is the IMS Comprehensive Learner Record Standard REST/JSON Binding Version 1.0 and as such it is used as the basis for the development of the following documents:

This information model defines the IMS Comprehensive Learner Record Standard Abstract Application Programming Interface (a-API). This service model is described using the Unified Modeling Language (UML) based upon the IMS Global Model Driven Specification approach and the associated modelling toolkit [I-BAT, 06]. This means that 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:

3. The REST Endpoints An explanation of the relationship between the logical service operations (as defined in the Comprehensive Learner Record Standard Information Model [CLR, 19d]) and how these are realised as the corresponding set of REST endpoints (including the set of query parameters that are permitted);
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. JSON Payloads Detailed descriptions of the JSON payloads used by the CLR Standard service endpoints.
6. Service OpenAPI Description A detailed explanation of the structure of the OpenAPI files that are produced as part of the standard documentation. The associated JSON and YAML files are supplied in Appendix B;
7. Extending and Profiling the Standard 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 A list of references used throughout this document.
Appendix A REST/JSON Modelling 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 specification.

1.4. Nomenclature

A-API Abstract API
API Application Programming Interface
CASE IMS Competencies and Standards Exchange specification
CBE Competency Based Education
CLR Comprehensive Learner Record
HE Higher Education
IETF Internet Engineering Task Force
IdentityHash A hash string preceded by a dollar sign ('$') and the algorithm used to generate the hash. The supported algorithms are MD5 and SHA-256, identified by the strings md5 and sha256 respectively. For example: sha256$28d50415252ab6c689a54413da15b083034b66e5 represents the result of calculating a SHA-256 hash on the string 'mayze'.
JSON Java Script Object Notation
JSON-LD A JSON-based serialization for Linked Data
REST Representation State TRansfer
RFC Request for Comments
UML Unified Modelling Language
URI Uniform Resource Identifier
URL Uniform Resource Locator
XML Exchange Markup Language
XSD XML Schema Definition

toc | top

3. The REST Endpoints

This Section is NORMATIVE.

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

Table 3.1 - The Set of REST Endpoint URL-leaf Values.
Service Call REST Endpoint HTTP Verb
deleteClr /clrs/{sourcedId} DELETE
getAssertion /assertions/{sourcedId} GET
getClr /clrs/{sourcedId} GET
getClrs /clrs GET
getDiscoveryDocument /discovery GET
getEndorsement /endorsements/{sourcedId} GET
getKey /keys/{sourcedId} GET
getRevocationList /revocations/{sourcedId} GET
postClr /clrs POST

3.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/clr/v1p0/".

3.3 Predefined Endpoint Query Parameters

The definition of the permitted set of query parameters are defined in the following Tables. The syntax and semantics for this Tables are described in Appendix A1.2.

3.3.1 "deleteClr" Endpoint Query Parameters

There are no pre-defined query parameters for this endpoint.

3.3.2 "getAssertion" Endpoint Query Parameters

There are no pre-defined query parameters for this endpoint.

3.3.3 "getClr" Endpoint Query Parameters

There are no pre-defined query parameters for this endpoint.

3.3.4 "getClrs" Endpoint Query Parameters

3.3.4.1 "limit" Query Parameter

The description of the "limit" query parameter is presented in Table 3.3.4.1

Table 3.3.4.1 - The definition of the "limit" query parameter for the "getClrs" operation.
Descriptor Definition
Parameter Name limit
Data Type PositiveInteger (Primitive-type)
Value Space See Appendix A1.2.
Default = "100".
Multiplicity [0..1]
Description The number of results to return.

3.3.4.2 "offset" Query Parameter

The description of the "offset" query parameter is presented in Table 3.3.4.2

Table 3.3.4.2 - The definition of the "offset" query parameter for the "getClrs" operation.
Descriptor Definition
Parameter Name offset
Data Type NonNegativeInteger (Primitive-type)
Value Space See Appendix A1.2.
Multiplicity [0..1]
Description The index of the first record to return. (zero indexed)

3.3.4.3 "since" Query Parameter

The description of the "since" query parameter is presented in Table 3.3.4.3

Table 3.3.4.3 - The definition of the "since" query parameter for the "getClrs" operation.
Descriptor Definition
Parameter Name since
Data Type DateTime (Primitive-type)
Value Space See Appendix A1.2.
Multiplicity [0..1]
Description Retrieve CLRs that were issued after the provided timestamp. Must be an ISO 8601 compatible timestamp with a time zone indicator.

3.3.5 "getDiscoveryDocument" Endpoint Query Parameters

There are no pre-defined query parameters for this endpoint.

3.3.6 "getEndorsement" Endpoint Query Parameters

There are no pre-defined query parameters for this endpoint.

3.3.7 "getKey" Endpoint Query Parameters

There are no pre-defined query parameters for this endpoint.

3.3.8 "getRevocationList" Endpoint Query Parameters

There are no pre-defined query parameters for this endpoint.

3.3.9 "postClr" Endpoint Query Parameters

There are no pre-defined query parameters for this endpoint.

3.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 3.4. The syntax and semantics for this tabular description are described in Appendix A1.3.

Table 3.4 - The List of HTTP Codes and Handling for each Endpoint.
REST Endpoint HTTP Verb HTTP Codes and Handling
/assertions/{sourcedId} GET
  • 200 - 'OK' - The resource is returned in the payload. The payload is defined by the structure GetAssertionPayloadDType.
  • 400 - 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload. The payload is defined by the structure imsx_StatusInfoDType.
  • 404 - 'Not Found' - The resource was not found. The payload is defined by the structure imsx_StatusInfoDType.
  • 406 - 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header. The payload is defined by the structure imsx_StatusInfoDType.
  • 421 - 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. The payload is defined by the structure imsx_StatusInfoDType.
/clrs GET
  • 200 - 'OK' - The resource is returned in the payload. The payload is defined by the structure ClrSetDType.
  • 400 - 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload. The payload is defined by the structure imsx_StatusInfoDType.
  • 401 - 'Unauthorized' - The request requires user authentication. The payload is defined by the structure imsx_StatusInfoDType.
  • 403 - 'Forbidden' - The server understood the request, but is refusing it or the access is not allowed. The payload is defined by the structure imsx_StatusInfoDType.
  • 404 - 'Not Found' - There are no resources behind the URI. The payload is defined by the structure imsx_StatusInfoDType.
  • 406 - 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header. The payload is defined by the structure imsx_StatusInfoDType.
  • 421 - 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. The payload is defined by the structure imsx_StatusInfoDType.
/clrs POST
  • 200 - 'OK' - The resource was successfully replaced. The payload is defined by the structure PostClrPayloadDType.
  • 201 - 'Created` - The resource was successfully created. The payload is defined by the structure PostClrPayloadDType.
  • 304 - 'Not Modified' - The client can use cached data. The payload is defined by the structure imsx_StatusInfoDType.
  • 400 - 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload. The payload is defined by the structure imsx_StatusInfoDType.
  • 401 - 'Unauthorized' - The request requires user authentication. The payload is defined by the structure imsx_StatusInfoDType.
  • 403 - 'Forbidden' - The server understood the request, but is refusing it or the access is not allowed. The payload is defined by the structure imsx_StatusInfoDType.
  • 404 - 'Not Found' - There is no resource behind the URI. The payload is defined by the structure imsx_StatusInfoDType.
  • 405 - 'Method Not Allowed' - The provider does not support this operation. The payload is defined by the structure imsx_StatusInfoDType.
  • 406 - 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header. The payload is defined by the structure imsx_StatusInfoDType.
  • 421 - 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. The payload is defined by the structure imsx_StatusInfoDType.
/clrs/{sourcedId} DELETE
  • 200 - 'OK' - The request succeeded and the resource was deleted. The payload is defined by the structure imsx_StatusInfoDType.
  • 202 - 'Accepted' - The request was accepted and the resource will be deleted. The payload is defined by the structure imsx_StatusInfoDType.
  • 204 - 'No Content' - The resource was successfully deleted. There is no payload in the response message.
  • 400 - 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload. The payload is defined by the structure imsx_StatusInfoDType.
  • 401 - 'Unauthorized' - The request requires an user authentication. The payload is defined by the structure imsx_StatusInfoDType.
  • 403 - 'Forbidden' - The server understood the request, but is refusing it or the access is not allowed. The payload is defined by the structure imsx_StatusInfoDType.
  • 404 - 'Not found' - There is no resource behind the URI. The payload is defined by the structure imsx_StatusInfoDType.
  • 405 - 'Method Not Allowed' - The provider does not support this operation. The payload is defined by the structure imsx_StatusInfoDType.
  • 406 - 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header. The payload is defined by the structure imsx_StatusInfoDType.
  • 421 - 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. The payload is defined by the structure imsx_StatusInfoDType.
/clrs/{sourcedId} GET
  • 200 - 'OK' - The resource is returned in the payload. The payload is defined by the structure GetClrPayloadDType.
  • 400 - 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload. The payload is defined by the structure imsx_StatusInfoDType.
  • 401 - 'Unauthorized' - The request requires user authentication. The payload is defined by the structure imsx_StatusInfoDType.
  • 403 - 'Forbidden' - The server understood the request, but is refusing it or the access is not allowed. The payload is defined by the structure imsx_StatusInfoDType.
  • 404 - 'Not Found' – There is no resource behind the URI. The payload is defined by the structure imsx_StatusInfoDType.
  • 406 - 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header. The payload is defined by the structure imsx_StatusInfoDType.
  • 410 - 'Gone' - Marks the entity as revoked. The response may include the entity body. The payload is defined by the structure imsx_StatusInfoDType.
  • 421 - 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. The payload is defined by the structure imsx_StatusInfoDType.
/discovery GET
  • 200 - 'OK' - The resource is returned in the payload. The payload is defined by the structure DiscoveryDocumentDType.
  • 404 - 'Not Found' - There is no resource behind the URI. The payload is defined by the structure imsx_StatusInfoDType.
  • 406 - 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header. The payload is defined by the structure imsx_StatusInfoDType.
  • 421 - 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. The payload is defined by the structure imsx_StatusInfoDType.
/endorsements/{sourcedId} GET
  • 200 - 'OK' - The resource is returned in the payload. The payload is defined by the structure GetEndorsementPayloadDType.
  • 400 - 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload. The payload is defined by the structure imsx_StatusInfoDType.
  • 404 - 'Not Found' - The resource was not found. The payload is defined by the structure imsx_StatusInfoDType.
  • 406 - 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header. The payload is defined by the structure imsx_StatusInfoDType.
  • 421 - 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. The payload is defined by the structure imsx_StatusInfoDType.
/keys/{sourcedId} GET
  • 200 - 'OK' - The resource is returned in the payload. The payload is defined by the structure GetCryptographicKeyPayloadDType.
  • 400 - 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload. The payload is defined by the structure imsx_StatusInfoDType.
  • 404 - 'Not Found' - The resource was not found. The payload is defined by the structure imsx_StatusInfoDType.
  • 406 - 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header. The payload is defined by the structure imsx_StatusInfoDType.
  • 421 - 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. The payload is defined by the structure imsx_StatusInfoDType.
/revocations/{sourcedId} GET
  • 200 - 'OK' - The resource is returned in the payload. The payload is defined by the structure GetRevocationListPayloadDType.
  • 400 - 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload. The payload is defined by the structure imsx_StatusInfoDType.
  • 404 - 'Not Found' - The resource was not found. The payload is defined by the structure imsx_StatusInfoDType.
  • 406 - 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header. The payload is defined by the structure imsx_StatusInfoDType.
  • 421 - 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. The payload is defined by the structure imsx_StatusInfoDType.

toc | top

4. Security Framework

This Section is NORMATIVE.

4.1. Overview

This standard has several REST endpoints. Some of those endpoints are secured and the others are not. This section describes how the secured endpoints are protected. The following REST endpoints are protected using the OAuth 2.0 Authorization Framework [RFC6749]:

REST Endpoint HTTP Verb Scope Required
clrs/{id} DELETE https://purl.imsglobal.org/spec/clr/v1p0/scope/delete
clrs GET https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly
clrs POST https://purl.imsglobal.org/spec/clr/v1p0/scope/replace

Endpoints that are secured must use the methods outlined in Section 4, "Securing Web Services" of the IMS Security Framework [SECURITY FRAMEWORK, 19a]. Consumers and Providers that have a pre-established trust relationship and shared ownership of the resources MUST use the OAuth 2.0 Client-Credentials Grant method. Consumers and Providers that give individual users access to their resources MUST use the OAuth 2.0 Authorization Code Grant method. A partial list of examples are shown in the table below:

Example Grant Method to Use
A university system within a state is collecting CLRs from every campus. The Providers are the campus learning information systems. The Consumer is the university system's CLR Hub. OAuth 2.0 Client Credentials Grant because the Consumer and Provider have a pre-established trust relationship and shared ownership of the protected resources.
A school district contracts out a specialty program to a third party. The district collects a CLR for each student from the third party at the end of each course. The Consumer is the school district and the Provider is the third party.
A university system maintains a CLR Hub students and alumni can use to retrieve their personal extended transcript. A student is using a third party application to assemble a personal portfolio. The student uses the portfolio application to get their extended transcript from the university system's CLR Hub. The Consumer is the portfolio application and the Provider is the CLR Hub. OAuth 2.0 Authorization Code Grant because the learner is accessing their own individual resources.
A learner has used a personal portfolio application to assemble a comprehensive record of their achievements. The learner uses the portfolio application to "submit" their CLR to a potential employer. The Consumer is the portfolio application and the Provider is the employer's career tracking system.

4.2. Architecture

Diagram showing the major components of the CLR security

Diagram of the major components of the CLR security framework

Secure IMS services use the OAuth 2.0 Authorization Framework [RFC6749] to protect resources such as comprehensive learner records. There are five key components to the CLR security architecture.

User
This is the individual that owns the protected resources (CLRs) that are on the Provider.
Web Browser
This is the web browser application that the User interacts with.
Consumer
This is the web application that interacts with the Provider on behalf of the User.
Authorization Server
This is a server that implements OAuth 2.0 endpoints on behalf of the Provider. In many systems, the Authorization Server and the Provider are combined.
Provider
This is the resource server that has the protected resources (CLRs).

The role of each component during Registration, Obtaining Tokens, and Authenticating with Tokens using the appropriate method are described below.

4.3. OAuth 2.0 Client Credentials Grant Resource Access

Consumers and Providers that have a pre-established trust relationship and shared ownership of the protected resources MUST use the OAuth 2.0 Client-Credentials Grant (CCG) method.

Consumers and Providers implementing this method of security MUST comply with Section 4.1, "Using OAuth 2.0 Client-Credentials Grant" of the IMS Security Framework [SECURITY FRAMEWORK, 19a].

4.3.1. CCG - Registration

To get started, the Consumer and Provider must share three pieces of information as shown below. The mechanism for sharing this information is not prescribed by this specification.

client_id
Also called the Key in the IMS Security Framework. This is the public identifier for the communication exchange.
client_secret
Also called a Secret in the IMS Security Framework. This is the shared secret for the communication exchange.
OAuth 2.0 Access Token Service Endpoint
The endpoint from which the approved, requesting Consumer can obtain an access token.

4.3.2. CCG - Obtaining Tokens

Sequence diagram for obtaining an access token using the CCG flow

Sequence diagram for obtaining an access token using the CCG flow

To obtain an access token, the Consumer posts a "client_credentials" grant token request to the OAuth 2.0 Access Token Service Endpoint established during Registration. Requests for an access token MUST use an HTTP POST over HTTPS and TLS 1.2 or 1.3 protocol. The Consumer MUST use its client_id and client_secret with the HTTP Basic Authentication method (as described in [RFC2617]) for this request and MUST NOT put its key, secret and list of scopes into the request body.

The set of query parameters used to request an access token are:

Parameter Required Description
grant_type REQUIRED The value MUST be set to "client_credentials"
scope REQUIRED The scope of the access request.

An example request message is shown below in which 3 scopes (https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly, https://purl.imsglobal.org/spec/clr/v1p0/scope/replace, and https://purl.imsglobal.org/spec/clr/v1p0/scope/delete) are requested:

POST /token?scope=https%3a%2f%2fpurl.imsglobal.org%2fspec%2fclr%2fv1p0%2fscope%2fdelete+https%3a%2f%2fpurl.imsglobal.org%2fspec%2fclr%2fv1p0%2fscope%2freadonly+https%3a%2f%2fpurl.imsglobal.org%2fspec%2fclr%2fv1p0%2fscope%2freplace HTTP/1.1
Authorization: Basic YWQyMmU5ZjYxNzlhNzljODo5Y2MxYzEzY2NmZTAxYWQ1
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
        

If the authorization service successfully grants this request (see Section 5.1 in [RFC6749] for the detailed description), it responds with an HTTP 200 OK response containing the access token and its expiry lifetime (IMS recommends a default expiry lifetime of 3600 seconds, one hour, for access tokens) and confirms the set of scopes supported by this access token:

HTTP/1.1 200 OK
Cache-Control: no-store, no-cache, max-age=0
Pragma: no-cache
Content-Type: application/json; charset=UTF-8

{
    "access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImRmMTExNWEyZDZiMWRkOWY4YWFiNzllZjUxZWNhOTE4IiwidHlwIjoiSldUIn0.eyJuYmYiOjE1NjU2MzYzNTgsImV4cCI6MTU2NTYzOTk1OCwiaXNzIjoiaHR0cHM6Ly9jbHJhdXRoLmF6dXJld2Vic2l0ZXMubmV0IiwiYXVkIjpbImh0dHBzOi8vY2xyYXV0aC5henVyZXdlYnNpdGVzLm5ldC9yZXNvdXJjZXMiLCJEZWxldGVDbHIiLCJHZXRDbHJzIiwiUmVwbGFjZUNsciJdLCJjbGllbnRfaWQiOiJhZDIyZTlmNjE3OWE3OWM4IiwiY2xpZW50X3BvbGljeV91cmkiOiJodHRwczovL2NscmNvbnN1bWVyLmF6dXJld2Vic2l0ZXMubmV0OjQ0My9wcml2YWN5IiwiY2xpZW50X3Rvc191cmkiOiJodHRwczovL2NscmNvbnN1bWVyLmF6dXJld2Vic2l0ZXMubmV0OjQ0My90ZXJtcyIsImNsaWVudF9yZXNwb25zZV90eXBlcyI6IiIsImNsaWVudF90b2tlbl9lbmRwb2ludF9hdXRoX21ldGhvZCI6ImNsaWVudF9zZWNyZXRfYmFzaWMiLCJzY29wZSI6WyJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2Nsci92MXAwL3Njb3BlL2RlbGV0ZSIsImh0dHBzOi8vcHVybC5pbXNnbG9iYWwub3JnL3NwZWMvY2xyL3YxcDAvc2NvcGUvcmVhZG9ubHkiLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2Nsci92MXAwL3Njb3BlL3JlcGxhY2UiXX0.hH6pyev1qqDm_ss69OAflROL8deF9z9jc902-m6PmDYylRqkIK_uO3Iv2Od6cwDRfZiqOEKotbyRks3S-Dv3jJsJLg0Kc52i8S-6Wbosjg05KMaXr7Ocg2o1_J6xquSdt-tCopwcMcOty--9ePGPYvkyDaKcTdUYeH0HX214R21K485x5ebiHr3JzKq6WAzvElhkwWQcGTGvopAKywZknwxZc9Z2Izjg1Xk96eFKuw1J9ReIzU9ZwuVsLYHXPlyq9ZjleHWl87y3BApwoYv3PxFT_PP87E9BhlFzYpR__NP5Uf_QSrk1mZxD2yFHmwmG4ad3kEoVISEndrwSc4iawQ",
    "expires_in": 3600,
    "token_type": "Bearer",
    "scope": "https://purl.imsglobal.org/spec/clr/v1p0/scope/delete https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly https://purl.imsglobal.org/spec/clr/v1p0/scope/replace"
}
        

The authorization server MAY decide not to issue an access token: this could be because the request scopes are invalid, the credentials from the client may be invalid, etc. In this case the authorization server MUST return an error message with an HTTP 400 Bad Request status code.

4.3.3. CCG - Authenticating with Tokens

Sequence diagram for authenticating with tokens when using CCG flow

Sequence diagram for authenticating with tokens when using CCG flow

The Consumer utilizes the access token to authenticate with the Provider using the HTTP Authorization request header field [RFC2617] with a Bearer Token [RFC6750]. For example, a "getClrs" request would look like this:

GET /ims/clr/v1p0/clrs HTTP/1.1
Accept: application/ld+json, application/json
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImRmMTExNWEyZDZiMWRkOWY4YWFiNzllZjUxZWNhOTE4IiwidHlwIjoiSldUIn0.eyJuYmYiOjE1NjU2NDg3NzEsImV4cCI6MTU2NTY1MjM3MSwiaXNzIjoiaHR0cHM6Ly9jbHJhdXRoLmF6dXJld2Vic2l0ZXMubmV0IiwiYXVkIjpbImh0dHBzOi8vY2xyYXV0aC5henVyZXdlYnNpdGVzLm5ldC9yZXNvdXJjZXMiLCJEZWxldGVDbHIiLCJHZXRDbHJzIiwiUmVwbGFjZUNsciJdLCJjbGllbnRfaWQiOiJhZDIyZTlmNjE3OWE3OWM4IiwiY2xpZW50X3BvbGljeV91cmkiOiJodHRwczovL2NscmNvbnN1bWVyLmF6dXJld2Vic2l0ZXMubmV0OjQ0My9wcml2YWN5IiwiY2xpZW50X3Rvc191cmkiOiJodHRwczovL2NscmNvbnN1bWVyLmF6dXJld2Vic2l0ZXMubmV0OjQ0My90ZXJtcyIsImNsaWVudF9yZXNwb25zZV90eXBlcyI6IiIsImNsaWVudF90b2tlbl9lbmRwb2ludF9hdXRoX21ldGhvZCI6ImNsaWVudF9zZWNyZXRfYmFzaWMiLCJzY29wZSI6WyJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2Nsci92MXAwL3Njb3BlL2RlbGV0ZSIsImh0dHBzOi8vcHVybC5pbXNnbG9iYWwub3JnL3NwZWMvY2xyL3YxcDAvc2NvcGUvcmVhZG9ubHkiLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2Nsci92MXAwL3Njb3BlL3JlcGxhY2UiXX0.F9R10NxTDSluOIQwj0KP0Nb4Ix6Ye1rqOgLu2uot9IP-VDn4rDZsiLeIb6eiUJE2nU40pKgve6IKQAew7gqC9Tt3BfRjVo5QMI99xPoYxgHDLAZeRiJhD_2JYZQmda_KgoByHOPiXuuWM9wI9qw3YpUCeObn7DldxNcFH0NvQZwwSWJzVX-R1N_M7LxdlHB7fHPeggbUXos0G3FWdLF37a-v_5wEsv5zMf-Ts6gHGCU7p682SS1bkLXKT-HWO44IuaqWxzBIRGHA9wXLHCADP6_nWLJxmaZa5_E-FFHpiIvcV4g-CcWlz6KAxgNH-my6mm4IMfPKhUn6vgGCQsSalw
        

If the Provider accepts the request, it responds with the appropriate payload. For example the response to the request above may look like this (empty list of clrs for brevity):

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
    "type": "ClrSet",
    "clrs": []
}
        

4.4. OAuth 2.0 Authorization Code Grant Resource Access

Consumers and Providers that give individual users access to their own resources MUST use the OAuth 2.0 Authorization Code Grant (ACG) method

Consumers and Providers implementing this method of security MUST comply with Section 4.2, "Using OAuth 2.0 Authorization Code Grant" of the IMS Security Framework [SECURITY FRAMEWORK, 19a].

4.4.1. ACG - Registration

Sequence diagram for registration when using ACG flow

Sequence diagram for registration when using ACG flow

Consumers and Providers that implement the Authentication Code Grant (ACG) method of resource access MUST implement the dynamic Consumer registration process outlined here. There are two steps in this process:

  1. Request the Discovery Document from the Provider
  2. Register with the Authentication Server

The Consumer only needs to register a client_id with the Authentication Server once. Each User will use the same client_id when they request their own authorization code.

Request the Discovery Document

To start the registration process, the User supplies the Consumer with the Provider's domain authority. When presented with an unknown Provider the Consumer MUST request the Provider's CLR Discovery Document at the path /ims/clr/v1p0/discovery. The Discovery Document MUST be provided over HTTPS with TLS 1.2 or 1.3 protocol.

An example request for the Discovery Document looks like this:

GET https://provider.example.com/ims/clr/v1p0/discovery HTTP/1.1
Accept: application/json
        

And an example response from a Provider that supports all the secured endpoints and allows refresh tokens looks like this:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
    "name": "Example Provider",
    "image": "https://provider.example.com/logo.png",
    "scopesOffered": [
        "https://purl.imsglobal.org/spec/clr/v1p0/scope/delete",
        "https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly",
        "https://purl.imsglobal.org/spec/clr/v1p0/scope/replace",
        "offline_access"
    ],
    "registrationUrl": "https://auth.example.com/register",
    "authorizationUrl": "https://auth.example.com/authorize",
    "tokenUrl": "https://auth.example.com/token",
    "termsOfServiceUrl": "https://provider.example.com/terms",
    "privacyPolicyUrl": "https://provider.example.com/privacy"
}    
        

Upon receiving a Discovery Document from a Provider, the requester SHOULD respect the Cache-Control and Expires headers if present in the response and configure local cache to match the directives it declares. If directives include one of no-cache, no-store, the requester SHOULD NOT cache the data for future interactions. If directives include max-age or if an Expires header is present, the requester SHOULD cache the Discovery Document data, if valid, up to the expiration indicated, either at the time indicated by the Expires header or max-age seconds from request time.

An Etag header MAY be offered with the Discovery Document response. If so, after a resource's declared expiration, a requester MAY include an If-None-Match header containing the value of the Etag to check if the resource is still fresh. If so the server may return a 304 Not Modified response status code, and a new Expires or Cache-Control header MAY be included, which the requester SHOULD use to update the cache expiration.

Register with Authorization Server

With the OAuth 2.0 Registration URL in hand (from the registrationUrl property of the Discovery Document), the Consumer SHOULD post a registration request to the authorization server. The registration request MUST comply with OAuth 2.0 Dynamic Client Registration Protocol [RFC7591]. The request MUST be sent using HTTPS with TLS 1.2 or 1.3 protocol.

The properties of the JSON body MUST be implemented as described in the following table. All URLs MUST use HTTPS (e.g. https://example.com/logo.png) and all URLs MUST have the same hostname. All required properties MUST be present in the registration request in order for it to be accepted by the authorization server.

Name Required Description
client_name Yes The human-readable name of the Consumer.
client_uri Yes A page that which describes the Consumer.
logo_uri Yes The logo of the Consumer.
tos_uri Yes The Terms of Service of the Consumer.
policy_uri Yes The Privacy Policy of the Consumer.
software_id Yes A unique idenfitier assigned by the Consumer developer. As described in [RFC7591], it SHOULD remain the same for all instances of the Consumer software.
software_version Yes A version identifier string for the Consumer software. The value SHOULD change on any update to the Consumer software.
redirect_uris Yes Array of redirection URI strings for use in the OAuth 2.0 flow.
token_endpoint_auth_method No String indicator of the requested authentication method for the token endpoint. In this specification only "client_secret_basic" is allowed:
  • "client_secret_basic": The Consumer uses the HTTP Basic authentication method as defined in OAuth 2.0.
If omitted, the default is "client_secret_basic".
grant_types No Array of OAuth 2.0 grant type strings. In this specification only "authorization_code" and refresh_token" are allowed:
  • "authorization_code": The authorization code grant type defined in OAuth 2.0.
  • "refresh_token": The refresh token grant type defined in OAuth 2.0.
If omitted, the default behavior is that the client will use only the "authorization_code" grant type.
response_types No Array of OAuth 2.0 response type strings. In this specification only "code" is allowed:
  • "code": The authorization code response type defined in OAuth 2.0.
If omitted, the default is that the client will use only the "code" response type.
scope No In the registration request, this is a string containing a space-separated list of scope values that this Consumer may include when requesting access tokens. If omitted, the authorization server MAY register a Consumer with a default set of scopes. In the registration response, this is a list of scopes the authorization server supports.

The list of scopes that can be requested are shown in this table:

Scope Description
https://purl.imsglobal.org/spec/clr/v1p0/scope/delete Permission to delete CLRs for the User on the Provider platform.
https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly Permission to read CLRs for the User on the Provider platform.
https://purl.imsglobal.org/spec/clr/v1p0/scope/replace Permission to create or update CLRs for the User on the Provider platform.
offline_access Permission to issue a refresh_token along with the access_token.

An example registration request looks like this:

POST https://clrauth.azurewebsites.net/connect/register HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8

{
    "client_name": "Example Consumer",
    "client_uri": "https://consumer.example.com/",
    "logo_uri": "https://consumer.example.com/logo.png",
    "tos_uri": "https://consumer.example.com/terms",
    "policy_uri": "https://consumer.example.com/privacy",
    "software_id": "c88b6ed8-269e-448e-99be-7e2ff47167d1",
    "software_version": "v4.0.30319",
    "redirect_uris": [
        "https://consumer.example.com/Authorize"
    ],
    "token_endpoint_auth_method": "client_secret_basic",
    "grant_types": [
        "authorization_code",
        "refresh_token"
    ],
    "response_types": [
        "code"
    ],
    "scope": "https://purl.imsglobal.org/spec/clr/v1p0/scope/delete https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly https://purl.imsglobal.org/spec/clr/v1p0/scope/replace offline_access"
}
        

If the authorization server accepts the registration request, it will store the information provided in the request and respond HTTP 201 Created with a registration response that includes a set of client credentials for the Consumer to use when requesting access tokens. All the information provided by the Consumer MUST be returned to the Consumer, including modifications to the properties as the authorization server deems necessary. An example response looks like this:

HTTP/1.1 201 Created
Content-Type: application/json; charset=utf-8

{
    "client_id": "4ad36680810420ed",
    "client_secret": "af7aa0d679778e12",
    "client_id_issued_at": 1565715850,
    "client_secret_expires_at": 1597338250,
    "client_name": "Example Consumer",
    "client_uri": "https://consumer.example.com/",
    "logo_uri": "https://consumer.example.com/logo.png",
    "tos_uri": "https://consumer.example.com/terms",
    "policy_uri": "https://consumer.example.com/privacy",
    "software_id": "c88b6ed8-269e-448e-99be-7e2ff47167d1",
    "software_version": "v4.0.30319",
    "redirect_uris": [
        "https://consumer.example.com/Authorize"
    ],
    "token_endpoint_auth_method": "client_secret_basic",
    "grant_types": [
        "authorization_code",
        "refresh_token"
    ],
    "response_types": [
        "code"
    ],
    "scope": "https://purl.imsglobal.org/spec/clr/v1p0/scope/delete https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly https://purl.imsglobal.org/spec/clr/v1p0/scope/replace offline_access"
}    
        

The following table describes the properties present in the client registration response that were not included in the request. These are all REQUIRED properties.

Name Required Description
client_id Yes An OAuth 2.0 client identifier string. The value SHOULD NOT be currently valid for any other registered client.
client_secret Yes An OAuth 2.0 client secret string.
client_id_issued_at Yes The time at which the client_id was issued.
client_secret_expires_at Yes The time at which the client_secret will expire. MAY be 0 for no expiration.

4.4.2. ACG - Obtaining Tokens

Sequence diagram for obtaining access tokens when using the ACG flow

Sequence diagram for obtaining access tokens when using the ACG flow

After the Consumer is registered with the Authorization Server as described in Registration, the Consumer then MAY initiate an authorization request as described in Section 4.2 of the IMS Security Framework [SECURITY FRAMEWORK, 19a] by redirecting the user to the authorizationUrl as declared in the Provider's Discovery Document.

All required properties must be included in the authorization request:

Name Required Description
response_type Yes Value MUST be set to "code".
client_id Yes The Consumer identifier. MUST be the client_id provided in the Registration response.
redirect_uri Yes The Consumer's redirection endpoint. MUST match one of the redirect_uris in the Registration request. Although this is optional in the IMS Security Framework [SECURITY FRAMEWORK, 19a], it is REQUIRED by this specification.
scope Yes The scope of the authorization request. This is a space delimited list of scopes.
Scope Description
https://purl.imsglobal.org/spec/clr/v1p0/scope/delete Permission to delete CLRs for the User on the Provider platform.
https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly Permission to read CLRs for the User on the Provider platform.
https://purl.imsglobal.org/spec/clr/v1p0/scope/replace Permission to create or update CLRs for the User on the Provider platform.
offline_access Permission to issue a refresh_token along with the access_token.
state Yes An opaque value used by the Consumer to maintain state between the request and callback.
code_challenge Yes This is BASE64URL-ENCODE(SHA256(ASCII(code_verifier))).
code_challenge_method Yes This MUST have a value of "S256" to indicate the SHA256 code verifier transformation method is used.

The request MUST be made by redirecting the browser to the OAuth 2.0 Authorization endpoint. The request MUST use HTTPS with TLS 1.2 or 1.3 protocol. An example authorization request looks like this (line breaks are for display purposes only):

HTTP/1.1 302 Found
Location: https://auth.example.com/authorize?
    client_id=4ad36680810420ed
    &response_type=code
    &scope=https%3A%2F%2Fpurl.imsglobal.org%2Fspec%2Fclr%2Fv1p0%2Fscope%2Fdelete%20https%3A%2F%2Fpurl.imsglobal.org%2Fspec%2Fclr%2Fv1p0%2Fscope%2Freadonly%20https%3A%2F%2Fpurl.imsglobal.org%2Fspec%2Fclr%2Fv1p0%2Fscope%2Freplace%20offline_access
    &redirect_uri=https%3A%2F%2Fconsumer.example.com%2FAuthorize
    &state=26357667-94df-4a14-bcb1-f55449ddd98d
    &code_challenge=XeDw66i9FLjn7XaecT_xaFyUWWfUub02Kw118n-jbEs
    &code_challenge_method=S256    
        

If the Authorization Server does not recognize the Consumers's redirection endpoint from a prior connection with this Consumer, the Authorization Server SHOULD throw an error specifying that the redirection endpoint is not applicable to any registered Consumer and registration should be made before proceeding. If the redirect_uri matches a known client_id, the Authorization Server SHOULD present the User with the option to authorize the request. If the User authorizes the Consumer to access their resources with the requested scopes, the Authorization Server MUST redirect the browser back to the redirect_uri with the code, and state query string parameters. An example response looks like this:

HTTP/1.1 302 Found
Location https://consumer.example.com/Authorize?
    code=dcf95d196ae04d60aad7e19d18b9af755a7b593b680055158b8ad9c2975f0d86
    &state=26357667-94df-4a14-bcb1-f55449ddd98d
        

With the supplied code, the Consumer SHOULD attempt to exchange the code for an access_token. The Consumer makes an authorization grant POST request to the tokenUrl as declared in the Provider's Discovery Document. The HTTP POST request MUST include a Basic authorization header with the client_id and client_secret provided in the registration response. The body of the token request MUST include the following form fields:

Name Required Description
grant_type Yes Value MUST be set to "authorization_code".
code Yes The authorization code received from the authorization server.
redirect_uri Yes The Consumer's redirection endpoint.
scope Yes The scope of the access request.
code_verifier Yes The PKCE code verifier.

An example token request look like this (line breaks are for display purposes only):

POST https://auth.example.com/token HTTP/1.1
Authorization: Basic NDE2ZjI1YjhjMWQ5OThlODoxNWQ5MDA4NTk2NDdkZDlm
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
    &code=7c7a73263ee14b2b48073d0615f286ec74f6636689046cb8dbede0b5e87a1338
    &redirect_uri=https%3A%2F%2Fconsumer.example.com%2FAuthorize
    &scope=https%3A%2F%2Fpurl.imsglobal.org%2Fspec%2Fclr%2Fv1p0%2Fscope%2Fdelete+https%3A%2F%2Fpurl.imsglobal.org%2Fspec%2Fclr%2Fv1p0%2Fscope%2Freadonly+https%3A%2F%2Fpurl.imsglobal.org%2Fspec%2Fclr%2Fv1p0%2Fscope%2Freplace+offline_access
    &code_verifier=mYUQfKNgI1lSbY8EqtvNHLPzu0x%2FcVKO3fpWnX4VE5I%3D
        

If the Authorization Server finds the request to be a valid, it generates and returns an access token and optionally a refresh token.

4.4.3. ACG - Authenticating with Tokens

Sequence diagram for authenticating with tokens when using the ACG flow

Sequence diagram for authenticating with tokens when using the ACG flow

After obtaining an access_token and optionally a refresh_token using the method above, a Consumer MAY request resources controlled by the User from the Provider endpoints using the access_token in the HTTP Authorization header [RFC2617] with a Bearer Token [RFC6750]. For example, a "getClrs" would look like this:

GET https://provider.example.com/ims/clr/v1p0/clrs HTTP/1.1
Accept: application/ld+json, application/json
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImRmMTExNWEyZDZiMWRkOWY4YWFiNzllZjUxZWNhOTE4IiwidHlwIjoiSldUIn0.eyJuYmYiOjE1NjU3MzIzNzUsImV4cCI6MTU2NTczNTk3NSwiaXNzIjoiaHR0cHM6Ly9jbHJhdXRoLmF6dXJld2Vic2l0ZXMubmV0IiwiYXVkIjpbImh0dHBzOi8vY2xyYXV0aC5henVyZXdlYnNpdGVzLm5ldC9yZXNvdXJjZXMiLCJEZWxldGVDbHIiLCJHZXRDbHJzIiwiUmVwbGFjZUNsciJdLCJjbGllbnRfaWQiOiI0MTZmMjViOGMxZDk5OGU4Iiwic3ViIjoiODE4NzI3IiwiYXV0aF90aW1lIjoxNTY1NzIwMjAyLCJpZHAiOiJsb2NhbCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL2VtYWlsYWRkcmVzcyI6IkFsaWNlU21pdGhAZW1haWwuY29tIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZSI6IkFsaWNlIFNtaXRoIiwic2NvcGUiOlsiaHR0cHM6Ly9wdXJsLmltc2dsb2JhbC5vcmcvc3BlYy9jbHIvdjFwMC9zY29wZS9kZWxldGUiLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2Nsci92MXAwL3Njb3BlL3JlYWRvbmx5IiwiaHR0cHM6Ly9wdXJsLmltc2dsb2JhbC5vcmcvc3BlYy9jbHIvdjFwMC9zY29wZS9yZXBsYWNlIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbInB3ZCJdfQ.Bbe1uZVO-2PU541mRyAda8kLk6iU8QA9GSotaEdRZYZmxDxMIa1hiLVqCzB998R4mb7gWayES5yKu6Tn0y0-bcAMm3lBZuIUXkdHmCB7hdczHmYhQT-mcQ6y9v7SAvsmy5pAL4o1CoQEJRFj9T_kWbzqk-mBPmfZRsV-eA6NcOwZVO8N_9GtXkLgLgXdWQUBHOwX7_5IFdLvieTFyMW9NDRf4QHV1etIDs3iu1_Izix7Hi1YE4BmOoSsll07cmAxtilf061pTKLRV6zobrQQ2GO4vdi2nxUrUzcvYd7NV8xSEf_xPpsL_yBqvA2LRf1mt3JZKIjC3arIXlWaJUflJQ
        

If the Provider accepts the request, it will respond with the appropriate payload. For example, the response to the request above may look like this ( clrs is an empty list for brevity):

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
    "type": "ClrSet",
    "clrs": []
}
        

If the access_token is expired or about to expire, and the Consumer received a refresh_token, the Consumer can use OAuth 2.0 Token Refresh [RFC6749] to get a new access_token and refresh_token without repeating the process described in Obtaining Tokens.

toc | top

5. JSON Payloads

Below are 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;

5.1. Content-Type

5.2. JSON-LD Context

It is not required that the value of the @context property be processed using JSON-LD. This is to support processing using plain JSON libraries, such as those that might be used with OpenAPI. Libraries or processors that support JSON-LD can process the @context property using full JSON-LD processing as expected.

5.3. JSON Payloads

Coming soon.

toc | top

6. Service OpenAPI Description

This Section is NORMATIVE.

6.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 6.1a (version 2) and 6.1b (version 3). The syntax and semantics for this information are described in Appendix A2.1.

Table 6.1a - The Set of General Information Defined in the OpenAPI(2) Description.
Swagger Version 2.0
Specification Title Comprehensive Learner Record Standard
Specification Version 1.0
Description The Comprehensive Learner Record Standard enables the exchange of data about users and their achievements between a Comprehensive Learner Record Standard provider and the consumers of the associated data. This standard 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/clr/v1p0/
Schemes http, https
Consumes application/json
Produces application/json

Table 6.1b - The Set of General Information Defined in the OpenAPI(3) Description.
OpenAPI Version 3.0.0
Specification Title Comprehensive Learner Record Standard
Specification Version 1.0
Description The Comprehensive Learner Record Standard enables the exchange of data about users and their achievements between a Comprehensive Learner Record Standard provider and the consumers of the associated data. This standard 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 https://www.imsglobal.org/ims/clr/v1p0/

6.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 6.2. The syntax and semantics for these Tags are described in Appendix A2.2.

Table 6.2 - The Set of Tags Defined in the OpenAPI Description.
Tag Name Description
AssertionsManager The set of service operations that manage access to Assertions for Hosted Verification. The set of endpoints assigned to this tag are:
ClrsManager The set of service operations that manage access to CLRs. The set of endpoints assigned to this tag are:
DiscoveryManager The set of service operations that manage access to the DiscoveryDocument for dynamic consumer registration. The set of endpoints assigned to this tag are:
EndorsementsManager The set of service operations that manage access to Endorsements for Hosted Verification. The set of endpoints assigned to this tag are:
KeysManager The set of service operations that manage access to CryptographicKeys for Signed Verification. The set of endpoints assigned to this tag are:
RevocationsManager The set of service operations that manage access to RevocationLists for Signed Verification. The set of endpoints assigned to this tag are:

6.3 Security Information

The OAuth 2 Client Credentials security mode is used for this service. Table 6.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 A2.3.

Table 6.3.1 - The Set of OAuth 2.0 Client Credentials Security Information Defined in the OpenAPI Description.
Security Label OAuth2CCG
Type oauth2
Description OAuth 2.0 Client Credentials authorization per IMS Security Framework.
Flow OAS2 - application
OAS3 - clientCredentials
Token URL https://provider/token
Scopes
  • https://purl.imsglobal.org/spec/clr/v1p0/scope/delete
  • https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly
  • https://purl.imsglobal.org/spec/clr/v1p0/scope/replace
Global Scope OAuth2CCG : [ https://purl.imsglobal.org/spec/clr/v1p0/scope/delete, https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly, https://purl.imsglobal.org/spec/clr/v1p0/scope/replace ]

The OAuth 2 Authorization Code Grant security mode is used for this service. Table 6.3.2 describes the OpenAPI information for the configuration of the OAuth 2.0 Authorization Code Grant. The syntax and semantics for this information are described in Appendix A2.3.

Table 6.3.2 - The Set of OAuth 2.0 Authorization Code Grant Security Information Defined in the OpenAPI Description.
Security Label OAuth2ACG
Type oauth2
Description OAuth 2.0 Authorization Code Grant authorization per IMS Security Framework.
Flow OAS2 - accessCode
OAS3 - authorizationCode
Authorization URL https://provider/authorize
Token URL https://provider/token
Refresh URL https://provider/token
Scopes
  • https://purl.imsglobal.org/spec/clr/v1p0/scope/delete
  • https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly
  • https://purl.imsglobal.org/spec/clr/v1p0/scope/replace
Global Scope OAuth2ACG : [ https://purl.imsglobal.org/spec/clr/v1p0/scope/delete, https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly, https://purl.imsglobal.org/spec/clr/v1p0/scope/replace ]

6.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 A2.4.

6.4.1 "/assertions/{sourcedId}" Path

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

Table 6.4.1a - The Path Details for the 'GET' verb with the '/assertions/{sourcedId}' Path.
HTTP Verb: GET
Operation ID getAssertion
Summary The REST "read" request message for the "getAssertion()" API call.
Tags AssertionsManager
Security and Scopes The are no security modes and scopes covering access to this endpoint.
Description Returns the current version of the specified Assertion. This operation is used to verify a Hosted Assertion.
Path Placeholders
  • {sourcedId} - the unique identifier of the Assertion.
Query Parameters Query parameters are not permitted.
Responses
Name Type Description
200 GetAssertionPayloadDType 'OK' - The resource is returned in the payload.
400 imsx_StatusInfoDType 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.
404 imsx_StatusInfoDType 'Not Found' - The resource was not found.
406 imsx_StatusInfoDType 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
421 imsx_StatusInfoDType 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
default imsx_StatusInfoDType The request was not completed successfully.

6.4.2 "/clrs" Path

The following Table describes the OpenAPI information for the HTTP Verb "GET" on the "/clrs" Path.

Table 6.4.2a - The Path Details for the 'GET' verb with the '/clrs' Path.
HTTP Verb: GET
Operation ID getClrs
Summary The REST "read" request message for the "getClrs()" API call.
Tags ClrsManager
Security and Scopes The security modes protecting access to this endpoint are:
  • OAuth2CCG - OAuth 2 Client Credentials Grant
  • OAuth2ACG - OAuth 2 Access Code Grant

  • The scopes that enable access to this endpoint are:
    • https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly
    Description The set of CLRs the user is authorized to access are returned in the payload of the response message.
    Path Placeholders Path placeholders are not permitted.
    Query Parameters
    Name Type Multiplicity Default
    limit Positive Integer [0..1] 100
    offset Non-negative Integer [0..1] -
    since Date/Time (ISO 8601) [0..1] -
    Responses
    Name Type Description
    200 ClrSetDType 'OK' - The resource is returned in the payload.
    Headers
    * "X-Total-Count" - the total number of resources that are available to be returned
    Links
    * "next (limit | offset)" - get the next set of resources i.e. from offset to offset+limit
    * "last (limit | offset)" - get the last set of resources i.e. from offset to end
    * "first (limit | offset)" - get the first set of resources i.e. from first to limit
    * "prev (limit | offset)" - get the previous set of resources i.e. from last_offset to last_offset+limit
    400 imsx_StatusInfoDType 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.
    401 imsx_StatusInfoDType 'Unauthorized' - The request requires user authentication.
    403 imsx_StatusInfoDType 'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.
    404 imsx_StatusInfoDType 'Not Found' - There are no resources behind the URI.
    406 imsx_StatusInfoDType 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
    421 imsx_StatusInfoDType 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
    default N/A The request was not completed successfully. The exact error should be explained in the error payload.

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

    Table 6.4.2b - The Path Details for the 'POST' verb with the '/clrs' Path.
    HTTP Verb: POST
    Operation ID postClr
    Summary The REST "createbp" request message for the "postClr()" API call.
    Tags ClrsManager
    Security and Scopes The security modes protecting access to this endpoint are:
  • OAuth2CCG - OAuth 2 Client Credentials Grant
  • OAuth2ACG - OAuth 2 Access Code Grant

  • The scopes that enable access to this endpoint are:
    • https://purl.imsglobal.org/spec/clr/v1p0/scope/replace
    Description Create or replace a CLR.
    Path Placeholders Path placeholders are not permitted.
    Query Parameters Query parameters are not permitted.
    Responses
    Name Type Description
    200 PostClrPayloadDType 'OK' - The resource was successfully replaced.
    201 PostClrPayloadDType 'Created` - The resource was successfully created.
    304 imsx_StatusInfoDType 'Not Modified' - The client can use cached data.
    400 imsx_StatusInfoDType 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.
    401 imsx_StatusInfoDType 'Unauthorized' - The request requires user authentication.
    403 imsx_StatusInfoDType 'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.
    404 imsx_StatusInfoDType 'Not Found' - There is no resource behind the URI.
    405 imsx_StatusInfoDType 'Method Not Allowed' - The provider does not support this operation.
    406 imsx_StatusInfoDType 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
    421 imsx_StatusInfoDType 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
    default N/A The request was not completed successfully. The exact error should be explained in the error payload.

    6.4.3 "/clrs/{sourcedId}" Path

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

    Table 6.4.3a - The Path Details for the 'DELETE' verb with the '/clrs/{sourcedId}' Path.
    HTTP Verb: DELETE
    Operation ID deleteClr
    Summary The REST "delete" request message for the "deleteClr()" API call.
    Tags ClrsManager
    Security and Scopes The security modes protecting access to this endpoint are:
  • OAuth2CCG - OAuth 2 Client Credentials Grant
  • OAuth2ACG - OAuth 2 Access Code Grant

  • The scopes that enable access to this endpoint are:
    • https://purl.imsglobal.org/spec/clr/v1p0/scope/delete
    Description Delete a CLR.
    Path Placeholders
    • {sourcedId} - the unique identifier of the CLR to delete.
    Query Parameters Query parameters are not permitted.
    Responses
    Name Type Description
    200 imsx_StatusInfoDType 'OK' - The request succeeded and the resource was deleted.
    202 imsx_StatusInfoDType 'Accepted' - The request was accepted and the resource will be deleted.
    204 N/A 'No Content' - The resource was successfully deleted.
    400 imsx_StatusInfoDType 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.
    401 imsx_StatusInfoDType 'Unauthorized' - The request requires an user authentication.
    403 imsx_StatusInfoDType 'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.
    404 imsx_StatusInfoDType 'Not found' - There is no resource behind the URI.
    405 imsx_StatusInfoDType 'Method Not Allowed' - The provider does not support this operation.
    406 imsx_StatusInfoDType 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
    421 imsx_StatusInfoDType 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
    default N/A The request was not completed successfully. The exact error should be explained in the error payload.

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

    Table 6.4.3b - The Path Details for the 'GET' verb with the '/clrs/{sourcedId}' Path.
    HTTP Verb: GET
    Operation ID getClr
    Summary The REST "read" request message for the "getClr()" API call.
    Tags ClrsManager
    Security and Scopes The security modes protecting access to this endpoint are:
  • OAuth2CCG - OAuth 2 Client Credentials Grant
  • OAuth2ACG - OAuth 2 Access Code Grant

  • The scopes that enable access to this endpoint are:
    • https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly
    Description Returns the current version of the specified Clr. This operation is used to verify a Hosted Clr.
    Path Placeholders
    • {sourcedId} - the unique identifier of the Clr.
    Query Parameters Query parameters are not permitted.
    Responses
    Name Type Description
    200 GetClrPayloadDType 'OK' - The resource is returned in the payload.
    400 imsx_StatusInfoDType 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.
    401 imsx_StatusInfoDType 'Unauthorized' - The request requires user authentication.
    403 imsx_StatusInfoDType 'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.
    404 imsx_StatusInfoDType 'Not Found' – There is no resource behind the URI.
    406 imsx_StatusInfoDType 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
    410 imsx_StatusInfoDType 'Gone' - Marks the entity as revoked. The response may include the entity body.
    421 imsx_StatusInfoDType 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
    default N/A The request was not completed successfully.

    6.4.4 "/discovery" Path

    The following Table describes the OpenAPI information for the HTTP Verb "GET" on the "/discovery" Path.

    Table 6.4.4a - The Path Details for the 'GET' verb with the '/discovery' Path.
    HTTP Verb: GET
    Operation ID getDiscoveryDocument
    Summary The REST "read" request message for the "getDiscoveryDocument()" API call.
    Tags DiscoveryManager
    Security and Scopes The are no security modes and scopes covering access to this endpoint.
    Description Returns the DiscoveryDocument if the provider supports dynamic CLR consumer registration.
    Path Placeholders Path placeholders are not permitted.
    Query Parameters Query parameters are not permitted.
    Responses
    Name Type Description
    200 DiscoveryDocumentDType 'OK' - The resource is returned in the payload.
    404 imsx_StatusInfoDType 'Not Found' - There is no resource behind the URI.
    406 imsx_StatusInfoDType 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
    421 imsx_StatusInfoDType 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
    default N/A The request was not completed successfully.

    6.4.5 "/endorsements/{sourcedId}" Path

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

    Table 6.4.5a - The Path Details for the 'GET' verb with the '/endorsements/{sourcedId}' Path.
    HTTP Verb: GET
    Operation ID getEndorsement
    Summary The REST "read" request message for the "getEndorsement()" API call.
    Tags EndorsementsManager
    Security and Scopes The are no security modes and scopes covering access to this endpoint.
    Description Returns the current version of the specified Endorsement. This operation is used to verify a Hosted Endorsement.
    Path Placeholders
    • {sourcedId} - the unique identifier of the Endorsement.
    Query Parameters Query parameters are not permitted.
    Responses
    Name Type Description
    200 GetEndorsementPayloadDType 'OK' - The resource is returned in the payload.
    400 imsx_StatusInfoDType 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.
    404 imsx_StatusInfoDType 'Not Found' - The resource was not found.
    406 imsx_StatusInfoDType 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
    421 imsx_StatusInfoDType 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
    default imsx_StatusInfoDType The request was not completed successfully.

    6.4.6 "/keys/{sourcedId}" Path

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

    Table 6.4.6a - The Path Details for the 'GET' verb with the '/keys/{sourcedId}' Path.
    HTTP Verb: GET
    Operation ID getKey
    Summary The REST "read" request message for the "getKey()" API call.
    Tags KeysManager
    Security and Scopes The are no security modes and scopes covering access to this endpoint.
    Description Returns the current version of the specified CryptographicKey. This operation is used to verify a Signed Assertion, Clr, or Endorsement.
    Path Placeholders
    • {sourcedId} - the unique identifier of the CryptographicKey.
    Query Parameters Query parameters are not permitted.
    Responses
    Name Type Description
    200 GetCryptographicKeyPayloadDType 'OK' - The resource is returned in the payload.
    400 imsx_StatusInfoDType 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.
    404 imsx_StatusInfoDType 'Not Found' - The resource was not found.
    406 imsx_StatusInfoDType 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
    421 imsx_StatusInfoDType 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
    default imsx_StatusInfoDType The request was not completed successfully.

    6.4.7 "/revocations/{sourcedId}" Path

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

    Table 6.4.7a - The Path Details for the 'GET' verb with the '/revocations/{sourcedId}' Path.
    HTTP Verb: GET
    Operation ID getRevocationList
    Summary The REST "read" request message for the "getRevocationList()" API call.
    Tags RevocationsManager
    Security and Scopes The are no security modes and scopes covering access to this endpoint.
    Description Returns the current version of the issuer's RevocationList. This operation is used to verify a Signed Assertion, Clr, or Endorsement.
    Path Placeholders
    • {sourcedId} - the unique identifier of the RevocationList.
    Query Parameters Query parameters are not permitted.
    Responses
    Name Type Description
    200 GetRevocationListPayloadDType 'OK' - The resource is returned in the payload.
    400 imsx_StatusInfoDType 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.
    404 imsx_StatusInfoDType 'Not Found' - The resource was not found.
    406 imsx_StatusInfoDType 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
    421 imsx_StatusInfoDType 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
    default imsx_StatusInfoDType The request was not completed successfully.

    6.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 A2.5.

    6.5.1 "AchievementDType" Definition

    The OpenAPI JSON Schema description for the "AchievementDType" Complex Type is given in Table 6.5.1.

    Table 6.5.1 - OpenAPI JSON Schema description for the "AchievementDType" Complex Type.
    Annotations An accomplishment such as completing a degree, mastering a competency, or course completion that may be asserted about one or more learners.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! achievementType{0..1} ! alignments{0..*} ! associations{0..*} ! creditsAvailable{0..1} ! description{0..1} ! endorsements{0..*} ! humanCode{0..1} ! identifiers{0..*} ! name{1..1} ! fieldOfStudy{0..1} ! image{0..1} ! issuer{1..1} ! level{0..1} ! requirement{0..1} ! resultDescriptions{0..*} ! signedEndorsements{0..*} ! specialization{0..1} ! tags{0..*} ! { Namespace Extension }
    Source
        "AchievementDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "achievementType" : {
                    "description" : "...",
                    "type" : "string"
                },
                "alignments" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/AlignmentDType"
                    }
                },
                "associations" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/AssociationDType"
                    }
                },
                "creditsAvailable" : {
                    "description" : "Model Primitive Datatype = Float. ",
                    "type" : "number",
                    "format" : "float"
                },
                "description" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "endorsements" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/EndorsementDType"
                    }
                },
                "humanCode" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "identifiers" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/SystemIdentifierDType"
                    }
                },
                "name" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "fieldOfStudy" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "image" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "issuer" : {
                    "$ref" : "#/definitions/ProfileDType"
                },
                "level" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "requirement" : {
                    "$ref" : "#/definitions/CriteriaDType"
                },
                "resultDescriptions" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/ResultDescriptionDType"
                    }
                },
                "signedEndorsements" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string",
                        "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    }
                },
                "specialization" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "tags" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string"
                    }
                },
            },
            "required" : [ "id","name","issuer" ],
            "additionalProperties" : true
        },
                            

    6.5.2 "AddressDType" Definition

    The OpenAPI JSON Schema description for the "AddressDType" Complex Type is given in Table 6.5.2.

    Table 6.5.2 - OpenAPI JSON Schema description for the "AddressDType" Complex Type.
    Annotations Based on schema.org Address object.
    Diagram To be supplied in a later release of this document
    Model id{0..1} ! type{0..1} ! addressCountry{0..1} ! addressLocality{0..1} ! addressRegion{0..1} ! postalCode{0..1} ! postOfficeBoxNumber{0..1} ! streetAddress{0..1} ! { Namespace Extension }
    Source
        "AddressDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "addressCountry" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "addressLocality" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "addressRegion" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "postalCode" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "postOfficeBoxNumber" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "streetAddress" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "additionalProperties" : true
        },
                            

    6.5.3 "AlignmentDType" Definition

    The OpenAPI JSON Schema description for the "AlignmentDType" Complex Type is given in Table 6.5.3.

    Table 6.5.3 - OpenAPI JSON Schema description for the "AlignmentDType" Complex Type.
    Annotations Alignment is based on the schema.org AlignmentObject.
    Diagram To be supplied in a later release of this document
    Model id{0..1} ! type{0..1} ! targetCode{0..1} ! targetDescription{0..1} ! targetName{1..1} ! targetFramework{0..1} ! targetType{0..1} ! targetUrl{1..1} ! { Namespace Extension }
    Source
        "AlignmentDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "targetCode" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "targetDescription" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "targetName" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "targetFramework" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "targetType" : {
                    "description" : "...",
                    "type" : "string"
                },
                "targetUrl" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
            },
            "required" : [ "targetName","targetUrl" ],
            "additionalProperties" : true
        },
                            

    6.5.4 "ArtifactDType" Definition

    The OpenAPI JSON Schema description for the "ArtifactDType" Complex Type is given in Table 6.5.4.

    Table 6.5.4 - OpenAPI JSON Schema description for the "ArtifactDType" Complex Type.
    Annotations An artifact that is part of an evidence object.
    Diagram To be supplied in a later release of this document
    Model type{0..1} ! description{0..1} ! name{0..1} ! url{0..1} ! { Namespace Extension }
    Source
        "ArtifactDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "description" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "name" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "url" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
            },
            "additionalProperties" : true
        },
                            

    6.5.5 "AssertionDType" Definition

    The OpenAPI JSON Schema description for the "AssertionDType" Complex Type is given in Table 6.5.5.

    Table 6.5.5 - OpenAPI JSON Schema description for the "AssertionDType" Complex Type.
    Annotations Assertions are representations of an Achievement awarded to a Learner. It is used to share information about the Achievement Assertion, such as a result and verification method. Assertions are packaged for transmission as JSON objects with a set of mandatory and optional properties.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! achievement{0..1} ! activityEndDate{0..1} ! activityStartDate{0..1} ! creditsEarned{0..1} ! endorsements{0..*} ! evidence{0..*} ! expires{0..1} ! image{0..1} ! issuedOn{0..1} ! licenseNumber{0..1} ! narrative{0..1} ! recipient{0..1} ! results{0..*} ! revocationReason{0..1} ! revoked{0..1} ! role{0..1} ! signedEndorsements{0..*} ! source{0..1} ! term{0..1} ! verification{0..1} ! { Namespace Extension }
    Source
        "AssertionDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "achievement" : {
                    "$ref" : "#/definitions/AchievementDType"
                },
                "activityEndDate" : {
                    "description" : "Model Primitive Datatype = DateTime. ",
                    "type" : "string",
                    "format" : "date-time"
                },
                "activityStartDate" : {
                    "description" : "Model Primitive Datatype = DateTime. ",
                    "type" : "string",
                    "format" : "date-time"
                },
                "creditsEarned" : {
                    "description" : "Model Primitive Datatype = Float. ",
                    "type" : "number",
                    "format" : "float"
                },
                "endorsements" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/EndorsementDType"
                    }
                },
                "evidence" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/EvidenceDType"
                    }
                },
                "expires" : {
                    "description" : "Model Primitive Datatype = DateTime. ",
                    "type" : "string",
                    "format" : "date-time"
                },
                "image" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "issuedOn" : {
                    "description" : "Model Primitive Datatype = DateTime. ",
                    "type" : "string",
                    "format" : "date-time"
                },
                "licenseNumber" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "narrative" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "recipient" : {
                    "$ref" : "#/definitions/IdentityDType"
                },
                "results" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/ResultDType"
                    }
                },
                "revocationReason" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "revoked" : {
                    "description" : "Model Primitive Datatype = Boolean. ",
                    "type" : "boolean"
                },
                "role" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "signedEndorsements" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string",
                        "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    }
                },
                "source" : {
                    "$ref" : "#/definitions/ProfileDType"
                },
                "term" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "verification" : {
                    "$ref" : "#/definitions/VerificationDType"
                },
            },
            "required" : [ "id" ],
            "additionalProperties" : true
        },
                            

    6.5.6 "AssociationDType" Definition

    The OpenAPI JSON Schema description for the "AssociationDType" Complex Type is given in Table 6.5.6.

    Table 6.5.6 - OpenAPI JSON Schema description for the "AssociationDType" Complex Type.
    Annotations Association is based on the CASE AssociationLink object. An Association associates (relates) one Achievement with another Achievement.
    Diagram To be supplied in a later release of this document
    Model associationType{1..1} ! targetId{1..1} ! title{1..1} ! { Namespace Extension }
    Source
        "AssociationDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "associationType" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "exactMatchOf","exemplar","hasSkillLevel","isChildOf","isParentOf","isPartOf","isPeerOf","isRelatedTo","precedes","replacedBy" ]
                },
                "targetId" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "title" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "associationType","targetId","title" ],
            "additionalProperties" : true
        },
                            

    6.5.7 "ClrDType" Definition

    The OpenAPI JSON Schema description for the "ClrDType" Complex Type is given in Table 6.5.7.

    Table 6.5.7 - OpenAPI JSON Schema description for the "ClrDType" Complex Type.
    Annotations A collection of assertions for a single person reported by a single publisher.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! achievements{0..*} ! assertions{0..*} ! endorsements{0..*} ! issuedOn{1..1} ! learner{1..1} ! name{0..1} ! partial{0..1} ! publisher{1..1} ! revocationReason{0..1} ! revoked{0..1} ! signedAssertions{0..*} ! signedEndorsements{0..*} ! verification{0..1} ! { Namespace Extension }
    Source
        "ClrDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "achievements" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/AchievementDType"
                    }
                },
                "assertions" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/AssertionDType"
                    }
                },
                "endorsements" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/EndorsementDType"
                    }
                },
                "issuedOn" : {
                    "description" : "Model Primitive Datatype = DateTime. ",
                    "type" : "string",
                    "format" : "date-time"
                },
                "learner" : {
                    "$ref" : "#/definitions/ProfileDType"
                },
                "name" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "partial" : {
                    "description" : "Model Primitive Datatype = Boolean. ",
                    "type" : "boolean"
                },
                "publisher" : {
                    "$ref" : "#/definitions/ProfileDType"
                },
                "revocationReason" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "revoked" : {
                    "description" : "Model Primitive Datatype = Boolean. ",
                    "type" : "boolean"
                },
                "signedAssertions" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string",
                        "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    }
                },
                "signedEndorsements" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string",
                        "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    }
                },
                "verification" : {
                    "$ref" : "#/definitions/VerificationDType"
                },
            },
            "required" : [ "id","issuedOn","learner","publisher" ],
            "additionalProperties" : true
        },
                            

    6.5.8 "ClrSetDType" Definition

    The OpenAPI JSON Schema description for the "ClrSetDType" Complex Type is given in Table 6.5.8.

    Table 6.5.8 - OpenAPI JSON Schema description for the "ClrSetDType" Complex Type.
    Annotations A set of CLRs.
    Diagram To be supplied in a later release of this document
    Model id{0..1} ! type{0..1} ! clrs{0..*} ! signedClrs{0..*}
    Source
        "ClrSetDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "clrs" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/ClrDType"
                    }
                },
                "signedClrs" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string",
                        "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    }
                },
            },
            "additionalProperties" : false
        },
                            

    6.5.9 "CriteriaDType" Definition

    The OpenAPI JSON Schema description for the "CriteriaDType" Complex Type is given in Table 6.5.9.

    Table 6.5.9 - OpenAPI JSON Schema description for the "CriteriaDType" Complex Type.
    Annotations Descriptive metadata about the achievements necessary to be recognized with an Assertion of a particular AchievementType. This data is added to the AchievementType so that it may be rendered when that AchievementType is displayed, instead of simply a link to human-readable criteria external to the Achievement Assertion. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether.
    Diagram To be supplied in a later release of this document
    Model id{0..1} ! type{0..1} ! narrative{0..1} ! { Namespace Extension }
    Source
        "CriteriaDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "narrative" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "additionalProperties" : true
        },
                            

    6.5.10 "CryptographicKeyDType" Definition

    The OpenAPI JSON Schema description for the "CryptographicKeyDType" Complex Type is given in Table 6.5.10.

    Table 6.5.10 - OpenAPI JSON Schema description for the "CryptographicKeyDType" Complex Type.
    Annotations Based on the Key class from the W3C Web Payments Community Group Security Vocabulary. A CryptographicKey document identifies and describes a public key used to verify signed Assertions.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! owner{1..1} ! publicKeyPem{1..1} ! { Namespace Extension }
    Source
        "CryptographicKeyDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "owner" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "publicKeyPem" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "id","owner","publicKeyPem" ],
            "additionalProperties" : true
        },
                            

    6.5.11 "DiscoveryDocumentDType" Definition

    The OpenAPI JSON Schema description for the "DiscoveryDocumentDType" Complex Type is given in Table 6.5.11.

    Table 6.5.11 - OpenAPI JSON Schema description for the "DiscoveryDocumentDType" Complex Type.
    Annotations Configuration information about the provider implementation.
    Diagram To be supplied in a later release of this document
    Model authorizationUrl{1..1} ! image{0..1} ! name{1..1} ! privacyPolicyUrl{1..1} ! registrationUrl{1..1} ! scopesOffered{1..*} ! termsOfServiceUrl{1..1} ! tokenUrl{1..1}
    Source
        "DiscoveryDocumentDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "authorizationUrl" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "image" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "name" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "privacyPolicyUrl" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "registrationUrl" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "scopesOffered" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "array",
                    "minItems" : 1,
                    "items" : {
                        "type" : "string",
                        "format" : "uri"
                    }
                },
                "termsOfServiceUrl" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "tokenUrl" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
            },
            "required" : [ "authorizationUrl","name","privacyPolicyUrl","registrationUrl","scopesOffered","termsOfServiceUrl","tokenUrl" ],
            "additionalProperties" : false
        },
                            

    6.5.12 "EndorsementDType" Definition

    The OpenAPI JSON Schema description for the "EndorsementDType" Complex Type is given in Table 6.5.12.

    Table 6.5.12 - OpenAPI JSON Schema description for the "EndorsementDType" Complex Type.
    Annotations An endorsement claim.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! claim{1..1} ! issuedOn{1..1} ! issuer{1..1} ! revocationReason{0..1} ! revoked{0..1} ! verification{1..1} ! { Namespace Extension }
    Source
        "EndorsementDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "claim" : {
                    "$ref" : "#/definitions/EndorsementClaimDType"
                },
                "issuedOn" : {
                    "description" : "Model Primitive Datatype = DateTime. ",
                    "type" : "string",
                    "format" : "date-time"
                },
                "issuer" : {
                    "$ref" : "#/definitions/EndorsementProfileDType"
                },
                "revocationReason" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "revoked" : {
                    "description" : "Model Primitive Datatype = Boolean. ",
                    "type" : "boolean"
                },
                "verification" : {
                    "$ref" : "#/definitions/VerificationDType"
                },
            },
            "required" : [ "id","claim","issuedOn","issuer","verification" ],
            "additionalProperties" : true
        },
                            

    6.5.13 "EndorsementClaimDType" Definition

    The OpenAPI JSON Schema description for the "EndorsementClaimDType" Complex Type is given in Table 6.5.13.

    Table 6.5.13 - OpenAPI JSON Schema description for the "EndorsementClaimDType" Complex Type.
    Annotations An entity, identified by an id and additional properties that the endorser would like to claim about that entity.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! endorsementComment{0..1} ! { Namespace Extension }
    Source
        "EndorsementClaimDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "endorsementComment" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "id" ],
            "additionalProperties" : true
        },
                            

    6.5.14 "EndorsementProfileDType" Definition

    The OpenAPI JSON Schema description for the "EndorsementProfileDType" Complex Type is given in Table 6.5.14.

    Table 6.5.14 - OpenAPI JSON Schema description for the "EndorsementProfileDType" Complex Type.
    Annotations A Profile is a collection of information that describes the person or organization using Comprehensive Learner Record (CLR). Publishers, learners, and issuers must be represented as profiles. Recipients, endorsers, or other entities may also be represented using this vocabulary. An EndorsementProfile cannot have endorsements.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! additionalName{0..1} ! address{0..1} ! description{0..1} ! email{0..1} ! familyName{0..1} ! givenName{0..1} ! identifiers{0..*} ! image{0..1} ! name{0..1} ! official{0..1} ! publicKey{0..1} ! revocationList{0..1} ! sourcedId{0..1} ! studentId{0..1} ! telephone{0..1} ! url{0..1} ! verification{0..1} ! { Namespace Extension }
    Source
        "EndorsementProfileDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "additionalName" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "address" : {
                    "$ref" : "#/definitions/AddressDType"
                },
                "description" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "email" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "familyName" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "givenName" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "identifiers" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/SystemIdentifierDType"
                    }
                },
                "image" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "name" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "official" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "publicKey" : {
                    "$ref" : "#/definitions/CryptographicKeyDType"
                },
                "revocationList" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "sourcedId" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "studentId" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "telephone" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "url" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "verification" : {
                    "$ref" : "#/definitions/VerificationDType"
                },
            },
            "required" : [ "id" ],
            "additionalProperties" : true
        },
                            

    6.5.15 "EvidenceDType" Definition

    The OpenAPI JSON Schema description for the "EvidenceDType" Complex Type is given in Table 6.5.15.

    Table 6.5.15 - OpenAPI JSON Schema description for the "EvidenceDType" Complex Type.
    Annotations One or more artifacts that represent supporting evidence for the record. Examples include text, media, websites, etc.
    Diagram To be supplied in a later release of this document
    Model id{0..1} ! type{0..1} ! artifacts{0..*} ! audience{0..1} ! description{0..1} ! genre{0..1} ! name{1..1} ! narrative{0..1} ! { Namespace Extension }
    Source
        "EvidenceDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "artifacts" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/ArtifactDType"
                    }
                },
                "audience" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "description" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "genre" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "name" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "narrative" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "name" ],
            "additionalProperties" : true
        },
                            

    6.5.16 "GetAssertionPayloadDType" Definition

    The OpenAPI JSON Schema description for the "GetAssertionPayloadDType" Complex Type is given in Table 6.5.16.

    Table 6.5.16 - OpenAPI JSON Schema description for the "GetAssertionPayloadDType" Complex Type.
    Annotations Payload for the 'getAssertion' operation.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! achievement{0..1} ! activityEndDate{0..1} ! activityStartDate{0..1} ! creditsEarned{0..1} ! endorsements{0..*} ! evidence{0..*} ! expires{0..1} ! image{0..1} ! issuedOn{0..1} ! licenseNumber{0..1} ! narrative{0..1} ! recipient{0..1} ! results{0..*} ! revocationReason{0..1} ! revoked{0..1} ! role{0..1} ! signedEndorsements{0..*} ! source{0..1} ! term{0..1} ! verification{0..1} ! { Namespace Extension }, @context{1..1}
    Source
        "GetAssertionPayloadDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "achievement" : {
                    "$ref" : "#/definitions/AchievementDType"
                },
                "activityEndDate" : {
                    "description" : "Model Primitive Datatype = DateTime. ",
                    "type" : "string",
                    "format" : "date-time"
                },
                "activityStartDate" : {
                    "description" : "Model Primitive Datatype = DateTime. ",
                    "type" : "string",
                    "format" : "date-time"
                },
                "creditsEarned" : {
                    "description" : "Model Primitive Datatype = Float. ",
                    "type" : "number",
                    "format" : "float"
                },
                "endorsements" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/EndorsementDType"
                    }
                },
                "evidence" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/EvidenceDType"
                    }
                },
                "expires" : {
                    "description" : "Model Primitive Datatype = DateTime. ",
                    "type" : "string",
                    "format" : "date-time"
                },
                "image" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "issuedOn" : {
                    "description" : "Model Primitive Datatype = DateTime. ",
                    "type" : "string",
                    "format" : "date-time"
                },
                "licenseNumber" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "narrative" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "recipient" : {
                    "$ref" : "#/definitions/IdentityDType"
                },
                "results" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/ResultDType"
                    }
                },
                "revocationReason" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "revoked" : {
                    "description" : "Model Primitive Datatype = Boolean. ",
                    "type" : "boolean"
                },
                "role" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "signedEndorsements" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string",
                        "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    }
                },
                "source" : {
                    "$ref" : "#/definitions/ProfileDType"
                },
                "term" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "verification" : {
                    "$ref" : "#/definitions/VerificationDType"
                },
                "@context" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "@context" ],
            "additionalProperties" : false
        },
                            

    6.5.17 "GetClrPayloadDType" Definition

    The OpenAPI JSON Schema description for the "GetClrPayloadDType" Complex Type is given in Table 6.5.17.

    Table 6.5.17 - OpenAPI JSON Schema description for the "GetClrPayloadDType" Complex Type.
    Annotations Payload for the 'getClr' operation.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! achievements{0..*} ! assertions{0..*} ! endorsements{0..*} ! issuedOn{1..1} ! learner{1..1} ! name{0..1} ! partial{0..1} ! publisher{1..1} ! revocationReason{0..1} ! revoked{0..1} ! signedAssertions{0..*} ! signedEndorsements{0..*} ! verification{0..1} ! { Namespace Extension }, @context{1..1}
    Source
        "GetClrPayloadDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "achievements" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/AchievementDType"
                    }
                },
                "assertions" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/AssertionDType"
                    }
                },
                "endorsements" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/EndorsementDType"
                    }
                },
                "issuedOn" : {
                    "description" : "Model Primitive Datatype = DateTime. ",
                    "type" : "string",
                    "format" : "date-time"
                },
                "learner" : {
                    "$ref" : "#/definitions/ProfileDType"
                },
                "name" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "partial" : {
                    "description" : "Model Primitive Datatype = Boolean. ",
                    "type" : "boolean"
                },
                "publisher" : {
                    "$ref" : "#/definitions/ProfileDType"
                },
                "revocationReason" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "revoked" : {
                    "description" : "Model Primitive Datatype = Boolean. ",
                    "type" : "boolean"
                },
                "signedAssertions" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string",
                        "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    }
                },
                "signedEndorsements" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string",
                        "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    }
                },
                "verification" : {
                    "$ref" : "#/definitions/VerificationDType"
                },
                "@context" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "@context" ],
            "additionalProperties" : false
        },
                            

    6.5.18 "GetCryptographicKeyPayloadDType" Definition

    The OpenAPI JSON Schema description for the "GetCryptographicKeyPayloadDType" Complex Type is given in Table 6.5.18.

    Table 6.5.18 - OpenAPI JSON Schema description for the "GetCryptographicKeyPayloadDType" Complex Type.
    Annotations Payload for the 'getKey' operation.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! owner{1..1} ! publicKeyPem{1..1} ! { Namespace Extension }, @context{1..1}
    Source
        "GetCryptographicKeyPayloadDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "owner" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "publicKeyPem" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "@context" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "@context" ],
            "additionalProperties" : false
        },
                            

    6.5.19 "GetEndorsementPayloadDType" Definition

    The OpenAPI JSON Schema description for the "GetEndorsementPayloadDType" Complex Type is given in Table 6.5.19.

    Table 6.5.19 - OpenAPI JSON Schema description for the "GetEndorsementPayloadDType" Complex Type.
    Annotations Payload for the 'getEndorsement' operation.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! claim{1..1} ! issuedOn{1..1} ! issuer{1..1} ! revocationReason{0..1} ! revoked{0..1} ! verification{1..1} ! { Namespace Extension }, @context{1..1}
    Source
        "GetEndorsementPayloadDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "claim" : {
                    "$ref" : "#/definitions/EndorsementClaimDType"
                },
                "issuedOn" : {
                    "description" : "Model Primitive Datatype = DateTime. ",
                    "type" : "string",
                    "format" : "date-time"
                },
                "issuer" : {
                    "$ref" : "#/definitions/EndorsementProfileDType"
                },
                "revocationReason" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "revoked" : {
                    "description" : "Model Primitive Datatype = Boolean. ",
                    "type" : "boolean"
                },
                "verification" : {
                    "$ref" : "#/definitions/VerificationDType"
                },
                "@context" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "@context" ],
            "additionalProperties" : false
        },
                            

    6.5.20 "GetRevocationListPayloadDType" Definition

    The OpenAPI JSON Schema description for the "GetRevocationListPayloadDType" Complex Type is given in Table 6.5.20.

    Table 6.5.20 - OpenAPI JSON Schema description for the "GetRevocationListPayloadDType" Complex Type.
    Annotations Payload for the 'getRevocationList' operation.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! issuer{1..1} ! revokedAssertions{0..*} ! @context{1..1}
    Source
        "GetRevocationListPayloadDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "issuer" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "revokedAssertions" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string"
                    }
                },
                "@context" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "@context" ],
            "additionalProperties" : false
        },
                            

    6.5.21 "IdentityDType" Definition

    The OpenAPI JSON Schema description for the "IdentityDType" Complex Type is given in Table 6.5.21.

    Table 6.5.21 - OpenAPI JSON Schema description for the "IdentityDType" Complex Type.
    Annotations A collection of information about the recipient of an achievement assertion.
    Diagram To be supplied in a later release of this document
    Model id{0..1} ! type{1..1} ! identity{1..1} ! hashed{1..1} ! salt{0..1} ! { Namespace Extension }
    Source
        "IdentityDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "identity" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "hashed" : {
                    "description" : "Model Primitive Datatype = Boolean. ",
                    "type" : "boolean"
                },
                "salt" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "type","identity","hashed" ],
            "additionalProperties" : true
        },
                            

    6.5.22 "PostClrPayloadDType" Definition

    The OpenAPI JSON Schema description for the "PostClrPayloadDType" Complex Type is given in Table 6.5.22.

    Table 6.5.22 - OpenAPI JSON Schema description for the "PostClrPayloadDType" Complex Type.
    Annotations Payload for the 'postClr' operation. Only one format (signed or unsigned) is allowed.
    Diagram To be supplied in a later release of this document
    Model clr{0..1} ! signedClr{0..1}
    Source
        "PostClrPayloadDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "clr" : {
                    "$ref" : "#/definitions/ClrDType"
                },
                "signedClr" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string",
                    "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                },
            },
            "additionalProperties" : false
        },
                            

    6.5.23 "ProfileDType" Definition

    The OpenAPI JSON Schema description for the "ProfileDType" Complex Type is given in Table 6.5.23.

    Table 6.5.23 - OpenAPI JSON Schema description for the "ProfileDType" Complex Type.
    Annotations A Profile is a collection of information that describes the person or organization using Comprehensive Learner Record (CLR). Publishers, learners, and issuers must be represented as profiles. Recipients, endorsers, or other entities may also be represented using this vocabulary.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! address{0..1} ! additionalName{0..1} ! birthDate{0..1} ! description{0..1} ! email{0..1} ! endorsements{0..*} ! familyName{0..1} ! givenName{0..1} ! identifiers{0..*} ! image{0..1} ! name{0..1} ! official{0..1} ! parentOrg{0..1} ! publicKey{0..1} ! revocationList{0..1} ! signedEndorsements{0..*} ! sourcedId{0..1} ! studentId{0..1} ! telephone{0..1} ! url{0..1} ! verification{0..1} ! { Namespace Extension }
    Source
        "ProfileDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "address" : {
                    "$ref" : "#/definitions/AddressDType"
                },
                "additionalName" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "birthDate" : {
                    "description" : "Model Primitive Datatype = Date. ",
                    "type" : "string",
                    "format" : "date"
                },
                "description" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "email" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "endorsements" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/EndorsementDType"
                    }
                },
                "familyName" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "givenName" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "identifiers" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/SystemIdentifierDType"
                    }
                },
                "image" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "name" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "official" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "parentOrg" : {
                    "$ref" : "#/definitions/ProfileDType"
                },
                "publicKey" : {
                    "$ref" : "#/definitions/CryptographicKeyDType"
                },
                "revocationList" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "signedEndorsements" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string",
                        "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    }
                },
                "sourcedId" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "studentId" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "telephone" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "url" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "verification" : {
                    "$ref" : "#/definitions/VerificationDType"
                },
            },
            "required" : [ "id" ],
            "additionalProperties" : true
        },
                            

    6.5.24 "ResultDType" Definition

    The OpenAPI JSON Schema description for the "ResultDType" Complex Type is given in Table 6.5.24.

    Table 6.5.24 - OpenAPI JSON Schema description for the "ResultDType" Complex Type.
    Annotations Describes a result of an achievement.
    Diagram To be supplied in a later release of this document
    Model id{0..1} ! type{0..1} ! achievedLevel{0..1} ! alignments{0..*} ! resultDescription{1..1} ! status{0..1} ! value{0..1} ! { Namespace Extension }
    Source
        "ResultDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "achievedLevel" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "alignments" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/AlignmentDType"
                    }
                },
                "resultDescription" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "status" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "Completed","Enrolled","Failed","InProgress","OnHold","Withdrew" ]
                },
                "value" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "resultDescription" ],
            "additionalProperties" : true
        },
                            

    6.5.25 "ResultDescriptionDType" Definition

    The OpenAPI JSON Schema description for the "ResultDescriptionDType" Complex Type is given in Table 6.5.25.

    Table 6.5.25 - OpenAPI JSON Schema description for the "ResultDescriptionDType" Complex Type.
    Annotations Describes a possible achievement result.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! alignments{0..*} ! allowedValues{0..*} ! name{1..1} ! requiredLevel{0..1} ! requiredValue{0..1} ! resultType{1..1} ! rubricCriterionLevels{0..*} ! valueMax{0..1} ! valueMin{0..1} ! { Namespace Extension }
    Source
        "ResultDescriptionDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "alignments" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/AlignmentDType"
                    }
                },
                "allowedValues" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string"
                    }
                },
                "name" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "requiredLevel" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "requiredValue" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "resultType" : {
                    "description" : "...",
                    "type" : "string"
                },
                "rubricCriterionLevels" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/RubricCriterionLevelDType"
                    }
                },
                "valueMax" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "valueMin" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "id","name","resultType" ],
            "additionalProperties" : true
        },
                            

    6.5.26 "RubricCriterionLevelDType" Definition

    The OpenAPI JSON Schema description for the "RubricCriterionLevelDType" Complex Type is given in Table 6.5.26.

    Table 6.5.26 - OpenAPI JSON Schema description for the "RubricCriterionLevelDType" Complex Type.
    Annotations Describes a rubric criterion level.
    Diagram To be supplied in a later release of this document
    Model id{1..1} ! type{0..1} ! alignments{0..*} ! description{0..1} ! level{0..1} ! name{1..1} ! points{0..1} ! { Namespace Extension }
    Source
        "RubricCriterionLevelDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "alignments" : {
                    "description" : "...",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/AlignmentDType"
                    }
                },
                "description" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "level" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "name" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "points" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "id","name" ],
            "additionalProperties" : true
        },
                            

    6.5.27 "SystemIdentifierDType" Definition

    The OpenAPI JSON Schema description for the "SystemIdentifierDType" Complex Type is given in Table 6.5.27.

    Table 6.5.27 - OpenAPI JSON Schema description for the "SystemIdentifierDType" Complex Type.
    Annotations A SystemIdentifier represents a single, system-local identifier for an Achievement.
    Diagram To be supplied in a later release of this document
    Model type{0..1} ! identifier{1..1} ! identifierType{1..1} ! { Namespace Extension }
    Source
        "SystemIdentifierDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "type" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "identifier" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
                "identifierType" : {
                    "description" : "...",
                    "type" : "string"
                },
            },
            "required" : [ "identifier","identifierType" ],
            "additionalProperties" : true
        },
                            

    6.5.28 "VerificationDType" Definition

    The OpenAPI JSON Schema description for the "VerificationDType" Complex Type is given in Table 6.5.28.

    Table 6.5.28 - OpenAPI JSON Schema description for the "VerificationDType" Complex Type.
    Annotations Information a reviewer can use to verify an Assertion, Clr, or Endorsement.
    Diagram To be supplied in a later release of this document
    Model id{0..1} ! type{1..1} ! allowedOrigins{0..*} ! creator{0..1} ! startsWith{0..*} ! verificationProperty{0..1} ! { Namespace Extension }
    Source
        "VerificationDType" : {
            "description" : "...",
            "type" : "object",
            "properties" : {
                "id" : {
                    "description" : "Model Primitive Datatype = NormalizedString. ",
                    "type" : "string"
                },
                "type" : {
                    "description" : "...",
                    "type" : "string",
                    "enum" : [ "Hosted","Signed","Verification" ]
                },
                "allowedOrigins" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string"
                    }
                },
                "creator" : {
                    "description" : "Model Primitive Datatype = AnyURI. ",
                    "type" : "string",
                    "format" : "uri"
                },
                "startsWith" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string"
                    }
                },
                "verificationProperty" : {
                    "description" : "Model Primitive Datatype = String. ",
                    "type" : "string"
                },
            },
            "required" : [ "type" ],
            "additionalProperties" : true
        },
                            

    6.5.29 "imsx_CodeMinorDType" Definition

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

    Table 6.5.29 - 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
        },
                            

    6.5.30 "imsx_CodeMinorFieldDType" Definition

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

    Table 6.5.30 - 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" : [ "forbidden","fullsuccess","internal_server_error","invalid_data","invalid_query_parameter","misdirected_request","not_acceptable","not_allowed","not_modified","server_busy","unauthorizedrequest","unknown" ]
                },
            },
            "required" : [ "imsx_codeMinorFieldName","imsx_codeMinorFieldValue" ],
            "additionalProperties" : false
        },
                            

    6.5.31 "imsx_StatusInfoDType" Definition

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

    Table 6.5.31 - 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","failure","processing","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

    7. Extending and Profiling the Standard

    7.1. Extending the Standard

    Proprietary extensions of the standard 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.

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

    An example of creating such an extension is given in the accompanying implementation guide [CLR, 19c].

    7.1.2. Proprietary Data Elements

    The payload MAY be enriched with additional data. Any extension MUST be done by adding a new parameter to the JSON object. The key name MUST be a URI that uniquely identifies the property. The value MUST be any valid JSON data. For example, if wanting to show the extension of field "classification", with value "private" that was added/provided by "ims", the name/value pair is: "ims:classification":"private".

    It is RECOMMENDED that where extensions are used, whenever possible the name/value pairs are based upon vocabulary controlled files. This eliminates a proliferation of free text equivalencies from entering the data (e.g. "Florida" vs "FL", vs "Florida, USA". In such cases either the attribute, or the value (or both) MUST be a URI that references the attribute and/or value from an appropriate vocabulary file. For example:

    "https://www.nbrs.org" : "FL"

    7.2. Profiling the Standard

    This standard 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 artefacts (documents, OpenAPI files, XSDs, etc.), it is strongly recommended that the IMS specification tools are used. This will ensure that the artefacts are consistent with the base specifications and that useful support documentation is automatically produced e.g. creation of a document that summarises 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

    [CLR, 19a] IMS Comprehensive Learner Record Standard REST/JSON Binding Version 1.0, Jeff Bohrer (IMS Global), Andy Miller (IMS Global), IMS Global Learning Consortium, Inc., January 14, 2021, https://www.imsglobal.org/spec/clr/v1p0/RESTBinding/clr_RESTBind.html.
    [CLR, 19b] IMS Comprehensive Learner Record Standard v1.0: Conformance and Certification Guide, Jeff Bohrer (IMS Global), Dereck Haskins (IMS Global), Andy Miller (IMS Global), IMS Global Learning Consortium, Inc., February 5, 2021, https://www.imsglobal.org/spec/clr/v1p0/cert/.
    [CLR, 19c] IMS Comprehensive Learner Record Standard v1.0: Implementation Guide, Jeff Bohrer (IMS Global), Andy Miller (IMS Global), IMS Global Learning Consortium, Inc., January 14, 2021, https://www.imsglobal.org/spec/clr/v1p0/impl/.
    [CLR, 19d] IMS Comprehensive Learner Record Standard Information Model Version 1.0, Jeff Bohrer (IMS Global), Andy Miller (IMS Global), IMS Global Learning Consortium, Inc., January 14, 2021, https://www.imsglobal.org/spec/clr/v1p0/InfoModel/clr_InfoModel.html.
    [I-BAT, 06] IMS Binding Auto-generation Toolkit (I-BAT), Colin Smythe, IMS Global, IMS Global Learning Consortium, Inc., July 2016.
    [JSON-LD, 14a] JSON-LD 1.0, Manu Sporny, Digital Bazaar, Dave Longley, Digital Bazaar, Gregg Kellogg, Kellogg Associates, Markus Lanthaler, Graz University of Technology, Niklas Lindstrom, W3C, 16 January 2014, https://www.w3.org/TR/json-ld/.
    [RFC2119] Key words for use in RFCs to Indicate Requirement Levels, S. Bradner, IETF, March 1997, https://tools.ietf.org/html/rfc2119.
    [RFC2617] HTTP Authentication: Basic and Digest Access Authentication, J. Franks, P. Hallam-Baker, J. Hostetler, S. Lawrence, P. Leach, A. Luotonen, L. Stewart, IETF, June 1999, https://tools.ietf.org/html/rfc2617.
    [RFC6749] The OAuth 2.0 Authorization Framework, D. Hardt, IETF, October 2012, https://tools.ietf.org/html/rfc6749.
    [RFC6750] The OAuth 2.0 Authorization Framework: Bearer Token Usage, M. Jones, D. Hardt, IETF, October 2012, https://tools.ietf.org/html/rfc6750.
    [RFC7591] OAuth 2.0 Dynamic Client Registration Protocol, M. Jones, J. Bradley, M. Machulak, P. Hunt, IETF, July 2015, https://tools.ietf.org/html/rfc7591.
    [SECURITY FRAMEWORK, 19a] IMS Security Framework, Mark McKell, Nathan Mills, Colin Smythe, Claude Verboort, IMS Global, 15 May 2019, https://imsglobal.org/spec/security/v1p0/.

    toc | top

    Appendix A REST/JSON Modelling Terms

    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 OpenAPI Descriptions Explanations

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

    A2.1 OpenAPI General Information Table Explanation

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

    Table A2.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 A2.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

    A2.2 OpenAPI Tags Table Explanation

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

    Table A2.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

    A2.3 OpenAPI Security Table Explanation

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

    Table A2.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

    A2.4 OpenAPI Paths Table Explanation

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

    Table A2.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

    A2.5 OpenAPI Definitions Table Explanation

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

    Table A2.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

    B1 Comprehensive Learner Record Standard OpenAPI JSON Definition 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/spec/clr/v1p0/schema/openapi/clr.json).

    {
        "swagger" : "2.0",
        "info" : {
            "version" : "1.0",
            "title" : "Comprehensive Learner Record Standard OpenAPI (JSON) Definition",
            "description" : "The Comprehensive Learner Record Standard enables the exchange of data about users and their achievements between a Comprehensive Learner Record Standard provider and the consumers of the associated data. This standard 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/clr/v1p0/",
        "schemes" : [ "http","https" ],
        "tags" : [
            {
                "name" : "AssertionsManager",
                "description" : "The set of service operations that manage access to Assertions for Hosted Verification."
            },
            {
                "name" : "ClrsManager",
                "description" : "The set of service operations that manage access to CLRs."
            },
            {
                "name" : "DiscoveryManager",
                "description" : "The set of service operations that manage access to the DiscoveryDocument for dynamic consumer registration."
            },
            {
                "name" : "EndorsementsManager",
                "description" : "The set of service operations that manage access to Endorsements for Hosted Verification."
            },
            {
                "name" : "KeysManager",
                "description" : "The set of service operations that manage access to CryptographicKeys for Signed Verification."
            },
            {
                "name" : "RevocationsManager",
                "description" : "The set of service operations that manage access to RevocationLists for Signed Verification."
            }
        ],
        "securityDefinitions" : {
            "OAuth2CCG" : {
                "type" : "oauth2",
                "description" : "OAuth 2.0 Client Credentials authorization per IMS Security Framework.",
                "flow" : "application",
                "tokenUrl" : "https://provider/token",
                "scopes" : {
                    "https://purl.imsglobal.org/spec/clr/v1p0/scope/delete" : "Grants the app permission to delete your comprehensive learner records on this host.",
                    "https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly" : "Grants the app permission to read your comprehensive learner records on this host.",
                    "https://purl.imsglobal.org/spec/clr/v1p0/scope/replace" : "Grants the app permission to create or replace your comprehensive learner records on this host."
                }
            },
            "OAuth2ACG" : {
                "type" : "oauth2",
                "description" : "OAuth 2.0 Authorization Code Grant authorization per IMS Security Framework.",
                "flow" : "accessCode",
                "authorizationUrl" : "https://provider/authorize",
                "tokenUrl" : "https://provider/token",
                "scopes" : {
                    "https://purl.imsglobal.org/spec/clr/v1p0/scope/delete" : "Grants the app permission to delete your comprehensive learner records on this host.",
                    "https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly" : "Grants the app permission to read your comprehensive learner records on this host.",
                    "https://purl.imsglobal.org/spec/clr/v1p0/scope/replace" : "Grants the app permission to create or replace your comprehensive learner records on this host."
                }
            }
        },
        "paths" : {
            "/assertions/{sourcedId}" : {
                "get" : {
                    "operationId" : "getAssertion",
                    "summary" : "The REST read request message for the getAssertion() API call.",
                    "tags" : [ "AssertionsManager" ],
                    "description" : "Returns the current version of the specified Assertion. This operation is used to verify a Hosted Assertion.",
                    "parameters" : [
                        {
                            "name" : "sourcedId",
                            "in" : "path",
                            "description" : "The unique identifier of the Assertion.",
                            "required" : true,
                            "type" : "string"
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource is returned in the payload.",
                            "schema" : {
                                "$ref" : "#/definitions/GetAssertionPayloadDType"
                            }
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' - The resource was not found.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        }
                    }
                }
            },
            "/clrs" : {
                "get" : {
                    "operationId" : "getClrs",
                    "summary" : "The REST read request message for the getClrs() API call.",
                    "tags" : [ "ClrsManager" ],
                    "description" : "The set of CLRs the user is authorized to access are returned in the payload of the response message.",
                    "parameters" : [
                        {
                            "name" : "limit",
                            "in" : "query",
                            "description" : "The number of results to return.",
                            "required" : false,
                            "type" : "integer",
                            "format" : "int32",
                            "default" : 100,
                            "minimum" : 1,
                            "allowEmptyValue" : false
                        },
                        {
                            "name" : "offset",
                            "in" : "query",
                            "description" : "The index of the first record to return. (zero indexed)",
                            "required" : false,
                            "type" : "integer",
                            "format" : "int32",
                            "minimum" : 0,
                            "allowEmptyValue" : false
                        },
                        {
                            "name" : "since",
                            "in" : "query",
                            "description" : "Retrieve CLRs that were issued after the provided timestamp. Must be an ISO 8601 compatible timestamp with a time zone indicator.",
                            "required" : false,
                            "type" : "string",
                            "format" : "date-time",
                            "allowEmptyValue" : false
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly"
                            ]
                        },
                        {
                            "OAuth2ACG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly"
                            ]
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource is returned in the payload.",
                            "schema" : {
                                "$ref" : "#/definitions/ClrSetDType"
                            },
                            "headers" : {
                                "X-Total-Count" : {
                                    "description" : "The total number of resources that are available to be returned",
                                    "type" : "integer"
                                }
                            }
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "401" : {
                            "description" : "'Unauthorized' - The request requires user authentication.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "403" : {
                            "description" : "'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' - There are no resources behind the URI.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully. The exact error should be explained in the error payload."
                        }
                    }
                },
                "post" : {
                    "operationId" : "postClr",
                    "summary" : "The REST createbp request message for the postClr() API call.",
                    "tags" : [ "ClrsManager" ],
                    "description" : "Create or replace a CLR.",
                    "parameters" : [
                        {
                            "name" : "clrIn",
                            "in" : "body",
                            "description" : "The CLR to be created or replaced.",
                            "required" : true,
                            "schema" : {
                                "$ref" : "#/definitions/PostClrPayloadDType"
                            }
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/replace"
                            ]
                        },
                        {
                            "OAuth2ACG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/replace"
                            ]
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource was successfully replaced.",
                            "schema" : {
                                "$ref" : "#/definitions/PostClrPayloadDType"
                            }
                        },
                        "201" : {
                            "description" : "'Created` - The resource was successfully created.",
                            "schema" : {
                                "$ref" : "#/definitions/PostClrPayloadDType"
                            }
                        },
                        "304" : {
                            "description" : "'Not Modified' - The client can use cached data.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "401" : {
                            "description" : "'Unauthorized' - The request requires user authentication.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "403" : {
                            "description" : "'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' - There is no resource behind the URI.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "405" : {
                            "description" : "'Method Not Allowed' - The provider does not support this operation.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully. The exact error should be explained in the error payload."
                        }
                    }
                }
            },
            "/clrs/{sourcedId}" : {
                "delete" : {
                    "operationId" : "deleteClr",
                    "summary" : "The REST delete request message for the deleteClr() API call.",
                    "tags" : [ "ClrsManager" ],
                    "description" : "Delete a CLR.",
                    "parameters" : [
                        {
                            "name" : "sourcedId",
                            "in" : "path",
                            "description" : "The unique identifier of the CLR to delete.",
                            "required" : true,
                            "type" : "string"
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/delete"
                            ]
                        },
                        {
                            "OAuth2ACG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/delete"
                            ]
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The request succeeded and the resource was deleted.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "202" : {
                            "description" : "'Accepted' - The request was accepted and the resource will be deleted.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "204" : {
                            "description" : "'No Content' - The resource was successfully deleted."
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "401" : {
                            "description" : "'Unauthorized' - The request requires an user authentication.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "403" : {
                            "description" : "'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "404" : {
                            "description" : "'Not found' - There is no resource behind the URI.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "405" : {
                            "description" : "'Method Not Allowed' - The provider does not support this operation.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully. The exact error should be explained in the error payload."
                        }
                    }
                },
                "get" : {
                    "operationId" : "getClr",
                    "summary" : "The REST read request message for the getClr() API call.",
                    "tags" : [ "ClrsManager" ],
                    "description" : "Returns the current version of the specified Clr. This operation is used to verify a Hosted Clr.",
                    "parameters" : [
                        {
                            "name" : "sourcedId",
                            "in" : "path",
                            "description" : "The unique identifier of the Clr.",
                            "required" : true,
                            "type" : "string"
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly"
                            ]
                        },
                        {
                            "OAuth2ACG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly"
                            ]
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource is returned in the payload.",
                            "schema" : {
                                "$ref" : "#/definitions/GetClrPayloadDType"
                            }
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "401" : {
                            "description" : "'Unauthorized' - The request requires user authentication.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "403" : {
                            "description" : "'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' – There is no resource behind the URI.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "410" : {
                            "description" : "'Gone' - Marks the entity as revoked. The response may include the entity body.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully."
                        }
                    }
                }
            },
            "/discovery" : {
                "get" : {
                    "operationId" : "getDiscoveryDocument",
                    "summary" : "The REST read request message for the getDiscoveryDocument() API call.",
                    "tags" : [ "DiscoveryManager" ],
                    "description" : "Returns the DiscoveryDocument if the provider supports dynamic CLR consumer registration.",
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource is returned in the payload.",
                            "schema" : {
                                "$ref" : "#/definitions/DiscoveryDocumentDType"
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' - There is no resource behind the URI.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully."
                        }
                    }
                }
            },
            "/endorsements/{sourcedId}" : {
                "get" : {
                    "operationId" : "getEndorsement",
                    "summary" : "The REST read request message for the getEndorsement() API call.",
                    "tags" : [ "EndorsementsManager" ],
                    "description" : "Returns the current version of the specified Endorsement. This operation is used to verify a Hosted Endorsement.",
                    "parameters" : [
                        {
                            "name" : "sourcedId",
                            "in" : "path",
                            "description" : "The unique identifier of the Endorsement.",
                            "required" : true,
                            "type" : "string"
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource is returned in the payload.",
                            "schema" : {
                                "$ref" : "#/definitions/GetEndorsementPayloadDType"
                            }
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' - The resource was not found.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        }
                    }
                }
            },
            "/keys/{sourcedId}" : {
                "get" : {
                    "operationId" : "getKey",
                    "summary" : "The REST read request message for the getKey() API call.",
                    "tags" : [ "KeysManager" ],
                    "description" : "Returns the current version of the specified CryptographicKey. This operation is used to verify a Signed Assertion, Clr, or Endorsement.",
                    "parameters" : [
                        {
                            "name" : "sourcedId",
                            "in" : "path",
                            "description" : "The unique identifier of the CryptographicKey.",
                            "required" : true,
                            "type" : "string"
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource is returned in the payload.",
                            "schema" : {
                                "$ref" : "#/definitions/GetCryptographicKeyPayloadDType"
                            }
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' - The resource was not found.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        }
                    }
                }
            },
            "/revocations/{sourcedId}" : {
                "get" : {
                    "operationId" : "getRevocationList",
                    "summary" : "The REST read request message for the getRevocationList() API call.",
                    "tags" : [ "RevocationsManager" ],
                    "description" : "Returns the current version of the issuer's RevocationList. This operation is used to verify a Signed Assertion, Clr, or Endorsement.",
                    "parameters" : [
                        {
                            "name" : "sourcedId",
                            "in" : "path",
                            "description" : "The unique identifier of the RevocationList.",
                            "required" : true,
                            "type" : "string"
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource is returned in the payload.",
                            "schema" : {
                                "$ref" : "#/definitions/GetRevocationListPayloadDType"
                            }
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' - The resource was not found.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully.",
                            "schema" : {
                                "$ref" : "#/definitions/imsx_StatusInfoDType"
                            }
                        }
                    }
                }
            }
        },
        "definitions" : {
            "AchievementDType" : {
                "description" : "An accomplishment such as completing a degree, mastering a competency, or course completion that may be asserted about one or more learners.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the Achievement. If the IRI is a URL it must resolve to an Achievement resource.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Achievement'.",
                        "type" : "string"
                    },
                    "achievementType" : {
                        "description" : "A CLR Achievement can represent many different types of achievement from an assessment result to membership. Use 'Achievement' to indicate an achievement not in the list of allowed values.",
                        "type" : "string"
                    },
                    "alignments" : {
                        "description" : "Alignment objects describe an alignment between this achievement and a node in an educational framework.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/AlignmentDType"
                        }
                    },
                    "associations" : {
                        "description" : "Associations between this achievement and other achievements.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/AssociationDType"
                        }
                    },
                    "creditsAvailable" : {
                        "description" : "Model Primitive Datatype = Float. Credit hours associated with this entity, or credit hours possible. For example '3.0'.",
                        "type" : "number",
                        "format" : "float"
                    },
                    "description" : {
                        "description" : "Model Primitive Datatype = String. A short description of the achievement. May be the same as name if no description is available.",
                        "type" : "string"
                    },
                    "endorsements" : {
                        "description" : "Allows endorsers to make specific claims about the Achievement.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/EndorsementDType"
                        }
                    },
                    "humanCode" : {
                        "description" : "Model Primitive Datatype = String. The code, generally human readable, associated with an achievement.",
                        "type" : "string"
                    },
                    "identifiers" : {
                        "description" : "A set of System Identifiers that represent other identifiers for this Achievement.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/SystemIdentifierDType"
                        }
                    },
                    "name" : {
                        "description" : "Model Primitive Datatype = String. The name of the achievement.",
                        "type" : "string"
                    },
                    "fieldOfStudy" : {
                        "description" : "Model Primitive Datatype = String. Category, subject, area of study,  discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology. ",
                        "type" : "string"
                    },
                    "image" : {
                        "description" : "Model Primitive Datatype = NormalizedString. IRI of an image representing the achievement. May be a Data URI or the URL where the image may be found.",
                        "type" : "string"
                    },
                    "issuer" : {
                        "$ref" : "#/definitions/ProfileDType"
                    },
                    "level" : {
                        "description" : "Model Primitive Datatype = String. Text that describes the level of achievement apart from how the achievement was performed or demonstrated. Examples would include 'Level 1', 'Level 2', 'Level 3', or 'Bachelors', 'Masters', 'Doctoral'.",
                        "type" : "string"
                    },
                    "requirement" : {
                        "$ref" : "#/definitions/CriteriaDType"
                    },
                    "resultDescriptions" : {
                        "description" : "The set of result descriptions that may be asserted as results with this achievement.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ResultDescriptionDType"
                        }
                    },
                    "signedEndorsements" : {
                        "description" : "Model Primitive Datatype = String. Signed endorsements in JWS Compact Serialization format.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string",
                            "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                        }
                    },
                    "specialization" : {
                        "description" : "Model Primitive Datatype = String. Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include Entrepreneurship, Technical Communication, and Finance.",
                        "type" : "string"
                    },
                    "tags" : {
                        "description" : "Model Primitive Datatype = String. Tags that describe the type of achievement.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string"
                        }
                    }
                },
                "required" : [ "id","name","issuer" ],
                "additionalProperties" : true
            },
            "AddressDType" : {
                "description" : "Based on schema.org Address object.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the Address.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Address'.",
                        "type" : "string"
                    },
                    "addressCountry" : {
                        "description" : "Model Primitive Datatype = String. The country. For example, USA. You can also provide the two-letter ISO 3166-1 alpha-2 country code.",
                        "type" : "string"
                    },
                    "addressLocality" : {
                        "description" : "Model Primitive Datatype = String. The locality. For example, Mountain View.",
                        "type" : "string"
                    },
                    "addressRegion" : {
                        "description" : "Model Primitive Datatype = String. The region. For example, CA.",
                        "type" : "string"
                    },
                    "postalCode" : {
                        "description" : "Model Primitive Datatype = String. The postal code. For example, 94043.",
                        "type" : "string"
                    },
                    "postOfficeBoxNumber" : {
                        "description" : "Model Primitive Datatype = String. The post office box number for PO box addresses.",
                        "type" : "string"
                    },
                    "streetAddress" : {
                        "description" : "Model Primitive Datatype = String. The street address. For example, 1600 Amphitheatre Pkwy.",
                        "type" : "string"
                    }
                },
                "additionalProperties" : true
            },
            "AlignmentDType" : {
                "description" : "Alignment is based on the schema.org AlignmentObject.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the object.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this entity. Normally 'Alignment'.",
                        "type" : "string"
                    },
                    "targetCode" : {
                        "description" : "Model Primitive Datatype = String. If applicable, a locally unique string identifier that identifies the alignment target within its framework.",
                        "type" : "string"
                    },
                    "targetDescription" : {
                        "description" : "Model Primitive Datatype = String. The description of a node in an established educational framework.",
                        "type" : "string"
                    },
                    "targetName" : {
                        "description" : "Model Primitive Datatype = String. The name of a node in an established educational framework.",
                        "type" : "string"
                    },
                    "targetFramework" : {
                        "description" : "Model Primitive Datatype = String. The name of the framework to which the resource being described is aligned.",
                        "type" : "string"
                    },
                    "targetType" : {
                        "description" : "The type of the alignment target node. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.",
                        "type" : "string"
                    },
                    "targetUrl" : {
                        "description" : "Model Primitive Datatype = AnyURI. The URL of a node in an established educational framework. When the alignment is to a CASE framework and the CASE Service support the CASE JSON-LD binding, the URL should be the 'uri' of the node document, otherwise the URL should be the CASE Service endpoint URL that returns the node JSON.",
                        "type" : "string",
                        "format" : "uri"
                    }
                },
                "required" : [ "targetName","targetUrl" ],
                "additionalProperties" : true
            },
            "ArtifactDType" : {
                "description" : "An artifact that is part of an evidence object.",
                "type" : "object",
                "properties" : {
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of the object. Normally 'Artifact'.",
                        "type" : "string"
                    },
                    "description" : {
                        "description" : "Model Primitive Datatype = String. A description of the artifact.",
                        "type" : "string"
                    },
                    "name" : {
                        "description" : "Model Primitive Datatype = String. The name of the artifact.",
                        "type" : "string"
                    },
                    "url" : {
                        "description" : "Model Primitive Datatype = NormalizedString. IRI of the artifact. May be a Data URI or the URL where the artifact may be found.",
                        "type" : "string"
                    }
                },
                "additionalProperties" : true
            },
            "AssertionDType" : {
                "description" : "Assertions are representations of an Achievement awarded to a Learner.  It is used to share information about the Achievement Assertion, such as a result and verification method. Assertions are packaged for transmission as JSON objects with a set of mandatory and optional properties.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the Assertion. If the IRI is a URL it must resolve to an Assertion resource. If the Assertion is verified using Hosted verification, the IRI must be a URL.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Assertion'.",
                        "type" : "string"
                    },
                    "achievement" : {
                        "$ref" : "#/definitions/AchievementDType"
                    },
                    "activityEndDate" : {
                        "description" : "Model Primitive Datatype = DateTime. If present, end date for the activity.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "activityStartDate" : {
                        "description" : "Model Primitive Datatype = DateTime. If present, start date for the activity.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "creditsEarned" : {
                        "description" : "Model Primitive Datatype = Float. The number of credits earned, generally in semester or quarter credit hours.  This field correlates with the Achievement creditsAvailable field.",
                        "type" : "number",
                        "format" : "float"
                    },
                    "endorsements" : {
                        "description" : "Allows endorsers to make specific claims about the assertion.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/EndorsementDType"
                        }
                    },
                    "evidence" : {
                        "description" : "Evidence describing the work that the recipient did to earn the achievement. This can be a webpage that links out to other pages if linking directly to the work is infeasible.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/EvidenceDType"
                        }
                    },
                    "expires" : {
                        "description" : "Model Primitive Datatype = DateTime. If the achievement has some notion of expiry, this indicates a timestamp when an assertion should no longer be considered valid. After this time, the assertion should be considered expired.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "image" : {
                        "description" : "Model Primitive Datatype = NormalizedString. IRI of an image representing the assertion. May be a Data URI or the URL where the image may be found.",
                        "type" : "string"
                    },
                    "issuedOn" : {
                        "description" : "Model Primitive Datatype = DateTime. Timestamp of when the achievement was awarded. Required unless the assertion is revoked.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "licenseNumber" : {
                        "description" : "Model Primitive Datatype = String. The license number that was issued with this assertion.",
                        "type" : "string"
                    },
                    "narrative" : {
                        "description" : "Model Primitive Datatype = String. A narrative that describes the connection between multiple pieces of evidence. Likely only present if evidence is a multi-value array. Markdown allowed.",
                        "type" : "string"
                    },
                    "recipient" : {
                        "$ref" : "#/definitions/IdentityDType"
                    },
                    "results" : {
                        "description" : "The set of results being asserted.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ResultDType"
                        }
                    },
                    "revocationReason" : {
                        "description" : "Model Primitive Datatype = String. Optional published reason for revocation, if revoked.",
                        "type" : "string"
                    },
                    "revoked" : {
                        "description" : "Model Primitive Datatype = Boolean. Defaults to false if this assertion is not referenced in a RevocationList. If revoked is true, only revoked and id are required properties, and many issuers strip a hosted assertion down to only those properties when revoked.",
                        "type" : "boolean"
                    },
                    "role" : {
                        "description" : "Model Primitive Datatype = String. Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc.",
                        "type" : "string"
                    },
                    "signedEndorsements" : {
                        "description" : "Model Primitive Datatype = String. Signed endorsements in JWS Compact Serialization format.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string",
                            "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                        }
                    },
                    "source" : {
                        "$ref" : "#/definitions/ProfileDType"
                    },
                    "term" : {
                        "description" : "Model Primitive Datatype = String. The academic term in which this assertion was achieved.",
                        "type" : "string"
                    },
                    "verification" : {
                        "$ref" : "#/definitions/VerificationDType"
                    }
                },
                "required" : [ "id" ],
                "additionalProperties" : true
            },
            "AssociationDType" : {
                "description" : "Association is based on the CASE AssociationLink object. An Association associates (relates) one Achievement with another Achievement.",
                "type" : "object",
                "properties" : {
                    "associationType" : {
                        "description" : "The type of association. This uses an enumerated vocabulary.",
                        "type" : "string",
                        "enum" : [ "exactMatchOf","exemplar","hasSkillLevel","isChildOf","isParentOf","isPartOf","isPeerOf","isRelatedTo","precedes","replacedBy" ]
                    },
                    "targetId" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The '@id' of another achievement, or target of the association.",
                        "type" : "string"
                    },
                    "title" : {
                        "description" : "Model Primitive Datatype = String. A human readable title for the associated achievement.",
                        "type" : "string"
                    }
                },
                "required" : [ "associationType","targetId","title" ],
                "additionalProperties" : true
            },
            "ClrDType" : {
                "description" : "A collection of assertions for a single person reported by a single publisher.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the CLR. If the IRI is a URL is must resolve to a CLR resource and conform to the getClr endpoint format. If the CLR is verified using Hosted verification, the IRI must be a URL.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Clr'.",
                        "type" : "string"
                    },
                    "achievements" : {
                        "description" : "Array of achievements that are related directly or indirectly through associations with the asserted achievements in the CLR. Primarily used to represent hierarchical pathways. Asserted achievements may appear in both this array and in the achievement assertion. If asserted achievements do appear in both places, they MUST match exactly.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/AchievementDType"
                        }
                    },
                    "assertions" : {
                        "description" : "The learner's asserted achievements.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/AssertionDType"
                        }
                    },
                    "endorsements" : {
                        "description" : "Allows endorsers to make specific claims about the CLR, or any assertion, achievement, or profile referenced in the CLR.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/EndorsementDType"
                        }
                    },
                    "issuedOn" : {
                        "description" : "Model Primitive Datatype = DateTime. Timestamp of when the CLR was published.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "learner" : {
                        "$ref" : "#/definitions/ProfileDType"
                    },
                    "name" : {
                        "description" : "Model Primitive Datatype = String. Optional name of the CLR.",
                        "type" : "string"
                    },
                    "partial" : {
                        "description" : "Model Primitive Datatype = Boolean. True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.",
                        "type" : "boolean"
                    },
                    "publisher" : {
                        "$ref" : "#/definitions/ProfileDType"
                    },
                    "revocationReason" : {
                        "description" : "Model Primitive Datatype = String. If revoked, optional reason for revocation.",
                        "type" : "string"
                    },
                    "revoked" : {
                        "description" : "Model Primitive Datatype = Boolean. If True the CLR is revoked.",
                        "type" : "boolean"
                    },
                    "signedAssertions" : {
                        "description" : "Model Primitive Datatype = String. Signed assertions in JWS Compact Serialization format.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string",
                            "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                        }
                    },
                    "signedEndorsements" : {
                        "description" : "Model Primitive Datatype = String. Signed endorsements of the CLR or any Achievement, Assertion, or Profile in the CLR; in JWS Compact Serialization format.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string",
                            "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                        }
                    },
                    "verification" : {
                        "$ref" : "#/definitions/VerificationDType"
                    }
                },
                "required" : [ "id","issuedOn","learner","publisher" ],
                "additionalProperties" : true
            },
            "ClrSetDType" : {
                "description" : "A set of CLRs.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the ClrSet.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'ClrSet'.",
                        "type" : "string"
                    },
                    "clrs" : {
                        "description" : "A set of Clrs",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ClrDType"
                        }
                    },
                    "signedClrs" : {
                        "description" : "Model Primitive Datatype = String. A set of Clrs in JWS Compact Serialization format.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string",
                            "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                        }
                    }
                },
                "additionalProperties" : false
            },
            "CriteriaDType" : {
                "description" : "Descriptive metadata about the achievements necessary to be recognized with an Assertion of a particular AchievementType. This data is added to the AchievementType so that it may be rendered when that AchievementType is displayed, instead of simply a link to human-readable criteria external to the Achievement Assertion. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = AnyURI. The URI of a webpage that describes the criteria for the Achievement in a human-readable format.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Criteria'.",
                        "type" : "string"
                    },
                    "narrative" : {
                        "description" : "Model Primitive Datatype = String. A narrative of what is needed to earn the achievement. Markdown allowed.",
                        "type" : "string"
                    }
                },
                "additionalProperties" : true
            },
            "CryptographicKeyDType" : {
                "description" : "Based on the Key class from the W3C Web Payments Community Group Security Vocabulary. A CryptographicKey document identifies and describes a public key used to verify signed Assertions.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The URI of the CryptographicKey document. Used during signed verification.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'CryptographicKey'.",
                        "type" : "string"
                    },
                    "owner" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The identifier for the Profile that owns this PUBLIC KEY and the PRIVATE KEY used to sign the assertion or endorsement.",
                        "type" : "string"
                    },
                    "publicKeyPem" : {
                        "description" : "Model Primitive Datatype = String. The PUBLIC KEY in PEM format corresponding to the PRIVATE KEY used by the owner to sign the assertion or endorsement. The PEM key encoding is a widely-used method to express public keys, compatible with almost every Secure Sockets Layer library implementation.",
                        "type" : "string"
                    }
                },
                "required" : [ "id","owner","publicKeyPem" ],
                "additionalProperties" : true
            },
            "DiscoveryDocumentDType" : {
                "description" : "Configuration information about the provider implementation.",
                "type" : "object",
                "properties" : {
                    "authorizationUrl" : {
                        "description" : "Model Primitive Datatype = AnyURI. A fully qualifed URL to the provider's OAuth 2.0 Authorization endpoint.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "image" : {
                        "description" : "Model Primitive Datatype = NormalizedString. An image representing the provider. May be a Data URI or the URL where the image may be found.",
                        "type" : "string"
                    },
                    "name" : {
                        "description" : "Model Primitive Datatype = String. The user-facing name of the platform providing CLR services.",
                        "type" : "string"
                    },
                    "privacyPolicyUrl" : {
                        "description" : "Model Primitive Datatype = AnyURI. A fully qualified URL to the provider's privacy policy.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "registrationUrl" : {
                        "description" : "Model Primitive Datatype = AnyURI. A fully qualified URL to the provider's OAuth 2.0 Registration endpoint.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "scopesOffered" : {
                        "description" : "Model Primitive Datatype = AnyURI. An array of OAuth 2.0 Scopes supported by the provider.",
                        "type" : "array",
                        "minItems" : 1,
                        "items" : {
                            "type" : "string",
                            "format" : "uri"
                        }
                    },
                    "termsOfServiceUrl" : {
                        "description" : "Model Primitive Datatype = AnyURI. A fully qualified URL to the provider's terms of service.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "tokenUrl" : {
                        "description" : "Model Primitive Datatype = AnyURI. A fully qualified URL to the provider's OAuth 2.0 Token endpoint.",
                        "type" : "string",
                        "format" : "uri"
                    }
                },
                "required" : [ "authorizationUrl","name","privacyPolicyUrl","registrationUrl","scopesOffered","termsOfServiceUrl","tokenUrl" ],
                "additionalProperties" : false
            },
            "EndorsementDType" : {
                "description" : "An endorsement claim.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the Endorsement. If this Endorsement will be verified using Hosted verification, the value should be the URL of the hosted version of the Endorsement.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this entity. Normally 'Endorsement'.",
                        "type" : "string"
                    },
                    "claim" : {
                        "$ref" : "#/definitions/EndorsementClaimDType"
                    },
                    "issuedOn" : {
                        "description" : "Model Primitive Datatype = DateTime. Timestamp of when the endorsement was published.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "issuer" : {
                        "$ref" : "#/definitions/EndorsementProfileDType"
                    },
                    "revocationReason" : {
                        "description" : "Model Primitive Datatype = String. If revoked, optional reason for revocation.",
                        "type" : "string"
                    },
                    "revoked" : {
                        "description" : "Model Primitive Datatype = Boolean. If True the endorsement is revoked.",
                        "type" : "boolean"
                    },
                    "verification" : {
                        "$ref" : "#/definitions/VerificationDType"
                    }
                },
                "required" : [ "id","claim","issuedOn","issuer","verification" ],
                "additionalProperties" : true
            },
            "EndorsementClaimDType" : {
                "description" : "An entity, identified by an id and additional properties that the endorser would like to claim about that entity.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The 'id' of the Profile, Achievement, Assertion, or CLR being endorsed.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this entity. Normally 'EndorsementClaim'.",
                        "type" : "string"
                    },
                    "endorsementComment" : {
                        "description" : "Model Primitive Datatype = String. An endorser's comment about the quality or fitness of the endorsed entity. Markdown allowed.",
                        "type" : "string"
                    }
                },
                "required" : [ "id" ],
                "additionalProperties" : true
            },
            "EndorsementProfileDType" : {
                "description" : "A Profile is a collection of information that describes the person or organization using Comprehensive Learner Record (CLR). Publishers, learners, and issuers must be represented as profiles. Recipients, endorsers, or other entities may also be represented using this vocabulary. An EndorsementProfile cannot have endorsements.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the Profile.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this entity. Normally 'Profile'. Unlike the Profile object, the EndorsementProfile object does not have an 'endorsements' property.",
                        "type" : "string"
                    },
                    "additionalName" : {
                        "description" : "Model Primitive Datatype = String. An additional name for a person, can be used for a middle name.",
                        "type" : "string"
                    },
                    "address" : {
                        "$ref" : "#/definitions/AddressDType"
                    },
                    "description" : {
                        "description" : "Model Primitive Datatype = String. A short description of the individual or organization.",
                        "type" : "string"
                    },
                    "email" : {
                        "description" : "Model Primitive Datatype = String. A contact email address for the individual or organization.",
                        "type" : "string"
                    },
                    "familyName" : {
                        "description" : "Model Primitive Datatype = String. Family name of a person. In the U.S., the last name of a person.",
                        "type" : "string"
                    },
                    "givenName" : {
                        "description" : "Model Primitive Datatype = String. Given name of a person. In the U.S., the first name of a person.",
                        "type" : "string"
                    },
                    "identifiers" : {
                        "description" : "A set of System Identifiers that represent other identifiers for this Profile.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/SystemIdentifierDType"
                        }
                    },
                    "image" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Image representing the individual or organization.",
                        "type" : "string"
                    },
                    "name" : {
                        "description" : "Model Primitive Datatype = String. The full name of the individual or organization.",
                        "type" : "string"
                    },
                    "official" : {
                        "description" : "Model Primitive Datatype = String. The name of the authorized official for the Issuer.",
                        "type" : "string"
                    },
                    "publicKey" : {
                        "$ref" : "#/definitions/CryptographicKeyDType"
                    },
                    "revocationList" : {
                        "description" : "Model Primitive Datatype = AnyURI. The URL of the Revocation List document used for marking revocation of signed Assertions, CLRs, and Endorsements. Required for issuer profiles.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "sourcedId" : {
                        "description" : "Model Primitive Datatype = String. The individual's unique 'sourcedId' value, which is used for providing interoperability with IMS Learning Information Services (LIS).",
                        "type" : "string"
                    },
                    "studentId" : {
                        "description" : "Model Primitive Datatype = String. An institution's student identifier for the person. This is frequently issued through a Student Information System.",
                        "type" : "string"
                    },
                    "telephone" : {
                        "description" : "Model Primitive Datatype = String. Primary phone number for the individual or organization.",
                        "type" : "string"
                    },
                    "url" : {
                        "description" : "Model Primitive Datatype = AnyURI. Web resource that uniquely represents or belongs to the individual. This may be a resource about the individual, hosting provided by the institution to the individual, or an web resource independently controlled by the individual.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "verification" : {
                        "$ref" : "#/definitions/VerificationDType"
                    }
                },
                "required" : [ "id" ],
                "additionalProperties" : true
            },
            "EvidenceDType" : {
                "description" : "One or more artifacts that represent supporting evidence for the record. Examples include text, media, websites, etc.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = AnyURI. The URI of a webpage presenting evidence of achievement.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this entity. Normally 'Evidence'.",
                        "type" : "string"
                    },
                    "artifacts" : {
                        "description" : "Artifacts that are part of the evidence.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ArtifactDType"
                        }
                    },
                    "audience" : {
                        "description" : "Model Primitive Datatype = String. A description of the intended audience for a piece of evidence.",
                        "type" : "string"
                    },
                    "description" : {
                        "description" : "Model Primitive Datatype = String. A longer description of the evidence.",
                        "type" : "string"
                    },
                    "genre" : {
                        "description" : "Model Primitive Datatype = String. A string that describes the type of evidence. For example, Poetry, Prose, Film.",
                        "type" : "string"
                    },
                    "name" : {
                        "description" : "Model Primitive Datatype = String. The name of the evidence.",
                        "type" : "string"
                    },
                    "narrative" : {
                        "description" : "Model Primitive Datatype = String. A narrative that describes the evidence and process of achievement that led to an assertion. Markdown allowed.",
                        "type" : "string"
                    }
                },
                "required" : [ "name" ],
                "additionalProperties" : true
            },
            "GetAssertionPayloadDType" : {
                "description" : "Payload for the 'getAssertion' operation.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the Assertion. If the IRI is a URL it must resolve to an Assertion resource. If the Assertion is verified using Hosted verification, the IRI must be a URL.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Assertion'.",
                        "type" : "string"
                    },
                    "achievement" : {
                        "$ref" : "#/definitions/AchievementDType"
                    },
                    "activityEndDate" : {
                        "description" : "Model Primitive Datatype = DateTime. If present, end date for the activity.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "activityStartDate" : {
                        "description" : "Model Primitive Datatype = DateTime. If present, start date for the activity.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "creditsEarned" : {
                        "description" : "Model Primitive Datatype = Float. The number of credits earned, generally in semester or quarter credit hours.  This field correlates with the Achievement creditsAvailable field.",
                        "type" : "number",
                        "format" : "float"
                    },
                    "endorsements" : {
                        "description" : "Allows endorsers to make specific claims about the assertion.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/EndorsementDType"
                        }
                    },
                    "evidence" : {
                        "description" : "Evidence describing the work that the recipient did to earn the achievement. This can be a webpage that links out to other pages if linking directly to the work is infeasible.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/EvidenceDType"
                        }
                    },
                    "expires" : {
                        "description" : "Model Primitive Datatype = DateTime. If the achievement has some notion of expiry, this indicates a timestamp when an assertion should no longer be considered valid. After this time, the assertion should be considered expired.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "image" : {
                        "description" : "Model Primitive Datatype = NormalizedString. IRI of an image representing the assertion. May be a Data URI or the URL where the image may be found.",
                        "type" : "string"
                    },
                    "issuedOn" : {
                        "description" : "Model Primitive Datatype = DateTime. Timestamp of when the achievement was awarded. Required unless the assertion is revoked.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "licenseNumber" : {
                        "description" : "Model Primitive Datatype = String. The license number that was issued with this assertion.",
                        "type" : "string"
                    },
                    "narrative" : {
                        "description" : "Model Primitive Datatype = String. A narrative that describes the connection between multiple pieces of evidence. Likely only present if evidence is a multi-value array. Markdown allowed.",
                        "type" : "string"
                    },
                    "recipient" : {
                        "$ref" : "#/definitions/IdentityDType"
                    },
                    "results" : {
                        "description" : "The set of results being asserted.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/ResultDType"
                        }
                    },
                    "revocationReason" : {
                        "description" : "Model Primitive Datatype = String. Optional published reason for revocation, if revoked.",
                        "type" : "string"
                    },
                    "revoked" : {
                        "description" : "Model Primitive Datatype = Boolean. Defaults to false if this assertion is not referenced in a RevocationList. If revoked is true, only revoked and id are required properties, and many issuers strip a hosted assertion down to only those properties when revoked.",
                        "type" : "boolean"
                    },
                    "role" : {
                        "description" : "Model Primitive Datatype = String. Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc.",
                        "type" : "string"
                    },
                    "signedEndorsements" : {
                        "description" : "Model Primitive Datatype = String. Signed endorsements in JWS Compact Serialization format.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string",
                            "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                        }
                    },
                    "source" : {
                        "$ref" : "#/definitions/ProfileDType"
                    },
                    "term" : {
                        "description" : "Model Primitive Datatype = String. The academic term in which this assertion was achieved.",
                        "type" : "string"
                    },
                    "verification" : {
                        "$ref" : "#/definitions/VerificationDType"
                    },
                    "@context" : {
                        "description" : "Model Primitive Datatype = String. The JSON-LD @context.",
                        "type" : "string"
                    }
                },
                "required" : [ "id","@context" ],
                "additionalProperties" : false
            },
            "GetClrPayloadDType" : {
                "description" : "Payload for the 'getClr' operation.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the CLR. If the IRI is a URL is must resolve to a CLR resource and conform to the getClr endpoint format. If the CLR is verified using Hosted verification, the IRI must be a URL.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Clr'.",
                        "type" : "string"
                    },
                    "achievements" : {
                        "description" : "Array of achievements that are related directly or indirectly through associations with the asserted achievements in the CLR. Primarily used to represent hierarchical pathways. Asserted achievements may appear in both this array and in the achievement assertion. If asserted achievements do appear in both places, they MUST match exactly.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/AchievementDType"
                        }
                    },
                    "assertions" : {
                        "description" : "The learner's asserted achievements.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/AssertionDType"
                        }
                    },
                    "endorsements" : {
                        "description" : "Allows endorsers to make specific claims about the CLR, or any assertion, achievement, or profile referenced in the CLR.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/EndorsementDType"
                        }
                    },
                    "issuedOn" : {
                        "description" : "Model Primitive Datatype = DateTime. Timestamp of when the CLR was published.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "learner" : {
                        "$ref" : "#/definitions/ProfileDType"
                    },
                    "name" : {
                        "description" : "Model Primitive Datatype = String. Optional name of the CLR.",
                        "type" : "string"
                    },
                    "partial" : {
                        "description" : "Model Primitive Datatype = Boolean. True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.",
                        "type" : "boolean"
                    },
                    "publisher" : {
                        "$ref" : "#/definitions/ProfileDType"
                    },
                    "revocationReason" : {
                        "description" : "Model Primitive Datatype = String. If revoked, optional reason for revocation.",
                        "type" : "string"
                    },
                    "revoked" : {
                        "description" : "Model Primitive Datatype = Boolean. If True the CLR is revoked.",
                        "type" : "boolean"
                    },
                    "signedAssertions" : {
                        "description" : "Model Primitive Datatype = String. Signed assertions in JWS Compact Serialization format.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string",
                            "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                        }
                    },
                    "signedEndorsements" : {
                        "description" : "Model Primitive Datatype = String. Signed endorsements of the CLR or any Achievement, Assertion, or Profile in the CLR; in JWS Compact Serialization format.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string",
                            "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                        }
                    },
                    "verification" : {
                        "$ref" : "#/definitions/VerificationDType"
                    },
                    "@context" : {
                        "description" : "Model Primitive Datatype = String. The JSON-LD @context.",
                        "type" : "string"
                    }
                },
                "required" : [ "id","issuedOn","learner","publisher","@context" ],
                "additionalProperties" : false
            },
            "GetCryptographicKeyPayloadDType" : {
                "description" : "Payload for the 'getKey' operation.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The URI of the CryptographicKey document. Used during signed verification.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'CryptographicKey'.",
                        "type" : "string"
                    },
                    "owner" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The identifier for the Profile that owns this PUBLIC KEY and the PRIVATE KEY used to sign the assertion or endorsement.",
                        "type" : "string"
                    },
                    "publicKeyPem" : {
                        "description" : "Model Primitive Datatype = String. The PUBLIC KEY in PEM format corresponding to the PRIVATE KEY used by the owner to sign the assertion or endorsement. The PEM key encoding is a widely-used method to express public keys, compatible with almost every Secure Sockets Layer library implementation.",
                        "type" : "string"
                    },
                    "@context" : {
                        "description" : "Model Primitive Datatype = String. The JSON-LD @context.",
                        "type" : "string"
                    }
                },
                "required" : [ "id","owner","publicKeyPem","@context" ],
                "additionalProperties" : false
            },
            "GetEndorsementPayloadDType" : {
                "description" : "Payload for the 'getEndorsement' operation.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the Endorsement. If this Endorsement will be verified using Hosted verification, the value should be the URL of the hosted version of the Endorsement.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this entity. Normally 'Endorsement'.",
                        "type" : "string"
                    },
                    "claim" : {
                        "$ref" : "#/definitions/EndorsementClaimDType"
                    },
                    "issuedOn" : {
                        "description" : "Model Primitive Datatype = DateTime. Timestamp of when the endorsement was published.",
                        "type" : "string",
                        "format" : "date-time"
                    },
                    "issuer" : {
                        "$ref" : "#/definitions/EndorsementProfileDType"
                    },
                    "revocationReason" : {
                        "description" : "Model Primitive Datatype = String. If revoked, optional reason for revocation.",
                        "type" : "string"
                    },
                    "revoked" : {
                        "description" : "Model Primitive Datatype = Boolean. If True the endorsement is revoked.",
                        "type" : "boolean"
                    },
                    "verification" : {
                        "$ref" : "#/definitions/VerificationDType"
                    },
                    "@context" : {
                        "description" : "Model Primitive Datatype = String. The JSON-LD @context.",
                        "type" : "string"
                    }
                },
                "required" : [ "id","claim","issuedOn","issuer","verification","@context" ],
                "additionalProperties" : false
            },
            "GetRevocationListPayloadDType" : {
                "description" : "Payload for the 'getRevocationList' operation.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = AnyURI. The URI of the RevocationList document. Used during Signed verification.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this entity. Normally 'RevocationList'.",
                        "type" : "string"
                    },
                    "issuer" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The id of the Issuer.",
                        "type" : "string"
                    },
                    "revokedAssertions" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The ids of revoked Assertions, Clrs, and Endorsements.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string"
                        }
                    },
                    "@context" : {
                        "description" : "Model Primitive Datatype = String. The JSON-LD @context.",
                        "type" : "string"
                    }
                },
                "required" : [ "id","issuer","@context" ],
                "additionalProperties" : false
            },
            "IdentityDType" : {
                "description" : "A collection of information about the recipient of an achievement assertion.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the Identity.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The type should identify the property by which the recipient of an Assertion is identified. This value should be an IRI mapped in the present context. For example, 'id' indicates that the identity property value is the id of the recipient's profile.",
                        "type" : "string"
                    },
                    "identity" : {
                        "description" : "Model Primitive Datatype = String. Either the hash of the identity or the plaintext value. If it's possible that the plaintext transmission and storage of the identity value would leak personally identifiable information where there is an expectation of privacy, it is strongly recommended that an IdentityHash be used.",
                        "type" : "string"
                    },
                    "hashed" : {
                        "description" : "Model Primitive Datatype = Boolean. Whether or not the identity value is hashed.",
                        "type" : "boolean"
                    },
                    "salt" : {
                        "description" : "Model Primitive Datatype = String. If the recipient is hashed, this should contain the string used to salt the hash. If this value is not provided, it should be assumed that the hash was not salted.",
                        "type" : "string"
                    }
                },
                "required" : [ "type","identity","hashed" ],
                "additionalProperties" : true
            },
            "PostClrPayloadDType" : {
                "description" : "Payload for the 'postClr' operation. Only one format (signed or unsigned) is allowed.",
                "type" : "object",
                "properties" : {
                    "clr" : {
                        "$ref" : "#/definitions/ClrDType"
                    },
                    "signedClr" : {
                        "description" : "Model Primitive Datatype = String. The signed Clr in JWS Compact Serialization format.",
                        "type" : "string",
                        "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    }
                },
                "additionalProperties" : false
            },
            "ProfileDType" : {
                "description" : "A Profile is a collection of information that describes the person or organization using Comprehensive Learner Record (CLR). Publishers, learners, and issuers must be represented as profiles. Recipients, endorsers, or other entities may also be represented using this vocabulary.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the Learner, Publisher, and Issuer Profile. If the IRI is a URL it must resolve to a Profile resource. The Assertion Recipient is identified by reference to the Learner's Profile via the id, email, url, telephone, sourcedId, or studentId property.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Profile'.",
                        "type" : "string"
                    },
                    "address" : {
                        "$ref" : "#/definitions/AddressDType"
                    },
                    "additionalName" : {
                        "description" : "Model Primitive Datatype = String. An additional name for a person, can be used for a middle name.",
                        "type" : "string"
                    },
                    "birthDate" : {
                        "description" : "Model Primitive Datatype = Date. Birthdate of the person.",
                        "type" : "string",
                        "format" : "date"
                    },
                    "description" : {
                        "description" : "Model Primitive Datatype = String. A short description of the individual or organization.",
                        "type" : "string"
                    },
                    "email" : {
                        "description" : "Model Primitive Datatype = String. A contact email address for the individual or organization.",
                        "type" : "string"
                    },
                    "endorsements" : {
                        "description" : "Allows endorsers to make specific claims about the individual or organization represented by this profile.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/EndorsementDType"
                        }
                    },
                    "familyName" : {
                        "description" : "Model Primitive Datatype = String. Family name of a person. In the U.S., the last name of a person.",
                        "type" : "string"
                    },
                    "givenName" : {
                        "description" : "Model Primitive Datatype = String. Given name of a person. In the U.S., the first name of a person.",
                        "type" : "string"
                    },
                    "identifiers" : {
                        "description" : "A set of System Identifiers that represent other identifiers for this Profile.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/SystemIdentifierDType"
                        }
                    },
                    "image" : {
                        "description" : "Model Primitive Datatype = NormalizedString. IRI of an image representing the individual or organization. May be a DATA URI or the URL where the image may be found.",
                        "type" : "string"
                    },
                    "name" : {
                        "description" : "Model Primitive Datatype = String. The full name of the individual or organization.",
                        "type" : "string"
                    },
                    "official" : {
                        "description" : "Model Primitive Datatype = String. The name of the authorized official for the Issuer.",
                        "type" : "string"
                    },
                    "parentOrg" : {
                        "$ref" : "#/definitions/ProfileDType"
                    },
                    "publicKey" : {
                        "$ref" : "#/definitions/CryptographicKeyDType"
                    },
                    "revocationList" : {
                        "description" : "Model Primitive Datatype = AnyURI. The URL of the Revocation List document used for marking revocation of signed Assertions, CLRs, and Endorsements. Required for issuer profiles.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "signedEndorsements" : {
                        "description" : "Model Primitive Datatype = String. Signed endorsements in JWS Compact Serialization format.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string",
                            "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                        }
                    },
                    "sourcedId" : {
                        "description" : "Model Primitive Datatype = String. The individual's or organization's unique 'sourcedId' value, which is used for providing interoperability with other identity systems.",
                        "type" : "string"
                    },
                    "studentId" : {
                        "description" : "Model Primitive Datatype = String. An institution's student identifier for the person. This is frequently issued through a Student Information System.",
                        "type" : "string"
                    },
                    "telephone" : {
                        "description" : "Model Primitive Datatype = String. Primary phone number for the individual or organization.",
                        "type" : "string"
                    },
                    "url" : {
                        "description" : "Model Primitive Datatype = AnyURI. Web resource that uniquely represents or belongs to the individual. This may be a resource about the individual, hosting provided by the institution to the individual, or an web resource independently controlled by the individual.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "verification" : {
                        "$ref" : "#/definitions/VerificationDType"
                    }
                },
                "required" : [ "id" ],
                "additionalProperties" : true
            },
            "ResultDType" : {
                "description" : "Describes a result of an achievement.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the object.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Result'.",
                        "type" : "string"
                    },
                    "achievedLevel" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The id of the RubricCriterionLevel achieved.",
                        "type" : "string"
                    },
                    "alignments" : {
                        "description" : "The alignments between this result and nodes in external frameworks. This set of alignments are in addition to the set of alignments defined in the corresponding ResultDescription object.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/AlignmentDType"
                        }
                    },
                    "resultDescription" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The id of the ResultDescription describing this result.",
                        "type" : "string"
                    },
                    "status" : {
                        "description" : "The status of the achievement. Required if 'ResultType' is 'Status'.",
                        "type" : "string",
                        "enum" : [ "Completed","Enrolled","Failed","InProgress","OnHold","Withdrew" ]
                    },
                    "value" : {
                        "description" : "Model Primitive Datatype = String. A grade or value representing the result of the performance, or demonstration, of the achievement.  For example, 'A' if the recipient received a grade of A in the class. ",
                        "type" : "string"
                    }
                },
                "required" : [ "resultDescription" ],
                "additionalProperties" : true
            },
            "ResultDescriptionDType" : {
                "description" : "Describes a possible achievement result.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the ResultDescription.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'ResultDescription'.",
                        "type" : "string"
                    },
                    "alignments" : {
                        "description" : "The alignments between this result description and nodes in external frameworks.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/AlignmentDType"
                        }
                    },
                    "allowedValues" : {
                        "description" : "Model Primitive Datatype = String. The ordered from 'low' to 'high' set of allowed values.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string"
                        }
                    },
                    "name" : {
                        "description" : "Model Primitive Datatype = String. The name of the result.",
                        "type" : "string"
                    },
                    "requiredLevel" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The id of the RubricCriterionLevel required to 'pass'.",
                        "type" : "string"
                    },
                    "requiredValue" : {
                        "description" : "Model Primitive Datatype = String. The value from allowedValues or within the range of valueMin to valueMax required to 'pass'.",
                        "type" : "string"
                    },
                    "resultType" : {
                        "description" : "The type of result. This is an extensible enumerated vocabulary.",
                        "type" : "string"
                    },
                    "rubricCriterionLevels" : {
                        "description" : "The ordered from 'low' to 'high' set of rubric criterion levels that may be asserted.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/RubricCriterionLevelDType"
                        }
                    },
                    "valueMax" : {
                        "description" : "Model Primitive Datatype = String. The maximum possible result that may be asserted.",
                        "type" : "string"
                    },
                    "valueMin" : {
                        "description" : "Model Primitive Datatype = String. The minimum possible result that may be asserted.",
                        "type" : "string"
                    }
                },
                "required" : [ "id","name","resultType" ],
                "additionalProperties" : true
            },
            "RubricCriterionLevelDType" : {
                "description" : "Describes a rubric criterion level.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the ResultCriterionLevel.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "Model Primitive Datatype = String. The JSON-LD type of this object. Normally 'RubricCriterionLevel'.",
                        "type" : "string"
                    },
                    "alignments" : {
                        "description" : "The alignments between this rubric criterion level and nodes in external frameworks.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "$ref" : "#/definitions/AlignmentDType"
                        }
                    },
                    "description" : {
                        "description" : "Model Primitive Datatype = String. A description of the rubric criterion level.",
                        "type" : "string"
                    },
                    "level" : {
                        "description" : "Model Primitive Datatype = String. The rubric performance level in terms of success.",
                        "type" : "string"
                    },
                    "name" : {
                        "description" : "Model Primitive Datatype = String. The name of the RubricCriterionLevel.",
                        "type" : "string"
                    },
                    "points" : {
                        "description" : "Model Primitive Datatype = String. The number of grade points corresponding to a specific rubric level.",
                        "type" : "string"
                    }
                },
                "required" : [ "id","name" ],
                "additionalProperties" : true
            },
            "SystemIdentifierDType" : {
                "description" : "A SystemIdentifier represents a single, system-local identifier for an Achievement.",
                "type" : "object",
                "properties" : {
                    "type" : {
                        "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'SystemIdentifier'.",
                        "type" : "string"
                    },
                    "identifier" : {
                        "description" : "Model Primitive Datatype = String. Opaque string representing the system identifier value.",
                        "type" : "string"
                    },
                    "identifierType" : {
                        "description" : "The identifier type. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention. For example, the NCES School ID might be 'ext:NcesSchoolId'. Extended vocabulary terms must start with 'ext:' followed by any valid JSON string value. Please see the latest version of the CLR Implementation Guide for suggested values.",
                        "type" : "string"
                    }
                },
                "required" : [ "identifier","identifierType" ],
                "additionalProperties" : true
            },
            "VerificationDType" : {
                "description" : "Information a reviewer can use to verify an Assertion, Clr, or Endorsement.",
                "type" : "object",
                "properties" : {
                    "id" : {
                        "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the Verification.",
                        "type" : "string"
                    },
                    "type" : {
                        "description" : "The JSON-LD type of this object. The strongly typed value indicates the verification method.",
                        "type" : "string",
                        "enum" : [ "Hosted","Signed","Verification" ]
                    },
                    "allowedOrigins" : {
                        "description" : "Model Primitive Datatype = String. The host registered name subcomponent of an allowed origin. Any given id URI will be considered valid.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string"
                        }
                    },
                    "creator" : {
                        "description" : "Model Primitive Datatype = AnyURI. The (HTTP) id of the key used to sign the Assertion, CLR, or Endorsement. If not present, verifiers will check the public key declared in the referenced issuer Profile. If a key is declared here, it must be authorized in the issuer Profile as well. creator is expected to be the dereferencable URI of a document that describes a CryptographicKey.",
                        "type" : "string",
                        "format" : "uri"
                    },
                    "startsWith" : {
                        "description" : "Model Primitive Datatype = String. The URI fragment that the verification property must start with. Valid Assertions, Clrs, and Endorsements must have an id within this scope. Multiple values allowed, and Assertions, Clrs, and Endorsements will be considered valid if their id starts with one of these values.",
                        "type" : "array",
                        "minItems" : 0,
                        "items" : {
                            "type" : "string"
                        }
                    },
                    "verificationProperty" : {
                        "description" : "Model Primitive Datatype = String. The property to be used for verification. Only 'id' is supported. Verifiers will consider 'id' the default value if verificationProperty is omitted or if an issuer Profile has no explicit verification instructions, so it may be safely omitted.",
                        "type" : "string"
                    }
                },
                "required" : [ "type" ],
                "additionalProperties" : true
            },
            "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" : [ "forbidden","fullsuccess","internal_server_error","invalid_data","invalid_query_parameter","misdirected_request","not_acceptable","not_allowed","not_modified","server_busy","unauthorizedrequest","unknown" ]
                    }
                },
                "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","failure","processing","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/spec/clr/v1p0/schema/openapi/clr.json).

    {
        "openapi" : "3.0.0",
        "info" : {
            "version" : "1.0",
            "title" : "Comprehensive Learner Record Standard OpenAPI (JSON) Definition",
            "description" : "The Comprehensive Learner Record Standard enables the exchange of data about users and their achievements between a Comprehensive Learner Record Standard provider and the consumers of the associated data. This standard 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" : "https://www.imsglobal.org/ims/clr/v1p0/",
                "description" : "The above Server URL should be changed to the actual server location."
            }
        ],
        "tags" : [
            {
                "name" : "AssertionsManager",
                "description" : "The set of service operations that manage access to Assertions for Hosted Verification."
            },
            {
                "name" : "ClrsManager",
                "description" : "The set of service operations that manage access to CLRs."
            },
            {
                "name" : "DiscoveryManager",
                "description" : "The set of service operations that manage access to the DiscoveryDocument for dynamic consumer registration."
            },
            {
                "name" : "EndorsementsManager",
                "description" : "The set of service operations that manage access to Endorsements for Hosted Verification."
            },
            {
                "name" : "KeysManager",
                "description" : "The set of service operations that manage access to CryptographicKeys for Signed Verification."
            },
            {
                "name" : "RevocationsManager",
                "description" : "The set of service operations that manage access to RevocationLists for Signed Verification."
            }
        ],
        "paths" : {
            "/assertions/{sourcedId}" : {
                "get" : {
                    "operationId" : "getAssertion",
                    "summary" : "The REST read request message for the getAssertion() API call.",
                    "tags" : [ "AssertionsManager" ],
                    "description" : "Returns the current version of the specified Assertion. This operation is used to verify a Hosted Assertion.",
                    "parameters" : [
                        {
                            "name" : "sourcedId",
                            "in" : "path",
                            "description" : "The unique identifier of the Assertion.",
                            "required" : true,
                            "schema" : {
                                "type" : "string"
                            },
                            "style" : "simple"
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource is returned in the payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/GetAssertionPayloadDType"
                                    }
                                }
                            }
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' - The resource was not found.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "/clrs" : {
                "get" : {
                    "operationId" : "getClrs",
                    "summary" : "The REST read request message for the getClrs() API call.",
                    "tags" : [ "ClrsManager" ],
                    "description" : "The set of CLRs the user is authorized to access are returned in the payload of the response message.",
                    "parameters" : [
                        {
                            "name" : "limit",
                            "in" : "query",
                            "description" : "The number of results to return.",
                            "required" : false,
                            "schema" : {
                                "type" : "integer",
                                "format" : "int32",
                                "default" : 100,
                                "minimum" : 1
                            },
                            "style" : "form",
                            "allowEmptyValue" : false
                        },
                        {
                            "name" : "offset",
                            "in" : "query",
                            "description" : "The index of the first record to return. (zero indexed)",
                            "required" : false,
                            "schema" : {
                                "type" : "integer",
                                "format" : "int32",
                                "minimum" : 0
                            },
                            "style" : "form",
                            "allowEmptyValue" : false
                        },
                        {
                            "name" : "since",
                            "in" : "query",
                            "description" : "Retrieve CLRs that were issued after the provided timestamp. Must be an ISO 8601 compatible timestamp with a time zone indicator.",
                            "required" : false,
                            "schema" : {
                                "type" : "string",
                                "format" : "date-time"
                            },
                            "style" : "form",
                            "allowEmptyValue" : false
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly"
                            ]
                        },
                        {
                            "OAuth2ACG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly"
                            ]
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource is returned in the payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/ClrSetDType"
                                    }
                                }
                            },
                            "headers" : {
                                "X-Total-Count" : {
                                    "description" : "The total number of resources that are available to be returned",
                                    "schema" : {
                                        "type" : "integer"
                                    }
                                }
                            },
                            "links" : {
                                "next" : {
                                    "description" : "Get the next set of resources i.e. from offset to offset+limit",
                                    "operationId" : "getClrs",
                                    "parameters" : {
                                        "limit" : "$request.path.limit",
                                        "offset" : "$request.path.offset"
                                    }
                                },
                                "last" : {
                                    "description" : "Get the last set of resources i.e. from offset to end",
                                    "operationId" : "getClrs",
                                    "parameters" : {
                                        "limit" : "$request.path.limit",
                                        "offset" : "$request.path.offset"
                                    }
                                },
                                "first" : {
                                    "description" : "Get the first set of resources i.e. from first to limit",
                                    "operationId" : "getClrs",
                                    "parameters" : {
                                        "limit" : "$request.path.limit",
                                        "offset" : "$request.path.offset"
                                    }
                                },
                                "prev" : {
                                    "description" : "Get the previous set of resources i.e. from last_offset to last_offset+limit",
                                    "operationId" : "getClrs",
                                    "parameters" : {
                                        "limit" : "$request.path.limit",
                                        "offset" : "$request.path.offset"
                                    }
                                }
                            }
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "401" : {
                            "description" : "'Unauthorized' - The request requires user authentication.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "403" : {
                            "description" : "'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' - There are no resources behind the URI.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully. The exact error should be explained in the error payload."
                        }
                    }
                },
                "post" : {
                    "operationId" : "postClr",
                    "summary" : "The REST createbp request message for the postClr() API call.",
                    "tags" : [ "ClrsManager" ],
                    "description" : "Create or replace a CLR.",
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/replace"
                            ]
                        },
                        {
                            "OAuth2ACG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/replace"
                            ]
                        }
                    ],
                    "requestBody" : {
                        "description" : "The CLR to be created or replaced.",
                        "content" : {
                            "application/json" : {
                                "schema" : {
                                    "$ref" : "#/components/schemas/PostClrPayloadDType"
                                }
                            }
                        },
                        "required" : true
                    },
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource was successfully replaced.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/PostClrPayloadDType"
                                    }
                                }
                            }
                        },
                        "201" : {
                            "description" : "'Created` - The resource was successfully created.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/PostClrPayloadDType"
                                    }
                                }
                            }
                        },
                        "304" : {
                            "description" : "'Not Modified' - The client can use cached data.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "401" : {
                            "description" : "'Unauthorized' - The request requires user authentication.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "403" : {
                            "description" : "'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' - There is no resource behind the URI.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "405" : {
                            "description" : "'Method Not Allowed' - The provider does not support this operation.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully. The exact error should be explained in the error payload."
                        }
                    }
                }
            },
            "/clrs/{sourcedId}" : {
                "delete" : {
                    "operationId" : "deleteClr",
                    "summary" : "The REST delete request message for the deleteClr() API call.",
                    "tags" : [ "ClrsManager" ],
                    "description" : "Delete a CLR.",
                    "parameters" : [
                        {
                            "name" : "sourcedId",
                            "in" : "path",
                            "description" : "The unique identifier of the CLR to delete.",
                            "required" : true,
                            "schema" : {
                                "type" : "string"
                            },
                            "style" : "simple"
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/delete"
                            ]
                        },
                        {
                            "OAuth2ACG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/delete"
                            ]
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The request succeeded and the resource was deleted.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "202" : {
                            "description" : "'Accepted' - The request was accepted and the resource will be deleted.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "204" : {
                            "description" : "'No Content' - The resource was successfully deleted."
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "401" : {
                            "description" : "'Unauthorized' - The request requires an user authentication.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "403" : {
                            "description" : "'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "404" : {
                            "description" : "'Not found' - There is no resource behind the URI.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "405" : {
                            "description" : "'Method Not Allowed' - The provider does not support this operation.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully. The exact error should be explained in the error payload."
                        }
                    }
                },
                "get" : {
                    "operationId" : "getClr",
                    "summary" : "The REST read request message for the getClr() API call.",
                    "tags" : [ "ClrsManager" ],
                    "description" : "Returns the current version of the specified Clr. This operation is used to verify a Hosted Clr.",
                    "parameters" : [
                        {
                            "name" : "sourcedId",
                            "in" : "path",
                            "description" : "The unique identifier of the Clr.",
                            "required" : true,
                            "schema" : {
                                "type" : "string"
                            },
                            "style" : "simple"
                        }
                    ],
                    "security" : [
                        {
                            "OAuth2CCG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly"
                            ]
                        },
                        {
                            "OAuth2ACG" : [
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly"
                            ]
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource is returned in the payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/GetClrPayloadDType"
                                    }
                                }
                            }
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "401" : {
                            "description" : "'Unauthorized' - The request requires user authentication.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "403" : {
                            "description" : "'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' – There is no resource behind the URI.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "410" : {
                            "description" : "'Gone' - Marks the entity as revoked. The response may include the entity body.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully."
                        }
                    }
                }
            },
            "/discovery" : {
                "get" : {
                    "operationId" : "getDiscoveryDocument",
                    "summary" : "The REST read request message for the getDiscoveryDocument() API call.",
                    "tags" : [ "DiscoveryManager" ],
                    "description" : "Returns the DiscoveryDocument if the provider supports dynamic CLR consumer registration.",
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource is returned in the payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/DiscoveryDocumentDType"
                                    }
                                }
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' - There is no resource behind the URI.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully."
                        }
                    }
                }
            },
            "/endorsements/{sourcedId}" : {
                "get" : {
                    "operationId" : "getEndorsement",
                    "summary" : "The REST read request message for the getEndorsement() API call.",
                    "tags" : [ "EndorsementsManager" ],
                    "description" : "Returns the current version of the specified Endorsement. This operation is used to verify a Hosted Endorsement.",
                    "parameters" : [
                        {
                            "name" : "sourcedId",
                            "in" : "path",
                            "description" : "The unique identifier of the Endorsement.",
                            "required" : true,
                            "schema" : {
                                "type" : "string"
                            },
                            "style" : "simple"
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource is returned in the payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/GetEndorsementPayloadDType"
                                    }
                                }
                            }
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' - The resource was not found.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "/keys/{sourcedId}" : {
                "get" : {
                    "operationId" : "getKey",
                    "summary" : "The REST read request message for the getKey() API call.",
                    "tags" : [ "KeysManager" ],
                    "description" : "Returns the current version of the specified CryptographicKey. This operation is used to verify a Signed Assertion, Clr, or Endorsement.",
                    "parameters" : [
                        {
                            "name" : "sourcedId",
                            "in" : "path",
                            "description" : "The unique identifier of the CryptographicKey.",
                            "required" : true,
                            "schema" : {
                                "type" : "string"
                            },
                            "style" : "simple"
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource is returned in the payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/GetCryptographicKeyPayloadDType"
                                    }
                                }
                            }
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' - The resource was not found.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "/revocations/{sourcedId}" : {
                "get" : {
                    "operationId" : "getRevocationList",
                    "summary" : "The REST read request message for the getRevocationList() API call.",
                    "tags" : [ "RevocationsManager" ],
                    "description" : "Returns the current version of the issuer's RevocationList. This operation is used to verify a Signed Assertion, Clr, or Endorsement.",
                    "parameters" : [
                        {
                            "name" : "sourcedId",
                            "in" : "path",
                            "description" : "The unique identifier of the RevocationList.",
                            "required" : true,
                            "schema" : {
                                "type" : "string"
                            },
                            "style" : "simple"
                        }
                    ],
                    "responses" : {
                        "200" : {
                            "description" : "'OK' - The resource is returned in the payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/GetRevocationListPayloadDType"
                                    }
                                }
                            }
                        },
                        "400" : {
                            "description" : "'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "404" : {
                            "description" : "'Not Found' - The resource was not found.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "406" : {
                            "description" : "'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "421" : {
                            "description" : "'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        },
                        "default" : {
                            "description" : "The request was not completed successfully.",
                            "content" : {
                                "application/json" : {
                                    "schema" : {
                                        "$ref" : "#/components/schemas/imsx_StatusInfoDType"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "components" : {
            "securitySchemes" : {
                "OAuth2CCG" : {
                    "type" : "oauth2",
                    "description" : "OAuth 2.0 Client Credentials authorization per IMS Security Framework.",
                    "flows" : {
                        "clientCredentials" : {
                            "tokenUrl" : "https://provider/token",
                            "scopes" : {
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/delete" : "Grants the app permission to delete your comprehensive learner records on this host.",
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly" : "Grants the app permission to read your comprehensive learner records on this host.",
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/replace" : "Grants the app permission to create or replace your comprehensive learner records on this host."
                            }
                        }
                    }
                },
                "OAuth2ACG" : {
                    "type" : "oauth2",
                    "description" : "OAuth 2.0 Authorization Code Grant authorization per IMS Security Framework.",
                    "flows" : {
                        "authorizationCode" : {
                            "tokenUrl" : "https://provider/token",
                            "authorizationUrl" : "https://provider/authorize",
                            "refreshUrl" : "https://provider/token",
                            "scopes" : {
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/delete" : "Grants the app permission to delete your comprehensive learner records on this host.",
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly" : "Grants the app permission to read your comprehensive learner records on this host.",
                                "https://purl.imsglobal.org/spec/clr/v1p0/scope/replace" : "Grants the app permission to create or replace your comprehensive learner records on this host."
                            }
                        }
                    }
                }
            },
            "schemas" : {
                "AchievementDType" : {
                    "description" : "An accomplishment such as completing a degree, mastering a competency, or course completion that may be asserted about one or more learners.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the Achievement. If the IRI is a URL it must resolve to an Achievement resource.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Achievement'.",
                            "type" : "string"
                        },
                        "achievementType" : {
                            "description" : "A CLR Achievement can represent many different types of achievement from an assessment result to membership. Use 'Achievement' to indicate an achievement not in the list of allowed values.",
                            "anyOf" : [
                                    {
                                        "type" : "string",
                                        "enum" : [ "Achievement","Assessment","Assignment","Award","Badge","Certificate","Certification","Course","CommunityService","Competency","Co-Curricular","Degree","Diploma","Fieldwork","License","Membership" ]
                                    },
                                    {
                                        "description" : "Model Primitive Datatype = String.",
                                        "type" : "string",
                                        "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+"
                                    }
                            ]
                        },
                        "alignments" : {
                            "description" : "Alignment objects describe an alignment between this achievement and a node in an educational framework.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/AlignmentDType"
                            }
                        },
                        "associations" : {
                            "description" : "Associations between this achievement and other achievements.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/AssociationDType"
                            }
                        },
                        "creditsAvailable" : {
                            "description" : "Model Primitive Datatype = Float. Credit hours associated with this entity, or credit hours possible. For example '3.0'.",
                            "type" : "number",
                            "format" : "float"
                        },
                        "description" : {
                            "description" : "Model Primitive Datatype = String. A short description of the achievement. May be the same as name if no description is available.",
                            "type" : "string"
                        },
                        "endorsements" : {
                            "description" : "Allows endorsers to make specific claims about the Achievement.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/EndorsementDType"
                            }
                        },
                        "humanCode" : {
                            "description" : "Model Primitive Datatype = String. The code, generally human readable, associated with an achievement.",
                            "type" : "string"
                        },
                        "identifiers" : {
                            "description" : "A set of System Identifiers that represent other identifiers for this Achievement.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/SystemIdentifierDType"
                            }
                        },
                        "name" : {
                            "description" : "Model Primitive Datatype = String. The name of the achievement.",
                            "type" : "string"
                        },
                        "fieldOfStudy" : {
                            "description" : "Model Primitive Datatype = String. Category, subject, area of study,  discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology. ",
                            "type" : "string"
                        },
                        "image" : {
                            "description" : "Model Primitive Datatype = NormalizedString. IRI of an image representing the achievement. May be a Data URI or the URL where the image may be found.",
                            "type" : "string"
                        },
                        "issuer" : {
                            "$ref" : "#/components/schemas/ProfileDType"
                        },
                        "level" : {
                            "description" : "Model Primitive Datatype = String. Text that describes the level of achievement apart from how the achievement was performed or demonstrated. Examples would include 'Level 1', 'Level 2', 'Level 3', or 'Bachelors', 'Masters', 'Doctoral'.",
                            "type" : "string"
                        },
                        "requirement" : {
                            "$ref" : "#/components/schemas/CriteriaDType"
                        },
                        "resultDescriptions" : {
                            "description" : "The set of result descriptions that may be asserted as results with this achievement.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/ResultDescriptionDType"
                            }
                        },
                        "signedEndorsements" : {
                            "description" : "Model Primitive Datatype = String. Signed endorsements in JWS Compact Serialization format.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string",
                                "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                            }
                        },
                        "specialization" : {
                            "description" : "Model Primitive Datatype = String. Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include Entrepreneurship, Technical Communication, and Finance.",
                            "type" : "string"
                        },
                        "tags" : {
                            "description" : "Model Primitive Datatype = String. Tags that describe the type of achievement.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string"
                            }
                        }
                    },
                    "required" : [ "id","name","issuer" ],
                    "additionalProperties" : true
                },
                "AddressDType" : {
                    "description" : "Based on schema.org Address object.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the Address.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Address'.",
                            "type" : "string"
                        },
                        "addressCountry" : {
                            "description" : "Model Primitive Datatype = String. The country. For example, USA. You can also provide the two-letter ISO 3166-1 alpha-2 country code.",
                            "type" : "string"
                        },
                        "addressLocality" : {
                            "description" : "Model Primitive Datatype = String. The locality. For example, Mountain View.",
                            "type" : "string"
                        },
                        "addressRegion" : {
                            "description" : "Model Primitive Datatype = String. The region. For example, CA.",
                            "type" : "string"
                        },
                        "postalCode" : {
                            "description" : "Model Primitive Datatype = String. The postal code. For example, 94043.",
                            "type" : "string"
                        },
                        "postOfficeBoxNumber" : {
                            "description" : "Model Primitive Datatype = String. The post office box number for PO box addresses.",
                            "type" : "string"
                        },
                        "streetAddress" : {
                            "description" : "Model Primitive Datatype = String. The street address. For example, 1600 Amphitheatre Pkwy.",
                            "type" : "string"
                        }
                    },
                    "additionalProperties" : true
                },
                "AlignmentDType" : {
                    "description" : "Alignment is based on the schema.org AlignmentObject.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the object.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this entity. Normally 'Alignment'.",
                            "type" : "string"
                        },
                        "targetCode" : {
                            "description" : "Model Primitive Datatype = String. If applicable, a locally unique string identifier that identifies the alignment target within its framework.",
                            "type" : "string"
                        },
                        "targetDescription" : {
                            "description" : "Model Primitive Datatype = String. The description of a node in an established educational framework.",
                            "type" : "string"
                        },
                        "targetName" : {
                            "description" : "Model Primitive Datatype = String. The name of a node in an established educational framework.",
                            "type" : "string"
                        },
                        "targetFramework" : {
                            "description" : "Model Primitive Datatype = String. The name of the framework to which the resource being described is aligned.",
                            "type" : "string"
                        },
                        "targetType" : {
                            "description" : "The type of the alignment target node. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.",
                            "anyOf" : [
                                    {
                                        "description" : "Model Primitive Datatype = String.",
                                        "type" : "string",
                                        "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+"
                                    },
                                    {
                                        "type" : "string",
                                        "enum" : [ "CFItem","CFRubric","CFRubricCriterion","CFRubricCriterionLevel","CTDL" ]
                                    }
                            ]
                        },
                        "targetUrl" : {
                            "description" : "Model Primitive Datatype = AnyURI. The URL of a node in an established educational framework. When the alignment is to a CASE framework and the CASE Service support the CASE JSON-LD binding, the URL should be the 'uri' of the node document, otherwise the URL should be the CASE Service endpoint URL that returns the node JSON.",
                            "type" : "string",
                            "format" : "uri"
                        }
                    },
                    "required" : [ "targetName","targetUrl" ],
                    "additionalProperties" : true
                },
                "ArtifactDType" : {
                    "description" : "An artifact that is part of an evidence object.",
                    "type" : "object",
                    "properties" : {
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of the object. Normally 'Artifact'.",
                            "type" : "string"
                        },
                        "description" : {
                            "description" : "Model Primitive Datatype = String. A description of the artifact.",
                            "type" : "string"
                        },
                        "name" : {
                            "description" : "Model Primitive Datatype = String. The name of the artifact.",
                            "type" : "string"
                        },
                        "url" : {
                            "description" : "Model Primitive Datatype = NormalizedString. IRI of the artifact. May be a Data URI or the URL where the artifact may be found.",
                            "type" : "string"
                        }
                    },
                    "additionalProperties" : true
                },
                "AssertionDType" : {
                    "description" : "Assertions are representations of an Achievement awarded to a Learner.  It is used to share information about the Achievement Assertion, such as a result and verification method. Assertions are packaged for transmission as JSON objects with a set of mandatory and optional properties.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the Assertion. If the IRI is a URL it must resolve to an Assertion resource. If the Assertion is verified using Hosted verification, the IRI must be a URL.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Assertion'.",
                            "type" : "string"
                        },
                        "achievement" : {
                            "$ref" : "#/components/schemas/AchievementDType"
                        },
                        "activityEndDate" : {
                            "description" : "Model Primitive Datatype = DateTime. If present, end date for the activity.",
                            "type" : "string",
                            "format" : "date-time"
                        },
                        "activityStartDate" : {
                            "description" : "Model Primitive Datatype = DateTime. If present, start date for the activity.",
                            "type" : "string",
                            "format" : "date-time"
                        },
                        "creditsEarned" : {
                            "description" : "Model Primitive Datatype = Float. The number of credits earned, generally in semester or quarter credit hours.  This field correlates with the Achievement creditsAvailable field.",
                            "type" : "number",
                            "format" : "float"
                        },
                        "endorsements" : {
                            "description" : "Allows endorsers to make specific claims about the assertion.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/EndorsementDType"
                            }
                        },
                        "evidence" : {
                            "description" : "Evidence describing the work that the recipient did to earn the achievement. This can be a webpage that links out to other pages if linking directly to the work is infeasible.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/EvidenceDType"
                            }
                        },
                        "expires" : {
                            "description" : "Model Primitive Datatype = DateTime. If the achievement has some notion of expiry, this indicates a timestamp when an assertion should no longer be considered valid. After this time, the assertion should be considered expired.",
                            "type" : "string",
                            "format" : "date-time"
                        },
                        "image" : {
                            "description" : "Model Primitive Datatype = NormalizedString. IRI of an image representing the assertion. May be a Data URI or the URL where the image may be found.",
                            "type" : "string"
                        },
                        "issuedOn" : {
                            "description" : "Model Primitive Datatype = DateTime. Timestamp of when the achievement was awarded. Required unless the assertion is revoked.",
                            "type" : "string",
                            "format" : "date-time"
                        },
                        "licenseNumber" : {
                            "description" : "Model Primitive Datatype = String. The license number that was issued with this assertion.",
                            "type" : "string"
                        },
                        "narrative" : {
                            "description" : "Model Primitive Datatype = String. A narrative that describes the connection between multiple pieces of evidence. Likely only present if evidence is a multi-value array. Markdown allowed.",
                            "type" : "string"
                        },
                        "recipient" : {
                            "$ref" : "#/components/schemas/IdentityDType"
                        },
                        "results" : {
                            "description" : "The set of results being asserted.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/ResultDType"
                            }
                        },
                        "revocationReason" : {
                            "description" : "Model Primitive Datatype = String. Optional published reason for revocation, if revoked.",
                            "type" : "string"
                        },
                        "revoked" : {
                            "description" : "Model Primitive Datatype = Boolean. Defaults to false if this assertion is not referenced in a RevocationList. If revoked is true, only revoked and id are required properties, and many issuers strip a hosted assertion down to only those properties when revoked.",
                            "type" : "boolean"
                        },
                        "role" : {
                            "description" : "Model Primitive Datatype = String. Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc.",
                            "type" : "string"
                        },
                        "signedEndorsements" : {
                            "description" : "Model Primitive Datatype = String. Signed endorsements in JWS Compact Serialization format.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string",
                                "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                            }
                        },
                        "source" : {
                            "$ref" : "#/components/schemas/ProfileDType"
                        },
                        "term" : {
                            "description" : "Model Primitive Datatype = String. The academic term in which this assertion was achieved.",
                            "type" : "string"
                        },
                        "verification" : {
                            "$ref" : "#/components/schemas/VerificationDType"
                        }
                    },
                    "required" : [ "id" ],
                    "additionalProperties" : true
                },
                "AssociationDType" : {
                    "description" : "Association is based on the CASE AssociationLink object. An Association associates (relates) one Achievement with another Achievement.",
                    "type" : "object",
                    "properties" : {
                        "associationType" : {
                            "description" : "The type of association. This uses an enumerated vocabulary.",
                            "type" : "string",
                            "enum" : [ "exactMatchOf","exemplar","hasSkillLevel","isChildOf","isParentOf","isPartOf","isPeerOf","isRelatedTo","precedes","replacedBy" ]
                        },
                        "targetId" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The '@id' of another achievement, or target of the association.",
                            "type" : "string"
                        },
                        "title" : {
                            "description" : "Model Primitive Datatype = String. A human readable title for the associated achievement.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "associationType","targetId","title" ],
                    "additionalProperties" : true
                },
                "ClrDType" : {
                    "description" : "A collection of assertions for a single person reported by a single publisher.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the CLR. If the IRI is a URL is must resolve to a CLR resource and conform to the getClr endpoint format. If the CLR is verified using Hosted verification, the IRI must be a URL.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Clr'.",
                            "type" : "string"
                        },
                        "achievements" : {
                            "description" : "Array of achievements that are related directly or indirectly through associations with the asserted achievements in the CLR. Primarily used to represent hierarchical pathways. Asserted achievements may appear in both this array and in the achievement assertion. If asserted achievements do appear in both places, they MUST match exactly.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/AchievementDType"
                            }
                        },
                        "assertions" : {
                            "description" : "The learner's asserted achievements.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/AssertionDType"
                            }
                        },
                        "endorsements" : {
                            "description" : "Allows endorsers to make specific claims about the CLR, or any assertion, achievement, or profile referenced in the CLR.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/EndorsementDType"
                            }
                        },
                        "issuedOn" : {
                            "description" : "Model Primitive Datatype = DateTime. Timestamp of when the CLR was published.",
                            "type" : "string",
                            "format" : "date-time"
                        },
                        "learner" : {
                            "$ref" : "#/components/schemas/ProfileDType"
                        },
                        "name" : {
                            "description" : "Model Primitive Datatype = String. Optional name of the CLR.",
                            "type" : "string"
                        },
                        "partial" : {
                            "description" : "Model Primitive Datatype = Boolean. True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.",
                            "type" : "boolean"
                        },
                        "publisher" : {
                            "$ref" : "#/components/schemas/ProfileDType"
                        },
                        "revocationReason" : {
                            "description" : "Model Primitive Datatype = String. If revoked, optional reason for revocation.",
                            "type" : "string"
                        },
                        "revoked" : {
                            "description" : "Model Primitive Datatype = Boolean. If True the CLR is revoked.",
                            "type" : "boolean"
                        },
                        "signedAssertions" : {
                            "description" : "Model Primitive Datatype = String. Signed assertions in JWS Compact Serialization format.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string",
                                "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                            }
                        },
                        "signedEndorsements" : {
                            "description" : "Model Primitive Datatype = String. Signed endorsements of the CLR or any Achievement, Assertion, or Profile in the CLR; in JWS Compact Serialization format.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string",
                                "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                            }
                        },
                        "verification" : {
                            "$ref" : "#/components/schemas/VerificationDType"
                        }
                    },
                    "required" : [ "id","issuedOn","learner","publisher" ],
                    "additionalProperties" : true
                },
                "ClrSetDType" : {
                    "description" : "A set of CLRs.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the ClrSet.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'ClrSet'.",
                            "type" : "string"
                        },
                        "clrs" : {
                            "description" : "A set of Clrs",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/ClrDType"
                            }
                        },
                        "signedClrs" : {
                            "description" : "Model Primitive Datatype = String. A set of Clrs in JWS Compact Serialization format.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string",
                                "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                            }
                        }
                    },
                    "additionalProperties" : false
                },
                "CriteriaDType" : {
                    "description" : "Descriptive metadata about the achievements necessary to be recognized with an Assertion of a particular AchievementType. This data is added to the AchievementType so that it may be rendered when that AchievementType is displayed, instead of simply a link to human-readable criteria external to the Achievement Assertion. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = AnyURI. The URI of a webpage that describes the criteria for the Achievement in a human-readable format.",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Criteria'.",
                            "type" : "string"
                        },
                        "narrative" : {
                            "description" : "Model Primitive Datatype = String. A narrative of what is needed to earn the achievement. Markdown allowed.",
                            "type" : "string"
                        }
                    },
                    "additionalProperties" : true
                },
                "CryptographicKeyDType" : {
                    "description" : "Based on the Key class from the W3C Web Payments Community Group Security Vocabulary. A CryptographicKey document identifies and describes a public key used to verify signed Assertions.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The URI of the CryptographicKey document. Used during signed verification.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'CryptographicKey'.",
                            "type" : "string"
                        },
                        "owner" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The identifier for the Profile that owns this PUBLIC KEY and the PRIVATE KEY used to sign the assertion or endorsement.",
                            "type" : "string"
                        },
                        "publicKeyPem" : {
                            "description" : "Model Primitive Datatype = String. The PUBLIC KEY in PEM format corresponding to the PRIVATE KEY used by the owner to sign the assertion or endorsement. The PEM key encoding is a widely-used method to express public keys, compatible with almost every Secure Sockets Layer library implementation.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "id","owner","publicKeyPem" ],
                    "additionalProperties" : true
                },
                "DiscoveryDocumentDType" : {
                    "description" : "Configuration information about the provider implementation.",
                    "type" : "object",
                    "properties" : {
                        "authorizationUrl" : {
                            "description" : "Model Primitive Datatype = AnyURI. A fully qualifed URL to the provider's OAuth 2.0 Authorization endpoint.",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "image" : {
                            "description" : "Model Primitive Datatype = NormalizedString. An image representing the provider. May be a Data URI or the URL where the image may be found.",
                            "type" : "string"
                        },
                        "name" : {
                            "description" : "Model Primitive Datatype = String. The user-facing name of the platform providing CLR services.",
                            "type" : "string"
                        },
                        "privacyPolicyUrl" : {
                            "description" : "Model Primitive Datatype = AnyURI. A fully qualified URL to the provider's privacy policy.",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "registrationUrl" : {
                            "description" : "Model Primitive Datatype = AnyURI. A fully qualified URL to the provider's OAuth 2.0 Registration endpoint.",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "scopesOffered" : {
                            "description" : "Model Primitive Datatype = AnyURI. An array of OAuth 2.0 Scopes supported by the provider.",
                            "type" : "array",
                            "minItems" : 1,
                            "items" : {
                                "type" : "string",
                                "format" : "uri"
                            }
                        },
                        "termsOfServiceUrl" : {
                            "description" : "Model Primitive Datatype = AnyURI. A fully qualified URL to the provider's terms of service.",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "tokenUrl" : {
                            "description" : "Model Primitive Datatype = AnyURI. A fully qualified URL to the provider's OAuth 2.0 Token endpoint.",
                            "type" : "string",
                            "format" : "uri"
                        }
                    },
                    "required" : [ "authorizationUrl","name","privacyPolicyUrl","registrationUrl","scopesOffered","termsOfServiceUrl","tokenUrl" ],
                    "additionalProperties" : false
                },
                "EndorsementDType" : {
                    "description" : "An endorsement claim.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the Endorsement. If this Endorsement will be verified using Hosted verification, the value should be the URL of the hosted version of the Endorsement.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this entity. Normally 'Endorsement'.",
                            "type" : "string"
                        },
                        "claim" : {
                            "$ref" : "#/components/schemas/EndorsementClaimDType"
                        },
                        "issuedOn" : {
                            "description" : "Model Primitive Datatype = DateTime. Timestamp of when the endorsement was published.",
                            "type" : "string",
                            "format" : "date-time"
                        },
                        "issuer" : {
                            "$ref" : "#/components/schemas/EndorsementProfileDType"
                        },
                        "revocationReason" : {
                            "description" : "Model Primitive Datatype = String. If revoked, optional reason for revocation.",
                            "type" : "string"
                        },
                        "revoked" : {
                            "description" : "Model Primitive Datatype = Boolean. If True the endorsement is revoked.",
                            "type" : "boolean"
                        },
                        "verification" : {
                            "$ref" : "#/components/schemas/VerificationDType"
                        }
                    },
                    "required" : [ "id","claim","issuedOn","issuer","verification" ],
                    "additionalProperties" : true
                },
                "EndorsementClaimDType" : {
                    "description" : "An entity, identified by an id and additional properties that the endorser would like to claim about that entity.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The 'id' of the Profile, Achievement, Assertion, or CLR being endorsed.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this entity. Normally 'EndorsementClaim'.",
                            "type" : "string"
                        },
                        "endorsementComment" : {
                            "description" : "Model Primitive Datatype = String. An endorser's comment about the quality or fitness of the endorsed entity. Markdown allowed.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "id" ],
                    "additionalProperties" : true
                },
                "EndorsementProfileDType" : {
                    "description" : "A Profile is a collection of information that describes the person or organization using Comprehensive Learner Record (CLR). Publishers, learners, and issuers must be represented as profiles. Recipients, endorsers, or other entities may also be represented using this vocabulary. An EndorsementProfile cannot have endorsements.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the Profile.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this entity. Normally 'Profile'. Unlike the Profile object, the EndorsementProfile object does not have an 'endorsements' property.",
                            "type" : "string"
                        },
                        "additionalName" : {
                            "description" : "Model Primitive Datatype = String. An additional name for a person, can be used for a middle name.",
                            "type" : "string"
                        },
                        "address" : {
                            "$ref" : "#/components/schemas/AddressDType"
                        },
                        "description" : {
                            "description" : "Model Primitive Datatype = String. A short description of the individual or organization.",
                            "type" : "string"
                        },
                        "email" : {
                            "description" : "Model Primitive Datatype = String. A contact email address for the individual or organization.",
                            "type" : "string"
                        },
                        "familyName" : {
                            "description" : "Model Primitive Datatype = String. Family name of a person. In the U.S., the last name of a person.",
                            "type" : "string"
                        },
                        "givenName" : {
                            "description" : "Model Primitive Datatype = String. Given name of a person. In the U.S., the first name of a person.",
                            "type" : "string"
                        },
                        "identifiers" : {
                            "description" : "A set of System Identifiers that represent other identifiers for this Profile.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/SystemIdentifierDType"
                            }
                        },
                        "image" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Image representing the individual or organization.",
                            "type" : "string"
                        },
                        "name" : {
                            "description" : "Model Primitive Datatype = String. The full name of the individual or organization.",
                            "type" : "string"
                        },
                        "official" : {
                            "description" : "Model Primitive Datatype = String. The name of the authorized official for the Issuer.",
                            "type" : "string"
                        },
                        "publicKey" : {
                            "$ref" : "#/components/schemas/CryptographicKeyDType"
                        },
                        "revocationList" : {
                            "description" : "Model Primitive Datatype = AnyURI. The URL of the Revocation List document used for marking revocation of signed Assertions, CLRs, and Endorsements. Required for issuer profiles.",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "sourcedId" : {
                            "description" : "Model Primitive Datatype = String. The individual's unique 'sourcedId' value, which is used for providing interoperability with IMS Learning Information Services (LIS).",
                            "type" : "string"
                        },
                        "studentId" : {
                            "description" : "Model Primitive Datatype = String. An institution's student identifier for the person. This is frequently issued through a Student Information System.",
                            "type" : "string"
                        },
                        "telephone" : {
                            "description" : "Model Primitive Datatype = String. Primary phone number for the individual or organization.",
                            "type" : "string"
                        },
                        "url" : {
                            "description" : "Model Primitive Datatype = AnyURI. Web resource that uniquely represents or belongs to the individual. This may be a resource about the individual, hosting provided by the institution to the individual, or an web resource independently controlled by the individual.",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "verification" : {
                            "$ref" : "#/components/schemas/VerificationDType"
                        }
                    },
                    "required" : [ "id" ],
                    "additionalProperties" : true
                },
                "EvidenceDType" : {
                    "description" : "One or more artifacts that represent supporting evidence for the record. Examples include text, media, websites, etc.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = AnyURI. The URI of a webpage presenting evidence of achievement.",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this entity. Normally 'Evidence'.",
                            "type" : "string"
                        },
                        "artifacts" : {
                            "description" : "Artifacts that are part of the evidence.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/ArtifactDType"
                            }
                        },
                        "audience" : {
                            "description" : "Model Primitive Datatype = String. A description of the intended audience for a piece of evidence.",
                            "type" : "string"
                        },
                        "description" : {
                            "description" : "Model Primitive Datatype = String. A longer description of the evidence.",
                            "type" : "string"
                        },
                        "genre" : {
                            "description" : "Model Primitive Datatype = String. A string that describes the type of evidence. For example, Poetry, Prose, Film.",
                            "type" : "string"
                        },
                        "name" : {
                            "description" : "Model Primitive Datatype = String. The name of the evidence.",
                            "type" : "string"
                        },
                        "narrative" : {
                            "description" : "Model Primitive Datatype = String. A narrative that describes the evidence and process of achievement that led to an assertion. Markdown allowed.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "name" ],
                    "additionalProperties" : true
                },
                "GetAssertionPayloadDType" : {
                    "description" : "Payload for the 'getAssertion' operation.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the Assertion. If the IRI is a URL it must resolve to an Assertion resource. If the Assertion is verified using Hosted verification, the IRI must be a URL.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Assertion'.",
                            "type" : "string"
                        },
                        "achievement" : {
                            "$ref" : "#/components/schemas/AchievementDType"
                        },
                        "activityEndDate" : {
                            "description" : "Model Primitive Datatype = DateTime. If present, end date for the activity.",
                            "type" : "string",
                            "format" : "date-time"
                        },
                        "activityStartDate" : {
                            "description" : "Model Primitive Datatype = DateTime. If present, start date for the activity.",
                            "type" : "string",
                            "format" : "date-time"
                        },
                        "creditsEarned" : {
                            "description" : "Model Primitive Datatype = Float. The number of credits earned, generally in semester or quarter credit hours.  This field correlates with the Achievement creditsAvailable field.",
                            "type" : "number",
                            "format" : "float"
                        },
                        "endorsements" : {
                            "description" : "Allows endorsers to make specific claims about the assertion.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/EndorsementDType"
                            }
                        },
                        "evidence" : {
                            "description" : "Evidence describing the work that the recipient did to earn the achievement. This can be a webpage that links out to other pages if linking directly to the work is infeasible.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/EvidenceDType"
                            }
                        },
                        "expires" : {
                            "description" : "Model Primitive Datatype = DateTime. If the achievement has some notion of expiry, this indicates a timestamp when an assertion should no longer be considered valid. After this time, the assertion should be considered expired.",
                            "type" : "string",
                            "format" : "date-time"
                        },
                        "image" : {
                            "description" : "Model Primitive Datatype = NormalizedString. IRI of an image representing the assertion. May be a Data URI or the URL where the image may be found.",
                            "type" : "string"
                        },
                        "issuedOn" : {
                            "description" : "Model Primitive Datatype = DateTime. Timestamp of when the achievement was awarded. Required unless the assertion is revoked.",
                            "type" : "string",
                            "format" : "date-time"
                        },
                        "licenseNumber" : {
                            "description" : "Model Primitive Datatype = String. The license number that was issued with this assertion.",
                            "type" : "string"
                        },
                        "narrative" : {
                            "description" : "Model Primitive Datatype = String. A narrative that describes the connection between multiple pieces of evidence. Likely only present if evidence is a multi-value array. Markdown allowed.",
                            "type" : "string"
                        },
                        "recipient" : {
                            "$ref" : "#/components/schemas/IdentityDType"
                        },
                        "results" : {
                            "description" : "The set of results being asserted.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/ResultDType"
                            }
                        },
                        "revocationReason" : {
                            "description" : "Model Primitive Datatype = String. Optional published reason for revocation, if revoked.",
                            "type" : "string"
                        },
                        "revoked" : {
                            "description" : "Model Primitive Datatype = Boolean. Defaults to false if this assertion is not referenced in a RevocationList. If revoked is true, only revoked and id are required properties, and many issuers strip a hosted assertion down to only those properties when revoked.",
                            "type" : "boolean"
                        },
                        "role" : {
                            "description" : "Model Primitive Datatype = String. Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc.",
                            "type" : "string"
                        },
                        "signedEndorsements" : {
                            "description" : "Model Primitive Datatype = String. Signed endorsements in JWS Compact Serialization format.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string",
                                "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                            }
                        },
                        "source" : {
                            "$ref" : "#/components/schemas/ProfileDType"
                        },
                        "term" : {
                            "description" : "Model Primitive Datatype = String. The academic term in which this assertion was achieved.",
                            "type" : "string"
                        },
                        "verification" : {
                            "$ref" : "#/components/schemas/VerificationDType"
                        },
                        "@context" : {
                            "description" : "Model Primitive Datatype = String. The JSON-LD @context.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "id","@context" ],
                    "additionalProperties" : false
                },
                "GetClrPayloadDType" : {
                    "description" : "Payload for the 'getClr' operation.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the CLR. If the IRI is a URL is must resolve to a CLR resource and conform to the getClr endpoint format. If the CLR is verified using Hosted verification, the IRI must be a URL.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Clr'.",
                            "type" : "string"
                        },
                        "achievements" : {
                            "description" : "Array of achievements that are related directly or indirectly through associations with the asserted achievements in the CLR. Primarily used to represent hierarchical pathways. Asserted achievements may appear in both this array and in the achievement assertion. If asserted achievements do appear in both places, they MUST match exactly.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/AchievementDType"
                            }
                        },
                        "assertions" : {
                            "description" : "The learner's asserted achievements.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/AssertionDType"
                            }
                        },
                        "endorsements" : {
                            "description" : "Allows endorsers to make specific claims about the CLR, or any assertion, achievement, or profile referenced in the CLR.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/EndorsementDType"
                            }
                        },
                        "issuedOn" : {
                            "description" : "Model Primitive Datatype = DateTime. Timestamp of when the CLR was published.",
                            "type" : "string",
                            "format" : "date-time"
                        },
                        "learner" : {
                            "$ref" : "#/components/schemas/ProfileDType"
                        },
                        "name" : {
                            "description" : "Model Primitive Datatype = String. Optional name of the CLR.",
                            "type" : "string"
                        },
                        "partial" : {
                            "description" : "Model Primitive Datatype = Boolean. True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.",
                            "type" : "boolean"
                        },
                        "publisher" : {
                            "$ref" : "#/components/schemas/ProfileDType"
                        },
                        "revocationReason" : {
                            "description" : "Model Primitive Datatype = String. If revoked, optional reason for revocation.",
                            "type" : "string"
                        },
                        "revoked" : {
                            "description" : "Model Primitive Datatype = Boolean. If True the CLR is revoked.",
                            "type" : "boolean"
                        },
                        "signedAssertions" : {
                            "description" : "Model Primitive Datatype = String. Signed assertions in JWS Compact Serialization format.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string",
                                "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                            }
                        },
                        "signedEndorsements" : {
                            "description" : "Model Primitive Datatype = String. Signed endorsements of the CLR or any Achievement, Assertion, or Profile in the CLR; in JWS Compact Serialization format.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string",
                                "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                            }
                        },
                        "verification" : {
                            "$ref" : "#/components/schemas/VerificationDType"
                        },
                        "@context" : {
                            "description" : "Model Primitive Datatype = String. The JSON-LD @context.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "id","issuedOn","learner","publisher","@context" ],
                    "additionalProperties" : false
                },
                "GetCryptographicKeyPayloadDType" : {
                    "description" : "Payload for the 'getKey' operation.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The URI of the CryptographicKey document. Used during signed verification.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'CryptographicKey'.",
                            "type" : "string"
                        },
                        "owner" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The identifier for the Profile that owns this PUBLIC KEY and the PRIVATE KEY used to sign the assertion or endorsement.",
                            "type" : "string"
                        },
                        "publicKeyPem" : {
                            "description" : "Model Primitive Datatype = String. The PUBLIC KEY in PEM format corresponding to the PRIVATE KEY used by the owner to sign the assertion or endorsement. The PEM key encoding is a widely-used method to express public keys, compatible with almost every Secure Sockets Layer library implementation.",
                            "type" : "string"
                        },
                        "@context" : {
                            "description" : "Model Primitive Datatype = String. The JSON-LD @context.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "id","owner","publicKeyPem","@context" ],
                    "additionalProperties" : false
                },
                "GetEndorsementPayloadDType" : {
                    "description" : "Payload for the 'getEndorsement' operation.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the Endorsement. If this Endorsement will be verified using Hosted verification, the value should be the URL of the hosted version of the Endorsement.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this entity. Normally 'Endorsement'.",
                            "type" : "string"
                        },
                        "claim" : {
                            "$ref" : "#/components/schemas/EndorsementClaimDType"
                        },
                        "issuedOn" : {
                            "description" : "Model Primitive Datatype = DateTime. Timestamp of when the endorsement was published.",
                            "type" : "string",
                            "format" : "date-time"
                        },
                        "issuer" : {
                            "$ref" : "#/components/schemas/EndorsementProfileDType"
                        },
                        "revocationReason" : {
                            "description" : "Model Primitive Datatype = String. If revoked, optional reason for revocation.",
                            "type" : "string"
                        },
                        "revoked" : {
                            "description" : "Model Primitive Datatype = Boolean. If True the endorsement is revoked.",
                            "type" : "boolean"
                        },
                        "verification" : {
                            "$ref" : "#/components/schemas/VerificationDType"
                        },
                        "@context" : {
                            "description" : "Model Primitive Datatype = String. The JSON-LD @context.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "id","claim","issuedOn","issuer","verification","@context" ],
                    "additionalProperties" : false
                },
                "GetRevocationListPayloadDType" : {
                    "description" : "Payload for the 'getRevocationList' operation.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = AnyURI. The URI of the RevocationList document. Used during Signed verification.",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this entity. Normally 'RevocationList'.",
                            "type" : "string"
                        },
                        "issuer" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The id of the Issuer.",
                            "type" : "string"
                        },
                        "revokedAssertions" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The ids of revoked Assertions, Clrs, and Endorsements.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string"
                            }
                        },
                        "@context" : {
                            "description" : "Model Primitive Datatype = String. The JSON-LD @context.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "id","issuer","@context" ],
                    "additionalProperties" : false
                },
                "IdentityDType" : {
                    "description" : "A collection of information about the recipient of an achievement assertion.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the Identity.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The type should identify the property by which the recipient of an Assertion is identified. This value should be an IRI mapped in the present context. For example, 'id' indicates that the identity property value is the id of the recipient's profile.",
                            "type" : "string"
                        },
                        "identity" : {
                            "description" : "Model Primitive Datatype = String. Either the hash of the identity or the plaintext value. If it's possible that the plaintext transmission and storage of the identity value would leak personally identifiable information where there is an expectation of privacy, it is strongly recommended that an IdentityHash be used.",
                            "type" : "string"
                        },
                        "hashed" : {
                            "description" : "Model Primitive Datatype = Boolean. Whether or not the identity value is hashed.",
                            "type" : "boolean"
                        },
                        "salt" : {
                            "description" : "Model Primitive Datatype = String. If the recipient is hashed, this should contain the string used to salt the hash. If this value is not provided, it should be assumed that the hash was not salted.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "type","identity","hashed" ],
                    "additionalProperties" : true
                },
                "PostClrPayloadDType" : {
                    "description" : "Payload for the 'postClr' operation. Only one format (signed or unsigned) is allowed.",
                    "type" : "object",
                    "properties" : {
                        "clr" : {
                            "$ref" : "#/components/schemas/ClrDType"
                        },
                        "signedClr" : {
                            "description" : "Model Primitive Datatype = String. The signed Clr in JWS Compact Serialization format.",
                            "type" : "string",
                            "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                        }
                    },
                    "additionalProperties" : false
                },
                "ProfileDType" : {
                    "description" : "A Profile is a collection of information that describes the person or organization using Comprehensive Learner Record (CLR). Publishers, learners, and issuers must be represented as profiles. Recipients, endorsers, or other entities may also be represented using this vocabulary.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Globally unique IRI for the Learner, Publisher, and Issuer Profile. If the IRI is a URL it must resolve to a Profile resource. The Assertion Recipient is identified by reference to the Learner's Profile via the id, email, url, telephone, sourcedId, or studentId property.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Profile'.",
                            "type" : "string"
                        },
                        "address" : {
                            "$ref" : "#/components/schemas/AddressDType"
                        },
                        "additionalName" : {
                            "description" : "Model Primitive Datatype = String. An additional name for a person, can be used for a middle name.",
                            "type" : "string"
                        },
                        "birthDate" : {
                            "description" : "Model Primitive Datatype = Date. Birthdate of the person.",
                            "type" : "string",
                            "format" : "date"
                        },
                        "description" : {
                            "description" : "Model Primitive Datatype = String. A short description of the individual or organization.",
                            "type" : "string"
                        },
                        "email" : {
                            "description" : "Model Primitive Datatype = String. A contact email address for the individual or organization.",
                            "type" : "string"
                        },
                        "endorsements" : {
                            "description" : "Allows endorsers to make specific claims about the individual or organization represented by this profile.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/EndorsementDType"
                            }
                        },
                        "familyName" : {
                            "description" : "Model Primitive Datatype = String. Family name of a person. In the U.S., the last name of a person.",
                            "type" : "string"
                        },
                        "givenName" : {
                            "description" : "Model Primitive Datatype = String. Given name of a person. In the U.S., the first name of a person.",
                            "type" : "string"
                        },
                        "identifiers" : {
                            "description" : "A set of System Identifiers that represent other identifiers for this Profile.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/SystemIdentifierDType"
                            }
                        },
                        "image" : {
                            "description" : "Model Primitive Datatype = NormalizedString. IRI of an image representing the individual or organization. May be a DATA URI or the URL where the image may be found.",
                            "type" : "string"
                        },
                        "name" : {
                            "description" : "Model Primitive Datatype = String. The full name of the individual or organization.",
                            "type" : "string"
                        },
                        "official" : {
                            "description" : "Model Primitive Datatype = String. The name of the authorized official for the Issuer.",
                            "type" : "string"
                        },
                        "parentOrg" : {
                            "$ref" : "#/components/schemas/ProfileDType"
                        },
                        "publicKey" : {
                            "$ref" : "#/components/schemas/CryptographicKeyDType"
                        },
                        "revocationList" : {
                            "description" : "Model Primitive Datatype = AnyURI. The URL of the Revocation List document used for marking revocation of signed Assertions, CLRs, and Endorsements. Required for issuer profiles.",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "signedEndorsements" : {
                            "description" : "Model Primitive Datatype = String. Signed endorsements in JWS Compact Serialization format.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string",
                                "pattern" : "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                            }
                        },
                        "sourcedId" : {
                            "description" : "Model Primitive Datatype = String. The individual's or organization's unique 'sourcedId' value, which is used for providing interoperability with other identity systems.",
                            "type" : "string"
                        },
                        "studentId" : {
                            "description" : "Model Primitive Datatype = String. An institution's student identifier for the person. This is frequently issued through a Student Information System.",
                            "type" : "string"
                        },
                        "telephone" : {
                            "description" : "Model Primitive Datatype = String. Primary phone number for the individual or organization.",
                            "type" : "string"
                        },
                        "url" : {
                            "description" : "Model Primitive Datatype = AnyURI. Web resource that uniquely represents or belongs to the individual. This may be a resource about the individual, hosting provided by the institution to the individual, or an web resource independently controlled by the individual.",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "verification" : {
                            "$ref" : "#/components/schemas/VerificationDType"
                        }
                    },
                    "required" : [ "id" ],
                    "additionalProperties" : true
                },
                "ResultDType" : {
                    "description" : "Describes a result of an achievement.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the object.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'Result'.",
                            "type" : "string"
                        },
                        "achievedLevel" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The id of the RubricCriterionLevel achieved.",
                            "type" : "string"
                        },
                        "alignments" : {
                            "description" : "The alignments between this result and nodes in external frameworks. This set of alignments are in addition to the set of alignments defined in the corresponding ResultDescription object.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/AlignmentDType"
                            }
                        },
                        "resultDescription" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The id of the ResultDescription describing this result.",
                            "type" : "string"
                        },
                        "status" : {
                            "description" : "The status of the achievement. Required if 'ResultType' is 'Status'.",
                            "type" : "string",
                            "enum" : [ "Completed","Enrolled","Failed","InProgress","OnHold","Withdrew" ]
                        },
                        "value" : {
                            "description" : "Model Primitive Datatype = String. A grade or value representing the result of the performance, or demonstration, of the achievement.  For example, 'A' if the recipient received a grade of A in the class. ",
                            "type" : "string"
                        }
                    },
                    "required" : [ "resultDescription" ],
                    "additionalProperties" : true
                },
                "ResultDescriptionDType" : {
                    "description" : "Describes a possible achievement result.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the ResultDescription.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'ResultDescription'.",
                            "type" : "string"
                        },
                        "alignments" : {
                            "description" : "The alignments between this result description and nodes in external frameworks.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/AlignmentDType"
                            }
                        },
                        "allowedValues" : {
                            "description" : "Model Primitive Datatype = String. The ordered from 'low' to 'high' set of allowed values.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string"
                            }
                        },
                        "name" : {
                            "description" : "Model Primitive Datatype = String. The name of the result.",
                            "type" : "string"
                        },
                        "requiredLevel" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The id of the RubricCriterionLevel required to 'pass'.",
                            "type" : "string"
                        },
                        "requiredValue" : {
                            "description" : "Model Primitive Datatype = String. The value from allowedValues or within the range of valueMin to valueMax required to 'pass'.",
                            "type" : "string"
                        },
                        "resultType" : {
                            "description" : "The type of result. This is an extensible enumerated vocabulary.",
                            "anyOf" : [
                                    {
                                        "description" : "Model Primitive Datatype = String.",
                                        "type" : "string",
                                        "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+"
                                    },
                                    {
                                        "type" : "string",
                                        "enum" : [ "GradePointAverage","LetterGrade","Percent","PerformanceLevel","PredictedScore","Result","RawScore","RubricCriterion","RubricCriterionLevel","RubricScore","ScaledScore","Status" ]
                                    }
                            ]
                        },
                        "rubricCriterionLevels" : {
                            "description" : "The ordered from 'low' to 'high' set of rubric criterion levels that may be asserted.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/RubricCriterionLevelDType"
                            }
                        },
                        "valueMax" : {
                            "description" : "Model Primitive Datatype = String. The maximum possible result that may be asserted.",
                            "type" : "string"
                        },
                        "valueMin" : {
                            "description" : "Model Primitive Datatype = String. The minimum possible result that may be asserted.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "id","name","resultType" ],
                    "additionalProperties" : true
                },
                "RubricCriterionLevelDType" : {
                    "description" : "Describes a rubric criterion level.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the ResultCriterionLevel.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "Model Primitive Datatype = String. The JSON-LD type of this object. Normally 'RubricCriterionLevel'.",
                            "type" : "string"
                        },
                        "alignments" : {
                            "description" : "The alignments between this rubric criterion level and nodes in external frameworks.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "$ref" : "#/components/schemas/AlignmentDType"
                            }
                        },
                        "description" : {
                            "description" : "Model Primitive Datatype = String. A description of the rubric criterion level.",
                            "type" : "string"
                        },
                        "level" : {
                            "description" : "Model Primitive Datatype = String. The rubric performance level in terms of success.",
                            "type" : "string"
                        },
                        "name" : {
                            "description" : "Model Primitive Datatype = String. The name of the RubricCriterionLevel.",
                            "type" : "string"
                        },
                        "points" : {
                            "description" : "Model Primitive Datatype = String. The number of grade points corresponding to a specific rubric level.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "id","name" ],
                    "additionalProperties" : true
                },
                "SystemIdentifierDType" : {
                    "description" : "A SystemIdentifier represents a single, system-local identifier for an Achievement.",
                    "type" : "object",
                    "properties" : {
                        "type" : {
                            "description" : "Model Primitive Datatype = NormalizedString. The JSON-LD type of this object. Normally 'SystemIdentifier'.",
                            "type" : "string"
                        },
                        "identifier" : {
                            "description" : "Model Primitive Datatype = String. Opaque string representing the system identifier value.",
                            "type" : "string"
                        },
                        "identifierType" : {
                            "description" : "The identifier type. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention. For example, the NCES School ID might be 'ext:NcesSchoolId'. Extended vocabulary terms must start with 'ext:' followed by any valid JSON string value. Please see the latest version of the CLR Implementation Guide for suggested values.",
                            "anyOf" : [
                                    {
                                        "type" : "string",
                                        "enum" : [ "LisSourcedId","OneRosterSourcedId" ]
                                    },
                                    {
                                        "description" : "Model Primitive Datatype = String.",
                                        "type" : "string",
                                        "pattern" : "(ext:)[a-zA-Z0-9\\.\\-_]+"
                                    }
                            ]
                        }
                    },
                    "required" : [ "identifier","identifierType" ],
                    "additionalProperties" : true
                },
                "VerificationDType" : {
                    "description" : "Information a reviewer can use to verify an Assertion, Clr, or Endorsement.",
                    "type" : "object",
                    "properties" : {
                        "id" : {
                            "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for the Verification.",
                            "type" : "string"
                        },
                        "type" : {
                            "description" : "The JSON-LD type of this object. The strongly typed value indicates the verification method.",
                            "type" : "string",
                            "enum" : [ "Hosted","Signed","Verification" ]
                        },
                        "allowedOrigins" : {
                            "description" : "Model Primitive Datatype = String. The host registered name subcomponent of an allowed origin. Any given id URI will be considered valid.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string"
                            }
                        },
                        "creator" : {
                            "description" : "Model Primitive Datatype = AnyURI. The (HTTP) id of the key used to sign the Assertion, CLR, or Endorsement. If not present, verifiers will check the public key declared in the referenced issuer Profile. If a key is declared here, it must be authorized in the issuer Profile as well. creator is expected to be the dereferencable URI of a document that describes a CryptographicKey.",
                            "type" : "string",
                            "format" : "uri"
                        },
                        "startsWith" : {
                            "description" : "Model Primitive Datatype = String. The URI fragment that the verification property must start with. Valid Assertions, Clrs, and Endorsements must have an id within this scope. Multiple values allowed, and Assertions, Clrs, and Endorsements will be considered valid if their id starts with one of these values.",
                            "type" : "array",
                            "minItems" : 0,
                            "items" : {
                                "type" : "string"
                            }
                        },
                        "verificationProperty" : {
                            "description" : "Model Primitive Datatype = String. The property to be used for verification. Only 'id' is supported. Verifiers will consider 'id' the default value if verificationProperty is omitted or if an issuer Profile has no explicit verification instructions, so it may be safely omitted.",
                            "type" : "string"
                        }
                    },
                    "required" : [ "type" ],
                    "additionalProperties" : true
                },
                "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" : [ "forbidden","fullsuccess","internal_server_error","invalid_data","invalid_query_parameter","misdirected_request","not_acceptable","not_allowed","not_modified","server_busy","unauthorizedrequest","unknown" ]
                        }
                    },
                    "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","failure","processing","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 Comprehensive Learner Record Standard OpenAPI YAML Definition 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/spec/clr/v1p0/schema/openapi/clr.yaml).

    # #####################################################################################
    # YAML File Information
    # #####################################################################################
    # 
    # Author:         Jeff Bohrer (IMS Global), Andy Miller (IMS Global)
    # Date:           January 14, 2021
    # Version:        1.0
    # Status:         IMS Final Release
    # Description:    The Comprehensive Learner Record Standard enables the exchange of data about users and their achievements between a Comprehensive Learner Record Standard provider and the consumers of the associated data. This standard 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 final release of the Comprehensive Learner Record Standard v1.0.
    # 
    # License:        IPR and Distribution Notices
    # 
    #                 This machine readable file is derived from the IMS Comprehensive Learner Record Standard Version 1.0
    #                 found at http://www.imsglobal.org/clr and the original IMS Global schema binding or code base
    #                 http://www.imsglobal.org/clr.
    # 
    #                 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-03-17
    # 
    # 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: Comprehensive Learner Record Standard OpenAPI (YAML) Definition
        description: The Comprehensive Learner Record Standard enables the exchange of data about users and their achievements between a Comprehensive Learner Record Standard provider and the consumers of the associated data. This standard 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/clr/v1p0/
    schemes: 
        - http
        - https
    consumes: 
        - application/json
    produces: 
        - application/json
    
    #####################################################################################
    #                                  Tags                                             #
    #####################################################################################
    tags: 
        - name: AssertionsManager
          description: |
            The set of service operations that manage access to Assertions for Hosted Verification.
        - name: ClrsManager
          description: |
            The set of service operations that manage access to CLRs.
        - name: DiscoveryManager
          description: |
            The set of service operations that manage access to the DiscoveryDocument for dynamic consumer registration.
        - name: EndorsementsManager
          description: |
            The set of service operations that manage access to Endorsements for Hosted Verification.
        - name: KeysManager
          description: |
            The set of service operations that manage access to CryptographicKeys for Signed Verification.
        - name: RevocationsManager
          description: |
            The set of service operations that manage access to RevocationLists for Signed Verification.
    
    #####################################################################################
    #                                 Security                                          #
    #####################################################################################
    securityDefinitions:
        OAuth2CCG:
            type: oauth2
            description: OAuth 2.0 Client Credentials authorization per IMS Security Framework.
            flow: application
            tokenUrl: https://provider/token
            scopes: 
                https://purl.imsglobal.org/spec/clr/v1p0/scope/delete: Grants the app permission to delete your comprehensive learner records on this host.
                https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly: Grants the app permission to read your comprehensive learner records on this host.
                https://purl.imsglobal.org/spec/clr/v1p0/scope/replace: Grants the app permission to create or replace your comprehensive learner records on this host.
        OAuth2ACG:
            type: oauth2
            description: OAuth 2.0 Authorization Code Grant authorization per IMS Security Framework.
            flow: accessCode
            authorizationUrl: https://provider/authorize
            tokenUrl: https://provider/token
            scopes: 
                https://purl.imsglobal.org/spec/clr/v1p0/scope/delete: Grants the app permission to delete your comprehensive learner records on this host.
                https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly: Grants the app permission to read your comprehensive learner records on this host.
                https://purl.imsglobal.org/spec/clr/v1p0/scope/replace: Grants the app permission to create or replace your comprehensive learner records on this host.
    
    
    #####################################################################################
    #                                   Paths                                           #
    #####################################################################################
    paths: 
        /assertions/{sourcedId}:
            get:
                operationId: getAssertion
                summary: The REST read request message for the getAssertion() API call.
                tags: 
                    - AssertionsManager
                description: |
                    Returns the current version of the specified Assertion. This operation is used to verify a Hosted Assertion.
                parameters: 
                    - name: sourcedId
                      in: path
                      description: |
                          The unique identifier of the Assertion.
                      required: true
                      type: string
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource is returned in the payload.
                        schema: 
                            $ref: "#/definitions/GetAssertionPayloadDType"
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not Found' - The resource was not found.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
    
        /clrs:
            get:
                operationId: getClrs
                summary: The REST read request message for the getClrs() API call.
                tags: 
                    - ClrsManager
                description: |
                    The set of CLRs the user is authorized to access are returned in the payload of the response message.
                parameters: 
                    - name: limit
                      in: query
                      description: |
                          The number of results to return.
                      required: false
                      type: integer
                      format: int32
                      allowEmptyValue: false
                      default: 100
                      minimum: 1
                    - name: offset
                      in: query
                      description: |
                          The index of the first record to return. (zero indexed)
                      required: false
                      type: integer
                      format: int32
                      allowEmptyValue: false
                      minimum: 0
                    - name: since
                      in: query
                      description: |
                          Retrieve CLRs that were issued after the provided timestamp. Must be an ISO 8601 compatible timestamp with a time zone indicator.
                      required: false
                      type: string
                      format: date-time
                      allowEmptyValue: false
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly
                    - OAuth2ACG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource is returned in the payload.
                        schema: 
                            $ref: "#/definitions/ClrSetDType"
                        headers: 
                            "X-Total-Count" :
                                description: |
                                    The total number of resources that are available to be returned
                                type: integer
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            'Unauthorized' - The request requires user authentication.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "403" : 
                        description: |
                            'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not Found' - There are no resources behind the URI.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully. The exact error should be explained in the error payload.
            post:
                operationId: postClr
                summary: The REST createbp request message for the postClr() API call.
                tags: 
                    - ClrsManager
                description: |
                    Create or replace a CLR.
                parameters: 
                    - name: clrIn
                      in: body
                      description: |
                          The CLR to be created or replaced.
                      required: true
                      schema: 
                          $ref: "#/definitions/PostClrPayloadDType"
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/replace
                    - OAuth2ACG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/replace
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource was successfully replaced.
                        schema: 
                            $ref: "#/definitions/PostClrPayloadDType"
                    "201" : 
                        description: |
                            'Created` - The resource was successfully created.
                        schema: 
                            $ref: "#/definitions/PostClrPayloadDType"
                    "304" : 
                        description: |
                            'Not Modified' - The client can use cached data.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            'Unauthorized' - The request requires user authentication.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "403" : 
                        description: |
                            'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not Found' - There is no resource behind the URI.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "405" : 
                        description: |
                            'Method Not Allowed' - The provider does not support this operation.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully. The exact error should be explained in the error payload.
    
        /clrs/{sourcedId}:
            delete:
                operationId: deleteClr
                summary: The REST delete request message for the deleteClr() API call.
                tags: 
                    - ClrsManager
                description: |
                    Delete a CLR.
                parameters: 
                    - name: sourcedId
                      in: path
                      description: |
                          The unique identifier of the CLR to delete.
                      required: true
                      type: string
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/delete
                    - OAuth2ACG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/delete
                responses: 
                    "200" : 
                        description: |
                            'OK' - The request succeeded and the resource was deleted.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "202" : 
                        description: |
                            'Accepted' - The request was accepted and the resource will be deleted.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "204" : 
                        description: |
                            'No Content' - The resource was successfully deleted.
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            'Unauthorized' - The request requires an user authentication.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "403" : 
                        description: |
                            'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not found' - There is no resource behind the URI.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "405" : 
                        description: |
                            'Method Not Allowed' - The provider does not support this operation.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully. The exact error should be explained in the error payload.
            get:
                operationId: getClr
                summary: The REST read request message for the getClr() API call.
                tags: 
                    - ClrsManager
                description: |
                    Returns the current version of the specified Clr. This operation is used to verify a Hosted Clr.
                parameters: 
                    - name: sourcedId
                      in: path
                      description: |
                          The unique identifier of the Clr.
                      required: true
                      type: string
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly
                    - OAuth2ACG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource is returned in the payload.
                        schema: 
                            $ref: "#/definitions/GetClrPayloadDType"
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            'Unauthorized' - The request requires user authentication.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "403" : 
                        description: |
                            'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not Found' – There is no resource behind the URI.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "410" : 
                        description: |
                            'Gone' - Marks the entity as revoked. The response may include the entity body.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully.
    
        /discovery:
            get:
                operationId: getDiscoveryDocument
                summary: The REST read request message for the getDiscoveryDocument() API call.
                tags: 
                    - DiscoveryManager
                description: |
                    Returns the DiscoveryDocument if the provider supports dynamic CLR consumer registration.
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource is returned in the payload.
                        schema: 
                            $ref: "#/definitions/DiscoveryDocumentDType"
                    "404" : 
                        description: |
                            'Not Found' - There is no resource behind the URI.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully.
    
        /endorsements/{sourcedId}:
            get:
                operationId: getEndorsement
                summary: The REST read request message for the getEndorsement() API call.
                tags: 
                    - EndorsementsManager
                description: |
                    Returns the current version of the specified Endorsement. This operation is used to verify a Hosted Endorsement.
                parameters: 
                    - name: sourcedId
                      in: path
                      description: |
                          The unique identifier of the Endorsement.
                      required: true
                      type: string
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource is returned in the payload.
                        schema: 
                            $ref: "#/definitions/GetEndorsementPayloadDType"
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not Found' - The resource was not found.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
    
        /keys/{sourcedId}:
            get:
                operationId: getKey
                summary: The REST read request message for the getKey() API call.
                tags: 
                    - KeysManager
                description: |
                    Returns the current version of the specified CryptographicKey. This operation is used to verify a Signed Assertion, Clr, or Endorsement.
                parameters: 
                    - name: sourcedId
                      in: path
                      description: |
                          The unique identifier of the CryptographicKey.
                      required: true
                      type: string
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource is returned in the payload.
                        schema: 
                            $ref: "#/definitions/GetCryptographicKeyPayloadDType"
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not Found' - The resource was not found.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
    
        /revocations/{sourcedId}:
            get:
                operationId: getRevocationList
                summary: The REST read request message for the getRevocationList() API call.
                tags: 
                    - RevocationsManager
                description: |
                    Returns the current version of the issuer's RevocationList. This operation is used to verify a Signed Assertion, Clr, or Endorsement.
                parameters: 
                    - name: sourcedId
                      in: path
                      description: |
                          The unique identifier of the RevocationList.
                      required: true
                      type: string
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource is returned in the payload.
                        schema: 
                            $ref: "#/definitions/GetRevocationListPayloadDType"
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not Found' - The resource was not found.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully.
                        schema: 
                            $ref: "#/definitions/imsx_StatusInfoDType"
    
    
    #####################################################################################
    #                               Definitions                                         #
    #####################################################################################
    definitions: 
        AchievementDType:
            description: |
                An accomplishment such as completing a degree, mastering a competency, or course completion that may be asserted about one or more learners.
            type: object
            required: 
                - id
                - name
                - issuer
            properties: 
                id: 
                    description: Globally unique IRI for the Achievement. If the IRI is a URL it must resolve to an Achievement resource. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this object. Normally 'Achievement'. Model Primitive Datatype = NormalizedString.
                    type: string
                achievementType: 
                    description: |
                        A CLR Achievement can represent many different types of achievement from an assessment result to membership. Use 'Achievement' to indicate an achievement not in the list of allowed values.
                    type: string
                alignments: 
                    description: |
                        Alignment objects describe an alignment between this achievement and a node in an educational framework.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/AlignmentDType"
                associations: 
                    description: |
                        Associations between this achievement and other achievements.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/AssociationDType"
                creditsAvailable: 
                    description: Credit hours associated with this entity, or credit hours possible. For example '3.0'. Model Primitive Datatype = Float.
                    type: number
                    format: float
                description: 
                    description: A short description of the achievement. May be the same as name if no description is available. Model Primitive Datatype = String.
                    type: string
                endorsements: 
                    description: |
                        Allows endorsers to make specific claims about the Achievement.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/EndorsementDType"
                humanCode: 
                    description: The code, generally human readable, associated with an achievement. Model Primitive Datatype = String.
                    type: string
                identifiers: 
                    description: |
                        A set of System Identifiers that represent other identifiers for this Achievement.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/SystemIdentifierDType"
                name: 
                    description: The name of the achievement. Model Primitive Datatype = String.
                    type: string
                fieldOfStudy: 
                    description: Category, subject, area of study,  discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology.  Model Primitive Datatype = String.
                    type: string
                image: 
                    description: IRI of an image representing the achievement. May be a Data URI or the URL where the image may be found. Model Primitive Datatype = NormalizedString.
                    type: string
                issuer: 
                    $ref: "#/definitions/ProfileDType"
                level: 
                    description: Text that describes the level of achievement apart from how the achievement was performed or demonstrated. Examples would include 'Level 1', 'Level 2', 'Level 3', or 'Bachelors', 'Masters', 'Doctoral'. Model Primitive Datatype = String.
                    type: string
                requirement: 
                    $ref: "#/definitions/CriteriaDType"
                resultDescriptions: 
                    description: |
                        The set of result descriptions that may be asserted as results with this achievement.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/ResultDescriptionDType"
                signedEndorsements: 
                    description: |
                        Signed endorsements in JWS Compact Serialization format. Model Primitive Datatype = String.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                        pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                specialization: 
                    description: Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include Entrepreneurship, Technical Communication, and Finance. Model Primitive Datatype = String.
                    type: string
                tags: 
                    description: Tags that describe the type of achievement. Model Primitive Datatype = String.
                    type: array
                    minItems: 0
                    items: 
                        type: string
            additionalProperties: true
        AddressDType:
            description: |
                Based on schema.org Address object.
            type: object
            properties: 
                id: 
                    description: Unique IRI for the Address. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this object. Normally 'Address'. Model Primitive Datatype = NormalizedString.
                    type: string
                addressCountry: 
                    description: The country. For example, USA. You can also provide the two-letter ISO 3166-1 alpha-2 country code. Model Primitive Datatype = String.
                    type: string
                addressLocality: 
                    description: The locality. For example, Mountain View. Model Primitive Datatype = String.
                    type: string
                addressRegion: 
                    description: The region. For example, CA. Model Primitive Datatype = String.
                    type: string
                postalCode: 
                    description: The postal code. For example, 94043. Model Primitive Datatype = String.
                    type: string
                postOfficeBoxNumber: 
                    description: The post office box number for PO box addresses. Model Primitive Datatype = String.
                    type: string
                streetAddress: 
                    description: The street address. For example, 1600 Amphitheatre Pkwy. Model Primitive Datatype = String.
                    type: string
            additionalProperties: true
        AlignmentDType:
            description: |
                Alignment is based on the schema.org AlignmentObject.
            type: object
            required: 
                - targetName
                - targetUrl
            properties: 
                id: 
                    description: Unique IRI for the object. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this entity. Normally 'Alignment'. Model Primitive Datatype = NormalizedString.
                    type: string
                targetCode: 
                    description: If applicable, a locally unique string identifier that identifies the alignment target within its framework. Model Primitive Datatype = String.
                    type: string
                targetDescription: 
                    description: The description of a node in an established educational framework. Model Primitive Datatype = String.
                    type: string
                targetName: 
                    description: The name of a node in an established educational framework. Model Primitive Datatype = String.
                    type: string
                targetFramework: 
                    description: The name of the framework to which the resource being described is aligned. Model Primitive Datatype = String.
                    type: string
                targetType: 
                    description: |
                        The type of the alignment target node. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.
                    type: string
                targetUrl: 
                    description: The URL of a node in an established educational framework. When the alignment is to a CASE framework and the CASE Service support the CASE JSON-LD binding, the URL should be the 'uri' of the node document, otherwise the URL should be the CASE Service endpoint URL that returns the node JSON. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
            additionalProperties: true
        ArtifactDType:
            description: |
                An artifact that is part of an evidence object.
            type: object
            properties: 
                type: 
                    description: The JSON-LD type of the object. Normally 'Artifact'. Model Primitive Datatype = NormalizedString.
                    type: string
                description: 
                    description: A description of the artifact. Model Primitive Datatype = String.
                    type: string
                name: 
                    description: The name of the artifact. Model Primitive Datatype = String.
                    type: string
                url: 
                    description: IRI of the artifact. May be a Data URI or the URL where the artifact may be found. Model Primitive Datatype = NormalizedString.
                    type: string
            additionalProperties: true
        AssertionDType:
            description: |
                Assertions are representations of an Achievement awarded to a Learner.  It is used to share information about the Achievement Assertion, such as a result and verification method. Assertions are packaged for transmission as JSON objects with a set of mandatory and optional properties.
            type: object
            required: 
                - id
            properties: 
                id: 
                    description: Globally unique IRI for the Assertion. If the IRI is a URL it must resolve to an Assertion resource. If the Assertion is verified using Hosted verification, the IRI must be a URL. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this object. Normally 'Assertion'. Model Primitive Datatype = NormalizedString.
                    type: string
                achievement: 
                    $ref: "#/definitions/AchievementDType"
                activityEndDate: 
                    description: If present, end date for the activity. Model Primitive Datatype = DateTime.
                    type: string
                    format: date-time
                activityStartDate: 
                    description: If present, start date for the activity. Model Primitive Datatype = DateTime.
                    type: string
                    format: date-time
                creditsEarned: 
                    description: The number of credits earned, generally in semester or quarter credit hours.  This field correlates with the Achievement creditsAvailable field. Model Primitive Datatype = Float.
                    type: number
                    format: float
                endorsements: 
                    description: |
                        Allows endorsers to make specific claims about the assertion.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/EndorsementDType"
                evidence: 
                    description: |
                        Evidence describing the work that the recipient did to earn the achievement. This can be a webpage that links out to other pages if linking directly to the work is infeasible.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/EvidenceDType"
                expires: 
                    description: If the achievement has some notion of expiry, this indicates a timestamp when an assertion should no longer be considered valid. After this time, the assertion should be considered expired. Model Primitive Datatype = DateTime.
                    type: string
                    format: date-time
                image: 
                    description: IRI of an image representing the assertion. May be a Data URI or the URL where the image may be found. Model Primitive Datatype = NormalizedString.
                    type: string
                issuedOn: 
                    description: Timestamp of when the achievement was awarded. Required unless the assertion is revoked. Model Primitive Datatype = DateTime.
                    type: string
                    format: date-time
                licenseNumber: 
                    description: The license number that was issued with this assertion. Model Primitive Datatype = String.
                    type: string
                narrative: 
                    description: A narrative that describes the connection between multiple pieces of evidence. Likely only present if evidence is a multi-value array. Markdown allowed. Model Primitive Datatype = String.
                    type: string
                recipient: 
                    $ref: "#/definitions/IdentityDType"
                results: 
                    description: |
                        The set of results being asserted.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/ResultDType"
                revocationReason: 
                    description: Optional published reason for revocation, if revoked. Model Primitive Datatype = String.
                    type: string
                revoked: 
                    description: Defaults to false if this assertion is not referenced in a RevocationList. If revoked is true, only revoked and id are required properties, and many issuers strip a hosted assertion down to only those properties when revoked. Model Primitive Datatype = Boolean.
                    type: boolean
                role: 
                    description: Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc. Model Primitive Datatype = String.
                    type: string
                signedEndorsements: 
                    description: |
                        Signed endorsements in JWS Compact Serialization format. Model Primitive Datatype = String.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                        pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                source: 
                    $ref: "#/definitions/ProfileDType"
                term: 
                    description: The academic term in which this assertion was achieved. Model Primitive Datatype = String.
                    type: string
                verification: 
                    $ref: "#/definitions/VerificationDType"
            additionalProperties: true
        AssociationDType:
            description: |
                Association is based on the CASE AssociationLink object. An Association associates (relates) one Achievement with another Achievement.
            type: object
            required: 
                - associationType
                - targetId
                - title
            properties: 
                associationType: 
                    description: |
                        The type of association. This uses an enumerated vocabulary.
                    type: string
                    enum: 
                       - exactMatchOf
                       - exemplar
                       - hasSkillLevel
                       - isChildOf
                       - isParentOf
                       - isPartOf
                       - isPeerOf
                       - isRelatedTo
                       - precedes
                       - replacedBy
                targetId: 
                    description: The '@id' of another achievement, or target of the association. Model Primitive Datatype = NormalizedString.
                    type: string
                title: 
                    description: A human readable title for the associated achievement. Model Primitive Datatype = String.
                    type: string
            additionalProperties: true
        ClrDType:
            description: |
                A collection of assertions for a single person reported by a single publisher.
            type: object
            required: 
                - id
                - issuedOn
                - learner
                - publisher
            properties: 
                id: 
                    description: Globally unique IRI for the CLR. If the IRI is a URL is must resolve to a CLR resource and conform to the getClr endpoint format. If the CLR is verified using Hosted verification, the IRI must be a URL. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this object. Normally 'Clr'. Model Primitive Datatype = NormalizedString.
                    type: string
                achievements: 
                    description: |
                        Array of achievements that are related directly or indirectly through associations with the asserted achievements in the CLR. Primarily used to represent hierarchical pathways. Asserted achievements may appear in both this array and in the achievement assertion. If asserted achievements do appear in both places, they MUST match exactly.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/AchievementDType"
                assertions: 
                    description: |
                        The learner's asserted achievements.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/AssertionDType"
                endorsements: 
                    description: |
                        Allows endorsers to make specific claims about the CLR, or any assertion, achievement, or profile referenced in the CLR.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/EndorsementDType"
                issuedOn: 
                    description: Timestamp of when the CLR was published. Model Primitive Datatype = DateTime.
                    type: string
                    format: date-time
                learner: 
                    $ref: "#/definitions/ProfileDType"
                name: 
                    description: Optional name of the CLR. Model Primitive Datatype = String.
                    type: string
                partial: 
                    description: True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue. Model Primitive Datatype = Boolean.
                    type: boolean
                publisher: 
                    $ref: "#/definitions/ProfileDType"
                revocationReason: 
                    description: If revoked, optional reason for revocation. Model Primitive Datatype = String.
                    type: string
                revoked: 
                    description: If True the CLR is revoked. Model Primitive Datatype = Boolean.
                    type: boolean
                signedAssertions: 
                    description: |
                        Signed assertions in JWS Compact Serialization format. Model Primitive Datatype = String.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                        pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                signedEndorsements: 
                    description: |
                        Signed endorsements of the CLR or any Achievement, Assertion, or Profile in the CLR; in JWS Compact Serialization format. Model Primitive Datatype = String.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                        pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                verification: 
                    $ref: "#/definitions/VerificationDType"
            additionalProperties: true
        ClrSetDType:
            description: |
                A set of CLRs.
            type: object
            properties: 
                id: 
                    description: Unique IRI for the ClrSet. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this object. Normally 'ClrSet'. Model Primitive Datatype = NormalizedString.
                    type: string
                clrs: 
                    description: |
                        A set of Clrs
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/ClrDType"
                signedClrs: 
                    description: |
                        A set of Clrs in JWS Compact Serialization format. Model Primitive Datatype = String.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                        pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
            additionalProperties: false
        CriteriaDType:
            description: |
                Descriptive metadata about the achievements necessary to be recognized with an Assertion of a particular AchievementType. This data is added to the AchievementType so that it may be rendered when that AchievementType is displayed, instead of simply a link to human-readable criteria external to the Achievement Assertion. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether.
            type: object
            properties: 
                id: 
                    description: The URI of a webpage that describes the criteria for the Achievement in a human-readable format. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                type: 
                    description: The JSON-LD type of this object. Normally 'Criteria'. Model Primitive Datatype = NormalizedString.
                    type: string
                narrative: 
                    description: A narrative of what is needed to earn the achievement. Markdown allowed. Model Primitive Datatype = String.
                    type: string
            additionalProperties: true
        CryptographicKeyDType:
            description: |
                Based on the Key class from the W3C Web Payments Community Group Security Vocabulary. A CryptographicKey document identifies and describes a public key used to verify signed Assertions.
            type: object
            required: 
                - id
                - owner
                - publicKeyPem
            properties: 
                id: 
                    description: The URI of the CryptographicKey document. Used during signed verification. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this object. Normally 'CryptographicKey'. Model Primitive Datatype = NormalizedString.
                    type: string
                owner: 
                    description: The identifier for the Profile that owns this PUBLIC KEY and the PRIVATE KEY used to sign the assertion or endorsement. Model Primitive Datatype = NormalizedString.
                    type: string
                publicKeyPem: 
                    description: The PUBLIC KEY in PEM format corresponding to the PRIVATE KEY used by the owner to sign the assertion or endorsement. The PEM key encoding is a widely-used method to express public keys, compatible with almost every Secure Sockets Layer library implementation. Model Primitive Datatype = String.
                    type: string
            additionalProperties: true
        DiscoveryDocumentDType:
            description: |
                Configuration information about the provider implementation.
            type: object
            required: 
                - authorizationUrl
                - name
                - privacyPolicyUrl
                - registrationUrl
                - scopesOffered
                - termsOfServiceUrl
                - tokenUrl
            properties: 
                authorizationUrl: 
                    description: A fully qualifed URL to the provider's OAuth 2.0 Authorization endpoint. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                image: 
                    description: An image representing the provider. May be a Data URI or the URL where the image may be found. Model Primitive Datatype = NormalizedString.
                    type: string
                name: 
                    description: The user-facing name of the platform providing CLR services. Model Primitive Datatype = String.
                    type: string
                privacyPolicyUrl: 
                    description: A fully qualified URL to the provider's privacy policy. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                registrationUrl: 
                    description: A fully qualified URL to the provider's OAuth 2.0 Registration endpoint. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                scopesOffered: 
                    description: An array of OAuth 2.0 Scopes supported by the provider. Model Primitive Datatype = AnyURI.
                    type: array
                    minItems: 1
                    items: 
                        type: string
                        format: uri
                termsOfServiceUrl: 
                    description: A fully qualified URL to the provider's terms of service. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                tokenUrl: 
                    description: A fully qualified URL to the provider's OAuth 2.0 Token endpoint. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
            additionalProperties: false
        EndorsementDType:
            description: |
                An endorsement claim.
            type: object
            required: 
                - id
                - claim
                - issuedOn
                - issuer
                - verification
            properties: 
                id: 
                    description: Globally unique IRI for the Endorsement. If this Endorsement will be verified using Hosted verification, the value should be the URL of the hosted version of the Endorsement. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this entity. Normally 'Endorsement'. Model Primitive Datatype = NormalizedString.
                    type: string
                claim: 
                    $ref: "#/definitions/EndorsementClaimDType"
                issuedOn: 
                    description: Timestamp of when the endorsement was published. Model Primitive Datatype = DateTime.
                    type: string
                    format: date-time
                issuer: 
                    $ref: "#/definitions/EndorsementProfileDType"
                revocationReason: 
                    description: If revoked, optional reason for revocation. Model Primitive Datatype = String.
                    type: string
                revoked: 
                    description: If True the endorsement is revoked. Model Primitive Datatype = Boolean.
                    type: boolean
                verification: 
                    $ref: "#/definitions/VerificationDType"
            additionalProperties: true
        EndorsementClaimDType:
            description: |
                An entity, identified by an id and additional properties that the endorser would like to claim about that entity.
            type: object
            required: 
                - id
            properties: 
                id: 
                    description: The 'id' of the Profile, Achievement, Assertion, or CLR being endorsed. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this entity. Normally 'EndorsementClaim'. Model Primitive Datatype = NormalizedString.
                    type: string
                endorsementComment: 
                    description: An endorser's comment about the quality or fitness of the endorsed entity. Markdown allowed. Model Primitive Datatype = String.
                    type: string
            additionalProperties: true
        EndorsementProfileDType:
            description: |
                A Profile is a collection of information that describes the person or organization using Comprehensive Learner Record (CLR). Publishers, learners, and issuers must be represented as profiles. Recipients, endorsers, or other entities may also be represented using this vocabulary. An EndorsementProfile cannot have endorsements.
            type: object
            required: 
                - id
            properties: 
                id: 
                    description: Globally unique IRI for the Profile. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this entity. Normally 'Profile'. Unlike the Profile object, the EndorsementProfile object does not have an 'endorsements' property. Model Primitive Datatype = NormalizedString.
                    type: string
                additionalName: 
                    description: An additional name for a person, can be used for a middle name. Model Primitive Datatype = String.
                    type: string
                address: 
                    $ref: "#/definitions/AddressDType"
                description: 
                    description: A short description of the individual or organization. Model Primitive Datatype = String.
                    type: string
                email: 
                    description: A contact email address for the individual or organization. Model Primitive Datatype = String.
                    type: string
                familyName: 
                    description: Family name of a person. In the U.S., the last name of a person. Model Primitive Datatype = String.
                    type: string
                givenName: 
                    description: Given name of a person. In the U.S., the first name of a person. Model Primitive Datatype = String.
                    type: string
                identifiers: 
                    description: |
                        A set of System Identifiers that represent other identifiers for this Profile.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/SystemIdentifierDType"
                image: 
                    description: Image representing the individual or organization. Model Primitive Datatype = NormalizedString.
                    type: string
                name: 
                    description: The full name of the individual or organization. Model Primitive Datatype = String.
                    type: string
                official: 
                    description: The name of the authorized official for the Issuer. Model Primitive Datatype = String.
                    type: string
                publicKey: 
                    $ref: "#/definitions/CryptographicKeyDType"
                revocationList: 
                    description: The URL of the Revocation List document used for marking revocation of signed Assertions, CLRs, and Endorsements. Required for issuer profiles. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                sourcedId: 
                    description: The individual's unique 'sourcedId' value, which is used for providing interoperability with IMS Learning Information Services (LIS). Model Primitive Datatype = String.
                    type: string
                studentId: 
                    description: An institution's student identifier for the person. This is frequently issued through a Student Information System. Model Primitive Datatype = String.
                    type: string
                telephone: 
                    description: Primary phone number for the individual or organization. Model Primitive Datatype = String.
                    type: string
                url: 
                    description: Web resource that uniquely represents or belongs to the individual. This may be a resource about the individual, hosting provided by the institution to the individual, or an web resource independently controlled by the individual. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                verification: 
                    $ref: "#/definitions/VerificationDType"
            additionalProperties: true
        EvidenceDType:
            description: |
                One or more artifacts that represent supporting evidence for the record. Examples include text, media, websites, etc.
            type: object
            required: 
                - name
            properties: 
                id: 
                    description: The URI of a webpage presenting evidence of achievement. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                type: 
                    description: The JSON-LD type of this entity. Normally 'Evidence'. Model Primitive Datatype = NormalizedString.
                    type: string
                artifacts: 
                    description: |
                        Artifacts that are part of the evidence.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/ArtifactDType"
                audience: 
                    description: A description of the intended audience for a piece of evidence. Model Primitive Datatype = String.
                    type: string
                description: 
                    description: A longer description of the evidence. Model Primitive Datatype = String.
                    type: string
                genre: 
                    description: A string that describes the type of evidence. For example, Poetry, Prose, Film. Model Primitive Datatype = String.
                    type: string
                name: 
                    description: The name of the evidence. Model Primitive Datatype = String.
                    type: string
                narrative: 
                    description: A narrative that describes the evidence and process of achievement that led to an assertion. Markdown allowed. Model Primitive Datatype = String.
                    type: string
            additionalProperties: true
        GetAssertionPayloadDType:
            description: |
                Payload for the 'getAssertion' operation.
            type: object
            required: 
                - id
                - @context
            properties: 
                id: 
                    description: Globally unique IRI for the Assertion. If the IRI is a URL it must resolve to an Assertion resource. If the Assertion is verified using Hosted verification, the IRI must be a URL. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this object. Normally 'Assertion'. Model Primitive Datatype = NormalizedString.
                    type: string
                achievement: 
                    $ref: "#/definitions/AchievementDType"
                activityEndDate: 
                    description: If present, end date for the activity. Model Primitive Datatype = DateTime.
                    type: string
                    format: date-time
                activityStartDate: 
                    description: If present, start date for the activity. Model Primitive Datatype = DateTime.
                    type: string
                    format: date-time
                creditsEarned: 
                    description: The number of credits earned, generally in semester or quarter credit hours.  This field correlates with the Achievement creditsAvailable field. Model Primitive Datatype = Float.
                    type: number
                    format: float
                endorsements: 
                    description: |
                        Allows endorsers to make specific claims about the assertion.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/EndorsementDType"
                evidence: 
                    description: |
                        Evidence describing the work that the recipient did to earn the achievement. This can be a webpage that links out to other pages if linking directly to the work is infeasible.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/EvidenceDType"
                expires: 
                    description: If the achievement has some notion of expiry, this indicates a timestamp when an assertion should no longer be considered valid. After this time, the assertion should be considered expired. Model Primitive Datatype = DateTime.
                    type: string
                    format: date-time
                image: 
                    description: IRI of an image representing the assertion. May be a Data URI or the URL where the image may be found. Model Primitive Datatype = NormalizedString.
                    type: string
                issuedOn: 
                    description: Timestamp of when the achievement was awarded. Required unless the assertion is revoked. Model Primitive Datatype = DateTime.
                    type: string
                    format: date-time
                licenseNumber: 
                    description: The license number that was issued with this assertion. Model Primitive Datatype = String.
                    type: string
                narrative: 
                    description: A narrative that describes the connection between multiple pieces of evidence. Likely only present if evidence is a multi-value array. Markdown allowed. Model Primitive Datatype = String.
                    type: string
                recipient: 
                    $ref: "#/definitions/IdentityDType"
                results: 
                    description: |
                        The set of results being asserted.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/ResultDType"
                revocationReason: 
                    description: Optional published reason for revocation, if revoked. Model Primitive Datatype = String.
                    type: string
                revoked: 
                    description: Defaults to false if this assertion is not referenced in a RevocationList. If revoked is true, only revoked and id are required properties, and many issuers strip a hosted assertion down to only those properties when revoked. Model Primitive Datatype = Boolean.
                    type: boolean
                role: 
                    description: Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc. Model Primitive Datatype = String.
                    type: string
                signedEndorsements: 
                    description: |
                        Signed endorsements in JWS Compact Serialization format. Model Primitive Datatype = String.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                        pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                source: 
                    $ref: "#/definitions/ProfileDType"
                term: 
                    description: The academic term in which this assertion was achieved. Model Primitive Datatype = String.
                    type: string
                verification: 
                    $ref: "#/definitions/VerificationDType"
                @context: 
                    description: The JSON-LD @context. Model Primitive Datatype = String.
                    type: string
            additionalProperties: false
        GetClrPayloadDType:
            description: |
                Payload for the 'getClr' operation.
            type: object
            required: 
                - id
                - issuedOn
                - learner
                - publisher
                - @context
            properties: 
                id: 
                    description: Globally unique IRI for the CLR. If the IRI is a URL is must resolve to a CLR resource and conform to the getClr endpoint format. If the CLR is verified using Hosted verification, the IRI must be a URL. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this object. Normally 'Clr'. Model Primitive Datatype = NormalizedString.
                    type: string
                achievements: 
                    description: |
                        Array of achievements that are related directly or indirectly through associations with the asserted achievements in the CLR. Primarily used to represent hierarchical pathways. Asserted achievements may appear in both this array and in the achievement assertion. If asserted achievements do appear in both places, they MUST match exactly.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/AchievementDType"
                assertions: 
                    description: |
                        The learner's asserted achievements.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/AssertionDType"
                endorsements: 
                    description: |
                        Allows endorsers to make specific claims about the CLR, or any assertion, achievement, or profile referenced in the CLR.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/EndorsementDType"
                issuedOn: 
                    description: Timestamp of when the CLR was published. Model Primitive Datatype = DateTime.
                    type: string
                    format: date-time
                learner: 
                    $ref: "#/definitions/ProfileDType"
                name: 
                    description: Optional name of the CLR. Model Primitive Datatype = String.
                    type: string
                partial: 
                    description: True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue. Model Primitive Datatype = Boolean.
                    type: boolean
                publisher: 
                    $ref: "#/definitions/ProfileDType"
                revocationReason: 
                    description: If revoked, optional reason for revocation. Model Primitive Datatype = String.
                    type: string
                revoked: 
                    description: If True the CLR is revoked. Model Primitive Datatype = Boolean.
                    type: boolean
                signedAssertions: 
                    description: |
                        Signed assertions in JWS Compact Serialization format. Model Primitive Datatype = String.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                        pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                signedEndorsements: 
                    description: |
                        Signed endorsements of the CLR or any Achievement, Assertion, or Profile in the CLR; in JWS Compact Serialization format. Model Primitive Datatype = String.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                        pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                verification: 
                    $ref: "#/definitions/VerificationDType"
                @context: 
                    description: The JSON-LD @context. Model Primitive Datatype = String.
                    type: string
            additionalProperties: false
        GetCryptographicKeyPayloadDType:
            description: |
                Payload for the 'getKey' operation.
            type: object
            required: 
                - id
                - owner
                - publicKeyPem
                - @context
            properties: 
                id: 
                    description: The URI of the CryptographicKey document. Used during signed verification. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this object. Normally 'CryptographicKey'. Model Primitive Datatype = NormalizedString.
                    type: string
                owner: 
                    description: The identifier for the Profile that owns this PUBLIC KEY and the PRIVATE KEY used to sign the assertion or endorsement. Model Primitive Datatype = NormalizedString.
                    type: string
                publicKeyPem: 
                    description: The PUBLIC KEY in PEM format corresponding to the PRIVATE KEY used by the owner to sign the assertion or endorsement. The PEM key encoding is a widely-used method to express public keys, compatible with almost every Secure Sockets Layer library implementation. Model Primitive Datatype = String.
                    type: string
                @context: 
                    description: The JSON-LD @context. Model Primitive Datatype = String.
                    type: string
            additionalProperties: false
        GetEndorsementPayloadDType:
            description: |
                Payload for the 'getEndorsement' operation.
            type: object
            required: 
                - id
                - claim
                - issuedOn
                - issuer
                - verification
                - @context
            properties: 
                id: 
                    description: Globally unique IRI for the Endorsement. If this Endorsement will be verified using Hosted verification, the value should be the URL of the hosted version of the Endorsement. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this entity. Normally 'Endorsement'. Model Primitive Datatype = NormalizedString.
                    type: string
                claim: 
                    $ref: "#/definitions/EndorsementClaimDType"
                issuedOn: 
                    description: Timestamp of when the endorsement was published. Model Primitive Datatype = DateTime.
                    type: string
                    format: date-time
                issuer: 
                    $ref: "#/definitions/EndorsementProfileDType"
                revocationReason: 
                    description: If revoked, optional reason for revocation. Model Primitive Datatype = String.
                    type: string
                revoked: 
                    description: If True the endorsement is revoked. Model Primitive Datatype = Boolean.
                    type: boolean
                verification: 
                    $ref: "#/definitions/VerificationDType"
                @context: 
                    description: The JSON-LD @context. Model Primitive Datatype = String.
                    type: string
            additionalProperties: false
        GetRevocationListPayloadDType:
            description: |
                Payload for the 'getRevocationList' operation.
            type: object
            required: 
                - id
                - issuer
                - @context
            properties: 
                id: 
                    description: The URI of the RevocationList document. Used during Signed verification. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                type: 
                    description: The JSON-LD type of this entity. Normally 'RevocationList'. Model Primitive Datatype = NormalizedString.
                    type: string
                issuer: 
                    description: The id of the Issuer. Model Primitive Datatype = NormalizedString.
                    type: string
                revokedAssertions: 
                    description: |
                        The ids of revoked Assertions, Clrs, and Endorsements. Model Primitive Datatype = NormalizedString.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                @context: 
                    description: The JSON-LD @context. Model Primitive Datatype = String.
                    type: string
            additionalProperties: false
        IdentityDType:
            description: |
                A collection of information about the recipient of an achievement assertion.
            type: object
            required: 
                - type
                - identity
                - hashed
            properties: 
                id: 
                    description: Unique IRI for the Identity. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The type should identify the property by which the recipient of an Assertion is identified. This value should be an IRI mapped in the present context. For example, 'id' indicates that the identity property value is the id of the recipient's profile. Model Primitive Datatype = NormalizedString.
                    type: string
                identity: 
                    description: Either the hash of the identity or the plaintext value. If it's possible that the plaintext transmission and storage of the identity value would leak personally identifiable information where there is an expectation of privacy, it is strongly recommended that an IdentityHash be used. Model Primitive Datatype = String.
                    type: string
                hashed: 
                    description: Whether or not the identity value is hashed. Model Primitive Datatype = Boolean.
                    type: boolean
                salt: 
                    description: If the recipient is hashed, this should contain the string used to salt the hash. If this value is not provided, it should be assumed that the hash was not salted. Model Primitive Datatype = String.
                    type: string
            additionalProperties: true
        PostClrPayloadDType:
            description: |
                Payload for the 'postClr' operation. Only one format (signed or unsigned) is allowed.
            type: object
            properties: 
                clr: 
                    $ref: "#/definitions/ClrDType"
                signedClr: 
                    description: The signed Clr in JWS Compact Serialization format. Model Primitive Datatype = String.
                    type: string
                    pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
            additionalProperties: false
        ProfileDType:
            description: |
                A Profile is a collection of information that describes the person or organization using Comprehensive Learner Record (CLR). Publishers, learners, and issuers must be represented as profiles. Recipients, endorsers, or other entities may also be represented using this vocabulary.
            type: object
            required: 
                - id
            properties: 
                id: 
                    description: Globally unique IRI for the Learner, Publisher, and Issuer Profile. If the IRI is a URL it must resolve to a Profile resource. The Assertion Recipient is identified by reference to the Learner's Profile via the id, email, url, telephone, sourcedId, or studentId property. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this object. Normally 'Profile'. Model Primitive Datatype = NormalizedString.
                    type: string
                address: 
                    $ref: "#/definitions/AddressDType"
                additionalName: 
                    description: An additional name for a person, can be used for a middle name. Model Primitive Datatype = String.
                    type: string
                birthDate: 
                    description: Birthdate of the person. Model Primitive Datatype = Date.
                    type: string
                    format: date
                description: 
                    description: A short description of the individual or organization. Model Primitive Datatype = String.
                    type: string
                email: 
                    description: A contact email address for the individual or organization. Model Primitive Datatype = String.
                    type: string
                endorsements: 
                    description: |
                        Allows endorsers to make specific claims about the individual or organization represented by this profile.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/EndorsementDType"
                familyName: 
                    description: Family name of a person. In the U.S., the last name of a person. Model Primitive Datatype = String.
                    type: string
                givenName: 
                    description: Given name of a person. In the U.S., the first name of a person. Model Primitive Datatype = String.
                    type: string
                identifiers: 
                    description: |
                        A set of System Identifiers that represent other identifiers for this Profile.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/SystemIdentifierDType"
                image: 
                    description: IRI of an image representing the individual or organization. May be a DATA URI or the URL where the image may be found. Model Primitive Datatype = NormalizedString.
                    type: string
                name: 
                    description: The full name of the individual or organization. Model Primitive Datatype = String.
                    type: string
                official: 
                    description: The name of the authorized official for the Issuer. Model Primitive Datatype = String.
                    type: string
                parentOrg: 
                    $ref: "#/definitions/ProfileDType"
                publicKey: 
                    $ref: "#/definitions/CryptographicKeyDType"
                revocationList: 
                    description: The URL of the Revocation List document used for marking revocation of signed Assertions, CLRs, and Endorsements. Required for issuer profiles. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                signedEndorsements: 
                    description: |
                        Signed endorsements in JWS Compact Serialization format. Model Primitive Datatype = String.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                        pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                sourcedId: 
                    description: The individual's or organization's unique 'sourcedId' value, which is used for providing interoperability with other identity systems. Model Primitive Datatype = String.
                    type: string
                studentId: 
                    description: An institution's student identifier for the person. This is frequently issued through a Student Information System. Model Primitive Datatype = String.
                    type: string
                telephone: 
                    description: Primary phone number for the individual or organization. Model Primitive Datatype = String.
                    type: string
                url: 
                    description: Web resource that uniquely represents or belongs to the individual. This may be a resource about the individual, hosting provided by the institution to the individual, or an web resource independently controlled by the individual. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                verification: 
                    $ref: "#/definitions/VerificationDType"
            additionalProperties: true
        ResultDType:
            description: |
                Describes a result of an achievement.
            type: object
            required: 
                - resultDescription
            properties: 
                id: 
                    description: Unique IRI for the object. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this object. Normally 'Result'. Model Primitive Datatype = NormalizedString.
                    type: string
                achievedLevel: 
                    description: The id of the RubricCriterionLevel achieved. Model Primitive Datatype = NormalizedString.
                    type: string
                alignments: 
                    description: |
                        The alignments between this result and nodes in external frameworks. This set of alignments are in addition to the set of alignments defined in the corresponding ResultDescription object.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/AlignmentDType"
                resultDescription: 
                    description: The id of the ResultDescription describing this result. Model Primitive Datatype = NormalizedString.
                    type: string
                status: 
                    description: |
                        The status of the achievement. Required if 'ResultType' is 'Status'.
                    type: string
                    enum: 
                       - Completed
                       - Enrolled
                       - Failed
                       - InProgress
                       - OnHold
                       - Withdrew
                value: 
                    description: A grade or value representing the result of the performance, or demonstration, of the achievement.  For example, 'A' if the recipient received a grade of A in the class.  Model Primitive Datatype = String.
                    type: string
            additionalProperties: true
        ResultDescriptionDType:
            description: |
                Describes a possible achievement result.
            type: object
            required: 
                - id
                - name
                - resultType
            properties: 
                id: 
                    description: Unique IRI for the ResultDescription. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this object. Normally 'ResultDescription'. Model Primitive Datatype = NormalizedString.
                    type: string
                alignments: 
                    description: |
                        The alignments between this result description and nodes in external frameworks.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/AlignmentDType"
                allowedValues: 
                    description: The ordered from 'low' to 'high' set of allowed values. Model Primitive Datatype = String.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                name: 
                    description: The name of the result. Model Primitive Datatype = String.
                    type: string
                requiredLevel: 
                    description: The id of the RubricCriterionLevel required to 'pass'. Model Primitive Datatype = NormalizedString.
                    type: string
                requiredValue: 
                    description: The value from allowedValues or within the range of valueMin to valueMax required to 'pass'. Model Primitive Datatype = String.
                    type: string
                resultType: 
                    description: |
                        The type of result. This is an extensible enumerated vocabulary.
                    type: string
                rubricCriterionLevels: 
                    description: |
                        The ordered from 'low' to 'high' set of rubric criterion levels that may be asserted.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/RubricCriterionLevelDType"
                valueMax: 
                    description: The maximum possible result that may be asserted. Model Primitive Datatype = String.
                    type: string
                valueMin: 
                    description: The minimum possible result that may be asserted. Model Primitive Datatype = String.
                    type: string
            additionalProperties: true
        RubricCriterionLevelDType:
            description: |
                Describes a rubric criterion level.
            type: object
            required: 
                - id
                - name
            properties: 
                id: 
                    description: Unique IRI for the ResultCriterionLevel. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: The JSON-LD type of this object. Normally 'RubricCriterionLevel'. Model Primitive Datatype = String.
                    type: string
                alignments: 
                    description: |
                        The alignments between this rubric criterion level and nodes in external frameworks.
                    type: array
                    minItems: 0
                    items: 
                        $ref: "#/definitions/AlignmentDType"
                description: 
                    description: A description of the rubric criterion level. Model Primitive Datatype = String.
                    type: string
                level: 
                    description: The rubric performance level in terms of success. Model Primitive Datatype = String.
                    type: string
                name: 
                    description: The name of the RubricCriterionLevel. Model Primitive Datatype = String.
                    type: string
                points: 
                    description: The number of grade points corresponding to a specific rubric level. Model Primitive Datatype = String.
                    type: string
            additionalProperties: true
        SystemIdentifierDType:
            description: |
                A SystemIdentifier represents a single, system-local identifier for an Achievement.
            type: object
            required: 
                - identifier
                - identifierType
            properties: 
                type: 
                    description: The JSON-LD type of this object. Normally 'SystemIdentifier'. Model Primitive Datatype = NormalizedString.
                    type: string
                identifier: 
                    description: Opaque string representing the system identifier value. Model Primitive Datatype = String.
                    type: string
                identifierType: 
                    description: |
                        The identifier type. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention. For example, the NCES School ID might be 'ext:NcesSchoolId'. Extended vocabulary terms must start with 'ext:' followed by any valid JSON string value. Please see the latest version of the CLR Implementation Guide for suggested values.
                    type: string
            additionalProperties: true
        VerificationDType:
            description: |
                Information a reviewer can use to verify an Assertion, Clr, or Endorsement.
            type: object
            required: 
                - type
            properties: 
                id: 
                    description: Unique IRI for the Verification. Model Primitive Datatype = NormalizedString.
                    type: string
                type: 
                    description: |
                        The JSON-LD type of this object. The strongly typed value indicates the verification method.
                    type: string
                    enum: 
                       - Hosted
                       - Signed
                       - Verification
                allowedOrigins: 
                    description: The host registered name subcomponent of an allowed origin. Any given id URI will be considered valid. Model Primitive Datatype = String.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                creator: 
                    description: The (HTTP) id of the key used to sign the Assertion, CLR, or Endorsement. If not present, verifiers will check the public key declared in the referenced issuer Profile. If a key is declared here, it must be authorized in the issuer Profile as well. creator is expected to be the dereferencable URI of a document that describes a CryptographicKey. Model Primitive Datatype = AnyURI.
                    type: string
                    format: uri
                startsWith: 
                    description: The URI fragment that the verification property must start with. Valid Assertions, Clrs, and Endorsements must have an id within this scope. Multiple values allowed, and Assertions, Clrs, and Endorsements will be considered valid if their id starts with one of these values. Model Primitive Datatype = String.
                    type: array
                    minItems: 0
                    items: 
                        type: string
                verificationProperty: 
                    description: The property to be used for verification. Only 'id' is supported. Verifiers will consider 'id' the default value if verificationProperty is omitted or if an issuer Profile has no explicit verification instructions, so it may be safely omitted. Model Primitive Datatype = String.
                    type: string
            additionalProperties: true
        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: 
                       - forbidden
                       - fullsuccess
                       - internal_server_error
                       - invalid_data
                       - invalid_query_parameter
                       - misdirected_request
                       - not_acceptable
                       - not_allowed
                       - not_modified
                       - server_busy
                       - unauthorizedrequest
                       - unknown
            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
                       - failure
                       - processing
                       - 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/spec/clr/v1p0/schema/openapi/clr.yaml).

    # #####################################################################################
    # YAML File Information
    # #####################################################################################
    # 
    # Author:         Jeff Bohrer (IMS Global), Andy Miller (IMS Global)
    # Date:           January 14, 2021
    # Version:        1.0
    # Status:         IMS Final Release
    # Description:    The Comprehensive Learner Record Standard enables the exchange of data about users and their achievements between a Comprehensive Learner Record Standard provider and the consumers of the associated data. This standard 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 final release of the Comprehensive Learner Record Standard v1.0.
    # 
    # License:        IPR and Distribution Notices
    # 
    #                 This machine readable file is derived from the IMS Comprehensive Learner Record Standard Version 1.0
    #                 found at http://www.imsglobal.org/clr and the original IMS Global schema binding or code base
    #                 http://www.imsglobal.org/clr.
    # 
    #                 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-03-17
    # 
    # 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: Comprehensive Learner Record Standard OpenAPI (YAML) Definition
        description: The Comprehensive Learner Record Standard enables the exchange of data about users and their achievements between a Comprehensive Learner Record Standard provider and the consumers of the associated data. This standard 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: https://www.imsglobal.org/ims/clr/v1p0/
          description: The above Server URL should be changed to the actual server location.
    
    #####################################################################################
    #                                  Tags                                             #
    #####################################################################################
    tags: 
        - name: AssertionsManager
          description: |
            The set of service operations that manage access to Assertions for Hosted Verification.
        - name: ClrsManager
          description: |
            The set of service operations that manage access to CLRs.
        - name: DiscoveryManager
          description: |
            The set of service operations that manage access to the DiscoveryDocument for dynamic consumer registration.
        - name: EndorsementsManager
          description: |
            The set of service operations that manage access to Endorsements for Hosted Verification.
        - name: KeysManager
          description: |
            The set of service operations that manage access to CryptographicKeys for Signed Verification.
        - name: RevocationsManager
          description: |
            The set of service operations that manage access to RevocationLists for Signed Verification.
    
    #####################################################################################
    #                                   Paths                                           #
    #####################################################################################
    paths: 
        /assertions/{sourcedId}:
            get:
                operationId: getAssertion
                summary: The REST read request message for the getAssertion() API call.
                tags: 
                    - AssertionsManager
                description: |
                    Returns the current version of the specified Assertion. This operation is used to verify a Hosted Assertion.
                parameters: 
                    - name: sourcedId
                      in: path
                      description: |
                          The unique identifier of the Assertion.
                      required: true
                      schema: 
                          type: string
                      style: simple
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource is returned in the payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/GetAssertionPayloadDType"
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not Found' - The resource was not found.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
    
        /clrs:
            get:
                operationId: getClrs
                summary: The REST read request message for the getClrs() API call.
                tags: 
                    - ClrsManager
                description: |
                    The set of CLRs the user is authorized to access are returned in the payload of the response message.
                parameters: 
                    - name: limit
                      in: query
                      description: |
                          The number of results to return.
                      required: false
                      schema: 
                          type: integer
                          format: int32
                          default: 100
                          minimum: 1
                      allowEmptyValue: false
                      style: form
                    - name: offset
                      in: query
                      description: |
                          The index of the first record to return. (zero indexed)
                      required: false
                      schema: 
                          type: integer
                          format: int32
                          minimum: 0
                      allowEmptyValue: false
                      style: form
                    - name: since
                      in: query
                      description: |
                          Retrieve CLRs that were issued after the provided timestamp. Must be an ISO 8601 compatible timestamp with a time zone indicator.
                      required: false
                      schema: 
                          type: string
                          format: date-time
                      allowEmptyValue: false
                      style: form
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly
                    - OAuth2ACG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource is returned in the payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/ClrSetDType"
                        headers: 
                            "X-Total-Count" :
                                description: |
                                    The total number of resources that are available to be returned
                                schema: 
                                    type: integer
                        links: 
                            "next" :
                                description: |
                                    Get the next set of resources i.e. from offset to offset+limit
                                operationId: getClrs
                                parameters: 
                                    "limit" : "$request.path.limit"
                                    "offset" : "$request.path.offset"
                            "last" :
                                description: |
                                    Get the last set of resources i.e. from offset to end
                                operationId: getClrs
                                parameters: 
                                    "limit" : "$request.path.limit"
                                    "offset" : "$request.path.offset"
                            "first" :
                                description: |
                                    Get the first set of resources i.e. from first to limit
                                operationId: getClrs
                                parameters: 
                                    "limit" : "$request.path.limit"
                                    "offset" : "$request.path.offset"
                            "prev" :
                                description: |
                                    Get the previous set of resources i.e. from last_offset to last_offset+limit
                                operationId: getClrs
                                parameters: 
                                    "limit" : "$request.path.limit"
                                    "offset" : "$request.path.offset"
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            'Unauthorized' - The request requires user authentication.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "403" : 
                        description: |
                            'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not Found' - There are no resources behind the URI.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully. The exact error should be explained in the error payload.
            post:
                operationId: postClr
                summary: The REST createbp request message for the postClr() API call.
                tags: 
                    - ClrsManager
                description: |
                    Create or replace a CLR.
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/replace
                    - OAuth2ACG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/replace
                requestBody:
                    description: |
                        The CLR to be created or replaced.
                    content: 
                        application/json: 
                            schema: 
                                $ref: "#/components/schemas/PostClrPayloadDType"
                    required: true
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource was successfully replaced.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/PostClrPayloadDType"
                    "201" : 
                        description: |
                            'Created` - The resource was successfully created.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/PostClrPayloadDType"
                    "304" : 
                        description: |
                            'Not Modified' - The client can use cached data.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            'Unauthorized' - The request requires user authentication.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "403" : 
                        description: |
                            'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not Found' - There is no resource behind the URI.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "405" : 
                        description: |
                            'Method Not Allowed' - The provider does not support this operation.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully. The exact error should be explained in the error payload.
    
        /clrs/{sourcedId}:
            delete:
                operationId: deleteClr
                summary: The REST delete request message for the deleteClr() API call.
                tags: 
                    - ClrsManager
                description: |
                    Delete a CLR.
                parameters: 
                    - name: sourcedId
                      in: path
                      description: |
                          The unique identifier of the CLR to delete.
                      required: true
                      schema: 
                          type: string
                      style: simple
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/delete
                    - OAuth2ACG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/delete
                responses: 
                    "200" : 
                        description: |
                            'OK' - The request succeeded and the resource was deleted.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "202" : 
                        description: |
                            'Accepted' - The request was accepted and the resource will be deleted.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "204" : 
                        description: |
                            'No Content' - The resource was successfully deleted.
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            'Unauthorized' - The request requires an user authentication.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "403" : 
                        description: |
                            'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not found' - There is no resource behind the URI.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "405" : 
                        description: |
                            'Method Not Allowed' - The provider does not support this operation.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully. The exact error should be explained in the error payload.
            get:
                operationId: getClr
                summary: The REST read request message for the getClr() API call.
                tags: 
                    - ClrsManager
                description: |
                    Returns the current version of the specified Clr. This operation is used to verify a Hosted Clr.
                parameters: 
                    - name: sourcedId
                      in: path
                      description: |
                          The unique identifier of the Clr.
                      required: true
                      schema: 
                          type: string
                      style: simple
                security:
                    - OAuth2CCG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly
                    - OAuth2ACG:
                        - https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource is returned in the payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/GetClrPayloadDType"
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the error payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "401" : 
                        description: |
                            'Unauthorized' - The request requires user authentication.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "403" : 
                        description: |
                            'Forbidden' - The server understood the request, but is refusing it or the access is not allowed.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not Found' – There is no resource behind the URI.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "410" : 
                        description: |
                            'Gone' - Marks the entity as revoked. The response may include the entity body.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully.
    
        /discovery:
            get:
                operationId: getDiscoveryDocument
                summary: The REST read request message for the getDiscoveryDocument() API call.
                tags: 
                    - DiscoveryManager
                description: |
                    Returns the DiscoveryDocument if the provider supports dynamic CLR consumer registration.
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource is returned in the payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/DiscoveryDocumentDType"
                    "404" : 
                        description: |
                            'Not Found' - There is no resource behind the URI.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully.
    
        /endorsements/{sourcedId}:
            get:
                operationId: getEndorsement
                summary: The REST read request message for the getEndorsement() API call.
                tags: 
                    - EndorsementsManager
                description: |
                    Returns the current version of the specified Endorsement. This operation is used to verify a Hosted Endorsement.
                parameters: 
                    - name: sourcedId
                      in: path
                      description: |
                          The unique identifier of the Endorsement.
                      required: true
                      schema: 
                          type: string
                      style: simple
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource is returned in the payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/GetEndorsementPayloadDType"
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not Found' - The resource was not found.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
    
        /keys/{sourcedId}:
            get:
                operationId: getKey
                summary: The REST read request message for the getKey() API call.
                tags: 
                    - KeysManager
                description: |
                    Returns the current version of the specified CryptographicKey. This operation is used to verify a Signed Assertion, Clr, or Endorsement.
                parameters: 
                    - name: sourcedId
                      in: path
                      description: |
                          The unique identifier of the CryptographicKey.
                      required: true
                      schema: 
                          type: string
                      style: simple
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource is returned in the payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/GetCryptographicKeyPayloadDType"
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not Found' - The resource was not found.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
    
        /revocations/{sourcedId}:
            get:
                operationId: getRevocationList
                summary: The REST read request message for the getRevocationList() API call.
                tags: 
                    - RevocationsManager
                description: |
                    Returns the current version of the issuer's RevocationList. This operation is used to verify a Signed Assertion, Clr, or Endorsement.
                parameters: 
                    - name: sourcedId
                      in: path
                      description: |
                          The unique identifier of the RevocationList.
                      required: true
                      schema: 
                          type: string
                      style: simple
                responses: 
                    "200" : 
                        description: |
                            'OK' - The resource is returned in the payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/GetRevocationListPayloadDType"
                    "400" : 
                        description: |
                            'Bad Request' - The request was invalid or cannot be served. The exact error should be explained in the payload.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "404" : 
                        description: |
                            'Not Found' - The resource was not found.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "406" : 
                        description: |
                            'Not Acceptable' - The request did not include 'application/ld+json' in the Accept header.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "421" : 
                        description: |
                            'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
                    "default" : 
                        description: |
                            The request was not completed successfully.
                        content: 
                            application/json: 
                                schema: 
                                    $ref: "#/components/schemas/imsx_StatusInfoDType"
    
    
    #####################################################################################
    #                               Components                                          #
    #####################################################################################
    components:
        securitySchemes:
            OAuth2CCG:
                type: oauth2
                description: |
                    OAuth 2.0 Client Credentials authorization per IMS Security Framework.
                flows:
                    clientCredentials:
                        tokenUrl: https://provider/token
                        scopes: 
                            https://purl.imsglobal.org/spec/clr/v1p0/scope/delete: Grants the app permission to delete your comprehensive learner records on this host.
                            https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly: Grants the app permission to read your comprehensive learner records on this host.
                            https://purl.imsglobal.org/spec/clr/v1p0/scope/replace: Grants the app permission to create or replace your comprehensive learner records on this host.
            OAuth2ACG:
                type: oauth2
                description: |
                    OAuth 2.0 Authorization Code Grant authorization per IMS Security Framework.
                flows:
                    authorizationCode:
                        tokenUrl: https://provider/token
                        authorizationUrl: https://provider/authorize
                        refreshUrl: https://provider/token
                        scopes: 
                            https://purl.imsglobal.org/spec/clr/v1p0/scope/delete: Grants the app permission to delete your comprehensive learner records on this host.
                            https://purl.imsglobal.org/spec/clr/v1p0/scope/readonly: Grants the app permission to read your comprehensive learner records on this host.
                            https://purl.imsglobal.org/spec/clr/v1p0/scope/replace: Grants the app permission to create or replace your comprehensive learner records on this host.
        schemas: 
            AchievementDType:
                description: |
                    An accomplishment such as completing a degree, mastering a competency, or course completion that may be asserted about one or more learners.
                type: object
                required: 
                    - id
                    - name
                    - issuer
                properties: 
                    id: 
                        description: Globally unique IRI for the Achievement. If the IRI is a URL it must resolve to an Achievement resource. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this object. Normally 'Achievement'. Model Primitive Datatype = NormalizedString.
                        type: string
                    achievementType: 
                        description: |
                            A CLR Achievement can represent many different types of achievement from an assessment result to membership. Use 'Achievement' to indicate an achievement not in the list of allowed values.
                        anyOf: 
                                - enum: 
                                    - Achievement
                                    - Assessment
                                    - Assignment
                                    - Award
                                    - Badge
                                    - Certificate
                                    - Certification
                                    - Course
                                    - CommunityService
                                    - Competency
                                    - Co-Curricular
                                    - Degree
                                    - Diploma
                                    - Fieldwork
                                    - License
                                    - Membership
                                  type: string
                                - description: The data-type that enables an enumerated vocabulary to be extended. Model Primitive Datatype = String.
                                  type: string
                                  pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
                    alignments: 
                        description: |
                            Alignment objects describe an alignment between this achievement and a node in an educational framework.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/AlignmentDType"
                    associations: 
                        description: |
                            Associations between this achievement and other achievements.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/AssociationDType"
                    creditsAvailable: 
                        description: Credit hours associated with this entity, or credit hours possible. For example '3.0'. Model Primitive Datatype = Float.
                        type: number
                        format: float
                    description: 
                        description: A short description of the achievement. May be the same as name if no description is available. Model Primitive Datatype = String.
                        type: string
                    endorsements: 
                        description: |
                            Allows endorsers to make specific claims about the Achievement.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/EndorsementDType"
                    humanCode: 
                        description: The code, generally human readable, associated with an achievement. Model Primitive Datatype = String.
                        type: string
                    identifiers: 
                        description: |
                            A set of System Identifiers that represent other identifiers for this Achievement.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/SystemIdentifierDType"
                    name: 
                        description: The name of the achievement. Model Primitive Datatype = String.
                        type: string
                    fieldOfStudy: 
                        description: Category, subject, area of study,  discipline, or general branch of knowledge. Examples include Business, Education, Psychology, and Technology.  Model Primitive Datatype = String.
                        type: string
                    image: 
                        description: IRI of an image representing the achievement. May be a Data URI or the URL where the image may be found. Model Primitive Datatype = NormalizedString.
                        type: string
                    issuer: 
                        $ref: "#/components/schemas/ProfileDType"
                    level: 
                        description: Text that describes the level of achievement apart from how the achievement was performed or demonstrated. Examples would include 'Level 1', 'Level 2', 'Level 3', or 'Bachelors', 'Masters', 'Doctoral'. Model Primitive Datatype = String.
                        type: string
                    requirement: 
                        $ref: "#/components/schemas/CriteriaDType"
                    resultDescriptions: 
                        description: |
                            The set of result descriptions that may be asserted as results with this achievement.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/ResultDescriptionDType"
                    signedEndorsements: 
                        description: |
                            Signed endorsements in JWS Compact Serialization format. Model Primitive Datatype = String.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                            pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    specialization: 
                        description: Name given to the focus, concentration, or specific area of study defined in the achievement. Examples include Entrepreneurship, Technical Communication, and Finance. Model Primitive Datatype = String.
                        type: string
                    tags: 
                        description: Tags that describe the type of achievement. Model Primitive Datatype = String.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                additionalProperties: true
            AddressDType:
                description: |
                    Based on schema.org Address object.
                type: object
                properties: 
                    id: 
                        description: Unique IRI for the Address. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this object. Normally 'Address'. Model Primitive Datatype = NormalizedString.
                        type: string
                    addressCountry: 
                        description: The country. For example, USA. You can also provide the two-letter ISO 3166-1 alpha-2 country code. Model Primitive Datatype = String.
                        type: string
                    addressLocality: 
                        description: The locality. For example, Mountain View. Model Primitive Datatype = String.
                        type: string
                    addressRegion: 
                        description: The region. For example, CA. Model Primitive Datatype = String.
                        type: string
                    postalCode: 
                        description: The postal code. For example, 94043. Model Primitive Datatype = String.
                        type: string
                    postOfficeBoxNumber: 
                        description: The post office box number for PO box addresses. Model Primitive Datatype = String.
                        type: string
                    streetAddress: 
                        description: The street address. For example, 1600 Amphitheatre Pkwy. Model Primitive Datatype = String.
                        type: string
                additionalProperties: true
            AlignmentDType:
                description: |
                    Alignment is based on the schema.org AlignmentObject.
                type: object
                required: 
                    - targetName
                    - targetUrl
                properties: 
                    id: 
                        description: Unique IRI for the object. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this entity. Normally 'Alignment'. Model Primitive Datatype = NormalizedString.
                        type: string
                    targetCode: 
                        description: If applicable, a locally unique string identifier that identifies the alignment target within its framework. Model Primitive Datatype = String.
                        type: string
                    targetDescription: 
                        description: The description of a node in an established educational framework. Model Primitive Datatype = String.
                        type: string
                    targetName: 
                        description: The name of a node in an established educational framework. Model Primitive Datatype = String.
                        type: string
                    targetFramework: 
                        description: The name of the framework to which the resource being described is aligned. Model Primitive Datatype = String.
                        type: string
                    targetType: 
                        description: |
                            The type of the alignment target node. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention.
                        anyOf: 
                                - description: The data-type that enables an enumerated vocabulary to be extended. Model Primitive Datatype = String.
                                  type: string
                                  pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
                                - enum: 
                                    - CFItem
                                    - CFRubric
                                    - CFRubricCriterion
                                    - CFRubricCriterionLevel
                                    - CTDL
                                  type: string
                    targetUrl: 
                        description: The URL of a node in an established educational framework. When the alignment is to a CASE framework and the CASE Service support the CASE JSON-LD binding, the URL should be the 'uri' of the node document, otherwise the URL should be the CASE Service endpoint URL that returns the node JSON. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                additionalProperties: true
            ArtifactDType:
                description: |
                    An artifact that is part of an evidence object.
                type: object
                properties: 
                    type: 
                        description: The JSON-LD type of the object. Normally 'Artifact'. Model Primitive Datatype = NormalizedString.
                        type: string
                    description: 
                        description: A description of the artifact. Model Primitive Datatype = String.
                        type: string
                    name: 
                        description: The name of the artifact. Model Primitive Datatype = String.
                        type: string
                    url: 
                        description: IRI of the artifact. May be a Data URI or the URL where the artifact may be found. Model Primitive Datatype = NormalizedString.
                        type: string
                additionalProperties: true
            AssertionDType:
                description: |
                    Assertions are representations of an Achievement awarded to a Learner.  It is used to share information about the Achievement Assertion, such as a result and verification method. Assertions are packaged for transmission as JSON objects with a set of mandatory and optional properties.
                type: object
                required: 
                    - id
                properties: 
                    id: 
                        description: Globally unique IRI for the Assertion. If the IRI is a URL it must resolve to an Assertion resource. If the Assertion is verified using Hosted verification, the IRI must be a URL. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this object. Normally 'Assertion'. Model Primitive Datatype = NormalizedString.
                        type: string
                    achievement: 
                        $ref: "#/components/schemas/AchievementDType"
                    activityEndDate: 
                        description: If present, end date for the activity. Model Primitive Datatype = DateTime.
                        type: string
                        format: date-time
                    activityStartDate: 
                        description: If present, start date for the activity. Model Primitive Datatype = DateTime.
                        type: string
                        format: date-time
                    creditsEarned: 
                        description: The number of credits earned, generally in semester or quarter credit hours.  This field correlates with the Achievement creditsAvailable field. Model Primitive Datatype = Float.
                        type: number
                        format: float
                    endorsements: 
                        description: |
                            Allows endorsers to make specific claims about the assertion.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/EndorsementDType"
                    evidence: 
                        description: |
                            Evidence describing the work that the recipient did to earn the achievement. This can be a webpage that links out to other pages if linking directly to the work is infeasible.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/EvidenceDType"
                    expires: 
                        description: If the achievement has some notion of expiry, this indicates a timestamp when an assertion should no longer be considered valid. After this time, the assertion should be considered expired. Model Primitive Datatype = DateTime.
                        type: string
                        format: date-time
                    image: 
                        description: IRI of an image representing the assertion. May be a Data URI or the URL where the image may be found. Model Primitive Datatype = NormalizedString.
                        type: string
                    issuedOn: 
                        description: Timestamp of when the achievement was awarded. Required unless the assertion is revoked. Model Primitive Datatype = DateTime.
                        type: string
                        format: date-time
                    licenseNumber: 
                        description: The license number that was issued with this assertion. Model Primitive Datatype = String.
                        type: string
                    narrative: 
                        description: A narrative that describes the connection between multiple pieces of evidence. Likely only present if evidence is a multi-value array. Markdown allowed. Model Primitive Datatype = String.
                        type: string
                    recipient: 
                        $ref: "#/components/schemas/IdentityDType"
                    results: 
                        description: |
                            The set of results being asserted.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/ResultDType"
                    revocationReason: 
                        description: Optional published reason for revocation, if revoked. Model Primitive Datatype = String.
                        type: string
                    revoked: 
                        description: Defaults to false if this assertion is not referenced in a RevocationList. If revoked is true, only revoked and id are required properties, and many issuers strip a hosted assertion down to only those properties when revoked. Model Primitive Datatype = Boolean.
                        type: boolean
                    role: 
                        description: Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc. Model Primitive Datatype = String.
                        type: string
                    signedEndorsements: 
                        description: |
                            Signed endorsements in JWS Compact Serialization format. Model Primitive Datatype = String.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                            pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    source: 
                        $ref: "#/components/schemas/ProfileDType"
                    term: 
                        description: The academic term in which this assertion was achieved. Model Primitive Datatype = String.
                        type: string
                    verification: 
                        $ref: "#/components/schemas/VerificationDType"
                additionalProperties: true
            AssociationDType:
                description: |
                    Association is based on the CASE AssociationLink object. An Association associates (relates) one Achievement with another Achievement.
                type: object
                required: 
                    - associationType
                    - targetId
                    - title
                properties: 
                    associationType: 
                        description: |
                            The type of association. This uses an enumerated vocabulary.
                        type: string
                        enum: 
                           - exactMatchOf
                           - exemplar
                           - hasSkillLevel
                           - isChildOf
                           - isParentOf
                           - isPartOf
                           - isPeerOf
                           - isRelatedTo
                           - precedes
                           - replacedBy
                    targetId: 
                        description: The '@id' of another achievement, or target of the association. Model Primitive Datatype = NormalizedString.
                        type: string
                    title: 
                        description: A human readable title for the associated achievement. Model Primitive Datatype = String.
                        type: string
                additionalProperties: true
            ClrDType:
                description: |
                    A collection of assertions for a single person reported by a single publisher.
                type: object
                required: 
                    - id
                    - issuedOn
                    - learner
                    - publisher
                properties: 
                    id: 
                        description: Globally unique IRI for the CLR. If the IRI is a URL is must resolve to a CLR resource and conform to the getClr endpoint format. If the CLR is verified using Hosted verification, the IRI must be a URL. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this object. Normally 'Clr'. Model Primitive Datatype = NormalizedString.
                        type: string
                    achievements: 
                        description: |
                            Array of achievements that are related directly or indirectly through associations with the asserted achievements in the CLR. Primarily used to represent hierarchical pathways. Asserted achievements may appear in both this array and in the achievement assertion. If asserted achievements do appear in both places, they MUST match exactly.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/AchievementDType"
                    assertions: 
                        description: |
                            The learner's asserted achievements.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/AssertionDType"
                    endorsements: 
                        description: |
                            Allows endorsers to make specific claims about the CLR, or any assertion, achievement, or profile referenced in the CLR.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/EndorsementDType"
                    issuedOn: 
                        description: Timestamp of when the CLR was published. Model Primitive Datatype = DateTime.
                        type: string
                        format: date-time
                    learner: 
                        $ref: "#/components/schemas/ProfileDType"
                    name: 
                        description: Optional name of the CLR. Model Primitive Datatype = String.
                        type: string
                    partial: 
                        description: True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue. Model Primitive Datatype = Boolean.
                        type: boolean
                    publisher: 
                        $ref: "#/components/schemas/ProfileDType"
                    revocationReason: 
                        description: If revoked, optional reason for revocation. Model Primitive Datatype = String.
                        type: string
                    revoked: 
                        description: If True the CLR is revoked. Model Primitive Datatype = Boolean.
                        type: boolean
                    signedAssertions: 
                        description: |
                            Signed assertions in JWS Compact Serialization format. Model Primitive Datatype = String.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                            pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    signedEndorsements: 
                        description: |
                            Signed endorsements of the CLR or any Achievement, Assertion, or Profile in the CLR; in JWS Compact Serialization format. Model Primitive Datatype = String.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                            pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    verification: 
                        $ref: "#/components/schemas/VerificationDType"
                additionalProperties: true
            ClrSetDType:
                description: |
                    A set of CLRs.
                type: object
                properties: 
                    id: 
                        description: Unique IRI for the ClrSet. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this object. Normally 'ClrSet'. Model Primitive Datatype = NormalizedString.
                        type: string
                    clrs: 
                        description: |
                            A set of Clrs
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/ClrDType"
                    signedClrs: 
                        description: |
                            A set of Clrs in JWS Compact Serialization format. Model Primitive Datatype = String.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                            pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                additionalProperties: false
            CriteriaDType:
                description: |
                    Descriptive metadata about the achievements necessary to be recognized with an Assertion of a particular AchievementType. This data is added to the AchievementType so that it may be rendered when that AchievementType is displayed, instead of simply a link to human-readable criteria external to the Achievement Assertion. Embedding criteria allows either enhancement of an external criteria page or increased portability and ease of use by allowing issuers to skip hosting the formerly-required external criteria page altogether.
                type: object
                properties: 
                    id: 
                        description: The URI of a webpage that describes the criteria for the Achievement in a human-readable format. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    type: 
                        description: The JSON-LD type of this object. Normally 'Criteria'. Model Primitive Datatype = NormalizedString.
                        type: string
                    narrative: 
                        description: A narrative of what is needed to earn the achievement. Markdown allowed. Model Primitive Datatype = String.
                        type: string
                additionalProperties: true
            CryptographicKeyDType:
                description: |
                    Based on the Key class from the W3C Web Payments Community Group Security Vocabulary. A CryptographicKey document identifies and describes a public key used to verify signed Assertions.
                type: object
                required: 
                    - id
                    - owner
                    - publicKeyPem
                properties: 
                    id: 
                        description: The URI of the CryptographicKey document. Used during signed verification. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this object. Normally 'CryptographicKey'. Model Primitive Datatype = NormalizedString.
                        type: string
                    owner: 
                        description: The identifier for the Profile that owns this PUBLIC KEY and the PRIVATE KEY used to sign the assertion or endorsement. Model Primitive Datatype = NormalizedString.
                        type: string
                    publicKeyPem: 
                        description: The PUBLIC KEY in PEM format corresponding to the PRIVATE KEY used by the owner to sign the assertion or endorsement. The PEM key encoding is a widely-used method to express public keys, compatible with almost every Secure Sockets Layer library implementation. Model Primitive Datatype = String.
                        type: string
                additionalProperties: true
            DiscoveryDocumentDType:
                description: |
                    Configuration information about the provider implementation.
                type: object
                required: 
                    - authorizationUrl
                    - name
                    - privacyPolicyUrl
                    - registrationUrl
                    - scopesOffered
                    - termsOfServiceUrl
                    - tokenUrl
                properties: 
                    authorizationUrl: 
                        description: A fully qualifed URL to the provider's OAuth 2.0 Authorization endpoint. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    image: 
                        description: An image representing the provider. May be a Data URI or the URL where the image may be found. Model Primitive Datatype = NormalizedString.
                        type: string
                    name: 
                        description: The user-facing name of the platform providing CLR services. Model Primitive Datatype = String.
                        type: string
                    privacyPolicyUrl: 
                        description: A fully qualified URL to the provider's privacy policy. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    registrationUrl: 
                        description: A fully qualified URL to the provider's OAuth 2.0 Registration endpoint. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    scopesOffered: 
                        description: An array of OAuth 2.0 Scopes supported by the provider. Model Primitive Datatype = AnyURI.
                        type: array
                        minItems: 1
                        items: 
                            type: string
                            format: uri
                    termsOfServiceUrl: 
                        description: A fully qualified URL to the provider's terms of service. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    tokenUrl: 
                        description: A fully qualified URL to the provider's OAuth 2.0 Token endpoint. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                additionalProperties: false
            EndorsementDType:
                description: |
                    An endorsement claim.
                type: object
                required: 
                    - id
                    - claim
                    - issuedOn
                    - issuer
                    - verification
                properties: 
                    id: 
                        description: Globally unique IRI for the Endorsement. If this Endorsement will be verified using Hosted verification, the value should be the URL of the hosted version of the Endorsement. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this entity. Normally 'Endorsement'. Model Primitive Datatype = NormalizedString.
                        type: string
                    claim: 
                        $ref: "#/components/schemas/EndorsementClaimDType"
                    issuedOn: 
                        description: Timestamp of when the endorsement was published. Model Primitive Datatype = DateTime.
                        type: string
                        format: date-time
                    issuer: 
                        $ref: "#/components/schemas/EndorsementProfileDType"
                    revocationReason: 
                        description: If revoked, optional reason for revocation. Model Primitive Datatype = String.
                        type: string
                    revoked: 
                        description: If True the endorsement is revoked. Model Primitive Datatype = Boolean.
                        type: boolean
                    verification: 
                        $ref: "#/components/schemas/VerificationDType"
                additionalProperties: true
            EndorsementClaimDType:
                description: |
                    An entity, identified by an id and additional properties that the endorser would like to claim about that entity.
                type: object
                required: 
                    - id
                properties: 
                    id: 
                        description: The 'id' of the Profile, Achievement, Assertion, or CLR being endorsed. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this entity. Normally 'EndorsementClaim'. Model Primitive Datatype = NormalizedString.
                        type: string
                    endorsementComment: 
                        description: An endorser's comment about the quality or fitness of the endorsed entity. Markdown allowed. Model Primitive Datatype = String.
                        type: string
                additionalProperties: true
            EndorsementProfileDType:
                description: |
                    A Profile is a collection of information that describes the person or organization using Comprehensive Learner Record (CLR). Publishers, learners, and issuers must be represented as profiles. Recipients, endorsers, or other entities may also be represented using this vocabulary. An EndorsementProfile cannot have endorsements.
                type: object
                required: 
                    - id
                properties: 
                    id: 
                        description: Globally unique IRI for the Profile. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this entity. Normally 'Profile'. Unlike the Profile object, the EndorsementProfile object does not have an 'endorsements' property. Model Primitive Datatype = NormalizedString.
                        type: string
                    additionalName: 
                        description: An additional name for a person, can be used for a middle name. Model Primitive Datatype = String.
                        type: string
                    address: 
                        $ref: "#/components/schemas/AddressDType"
                    description: 
                        description: A short description of the individual or organization. Model Primitive Datatype = String.
                        type: string
                    email: 
                        description: A contact email address for the individual or organization. Model Primitive Datatype = String.
                        type: string
                    familyName: 
                        description: Family name of a person. In the U.S., the last name of a person. Model Primitive Datatype = String.
                        type: string
                    givenName: 
                        description: Given name of a person. In the U.S., the first name of a person. Model Primitive Datatype = String.
                        type: string
                    identifiers: 
                        description: |
                            A set of System Identifiers that represent other identifiers for this Profile.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/SystemIdentifierDType"
                    image: 
                        description: Image representing the individual or organization. Model Primitive Datatype = NormalizedString.
                        type: string
                    name: 
                        description: The full name of the individual or organization. Model Primitive Datatype = String.
                        type: string
                    official: 
                        description: The name of the authorized official for the Issuer. Model Primitive Datatype = String.
                        type: string
                    publicKey: 
                        $ref: "#/components/schemas/CryptographicKeyDType"
                    revocationList: 
                        description: The URL of the Revocation List document used for marking revocation of signed Assertions, CLRs, and Endorsements. Required for issuer profiles. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    sourcedId: 
                        description: The individual's unique 'sourcedId' value, which is used for providing interoperability with IMS Learning Information Services (LIS). Model Primitive Datatype = String.
                        type: string
                    studentId: 
                        description: An institution's student identifier for the person. This is frequently issued through a Student Information System. Model Primitive Datatype = String.
                        type: string
                    telephone: 
                        description: Primary phone number for the individual or organization. Model Primitive Datatype = String.
                        type: string
                    url: 
                        description: Web resource that uniquely represents or belongs to the individual. This may be a resource about the individual, hosting provided by the institution to the individual, or an web resource independently controlled by the individual. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    verification: 
                        $ref: "#/components/schemas/VerificationDType"
                additionalProperties: true
            EvidenceDType:
                description: |
                    One or more artifacts that represent supporting evidence for the record. Examples include text, media, websites, etc.
                type: object
                required: 
                    - name
                properties: 
                    id: 
                        description: The URI of a webpage presenting evidence of achievement. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    type: 
                        description: The JSON-LD type of this entity. Normally 'Evidence'. Model Primitive Datatype = NormalizedString.
                        type: string
                    artifacts: 
                        description: |
                            Artifacts that are part of the evidence.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/ArtifactDType"
                    audience: 
                        description: A description of the intended audience for a piece of evidence. Model Primitive Datatype = String.
                        type: string
                    description: 
                        description: A longer description of the evidence. Model Primitive Datatype = String.
                        type: string
                    genre: 
                        description: A string that describes the type of evidence. For example, Poetry, Prose, Film. Model Primitive Datatype = String.
                        type: string
                    name: 
                        description: The name of the evidence. Model Primitive Datatype = String.
                        type: string
                    narrative: 
                        description: A narrative that describes the evidence and process of achievement that led to an assertion. Markdown allowed. Model Primitive Datatype = String.
                        type: string
                additionalProperties: true
            GetAssertionPayloadDType:
                description: |
                    Payload for the 'getAssertion' operation.
                type: object
                required: 
                    - id
                    - @context
                properties: 
                    id: 
                        description: Globally unique IRI for the Assertion. If the IRI is a URL it must resolve to an Assertion resource. If the Assertion is verified using Hosted verification, the IRI must be a URL. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this object. Normally 'Assertion'. Model Primitive Datatype = NormalizedString.
                        type: string
                    achievement: 
                        $ref: "#/components/schemas/AchievementDType"
                    activityEndDate: 
                        description: If present, end date for the activity. Model Primitive Datatype = DateTime.
                        type: string
                        format: date-time
                    activityStartDate: 
                        description: If present, start date for the activity. Model Primitive Datatype = DateTime.
                        type: string
                        format: date-time
                    creditsEarned: 
                        description: The number of credits earned, generally in semester or quarter credit hours.  This field correlates with the Achievement creditsAvailable field. Model Primitive Datatype = Float.
                        type: number
                        format: float
                    endorsements: 
                        description: |
                            Allows endorsers to make specific claims about the assertion.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/EndorsementDType"
                    evidence: 
                        description: |
                            Evidence describing the work that the recipient did to earn the achievement. This can be a webpage that links out to other pages if linking directly to the work is infeasible.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/EvidenceDType"
                    expires: 
                        description: If the achievement has some notion of expiry, this indicates a timestamp when an assertion should no longer be considered valid. After this time, the assertion should be considered expired. Model Primitive Datatype = DateTime.
                        type: string
                        format: date-time
                    image: 
                        description: IRI of an image representing the assertion. May be a Data URI or the URL where the image may be found. Model Primitive Datatype = NormalizedString.
                        type: string
                    issuedOn: 
                        description: Timestamp of when the achievement was awarded. Required unless the assertion is revoked. Model Primitive Datatype = DateTime.
                        type: string
                        format: date-time
                    licenseNumber: 
                        description: The license number that was issued with this assertion. Model Primitive Datatype = String.
                        type: string
                    narrative: 
                        description: A narrative that describes the connection between multiple pieces of evidence. Likely only present if evidence is a multi-value array. Markdown allowed. Model Primitive Datatype = String.
                        type: string
                    recipient: 
                        $ref: "#/components/schemas/IdentityDType"
                    results: 
                        description: |
                            The set of results being asserted.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/ResultDType"
                    revocationReason: 
                        description: Optional published reason for revocation, if revoked. Model Primitive Datatype = String.
                        type: string
                    revoked: 
                        description: Defaults to false if this assertion is not referenced in a RevocationList. If revoked is true, only revoked and id are required properties, and many issuers strip a hosted assertion down to only those properties when revoked. Model Primitive Datatype = Boolean.
                        type: boolean
                    role: 
                        description: Role, position, or title of the learner when demonstrating or performing the achievement or evidence of learning being asserted. Examples include 'Student President', 'Intern', 'Captain', etc. Model Primitive Datatype = String.
                        type: string
                    signedEndorsements: 
                        description: |
                            Signed endorsements in JWS Compact Serialization format. Model Primitive Datatype = String.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                            pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    source: 
                        $ref: "#/components/schemas/ProfileDType"
                    term: 
                        description: The academic term in which this assertion was achieved. Model Primitive Datatype = String.
                        type: string
                    verification: 
                        $ref: "#/components/schemas/VerificationDType"
                    @context: 
                        description: The JSON-LD @context. Model Primitive Datatype = String.
                        type: string
                additionalProperties: false
            GetClrPayloadDType:
                description: |
                    Payload for the 'getClr' operation.
                type: object
                required: 
                    - id
                    - issuedOn
                    - learner
                    - publisher
                    - @context
                properties: 
                    id: 
                        description: Globally unique IRI for the CLR. If the IRI is a URL is must resolve to a CLR resource and conform to the getClr endpoint format. If the CLR is verified using Hosted verification, the IRI must be a URL. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this object. Normally 'Clr'. Model Primitive Datatype = NormalizedString.
                        type: string
                    achievements: 
                        description: |
                            Array of achievements that are related directly or indirectly through associations with the asserted achievements in the CLR. Primarily used to represent hierarchical pathways. Asserted achievements may appear in both this array and in the achievement assertion. If asserted achievements do appear in both places, they MUST match exactly.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/AchievementDType"
                    assertions: 
                        description: |
                            The learner's asserted achievements.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/AssertionDType"
                    endorsements: 
                        description: |
                            Allows endorsers to make specific claims about the CLR, or any assertion, achievement, or profile referenced in the CLR.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/EndorsementDType"
                    issuedOn: 
                        description: Timestamp of when the CLR was published. Model Primitive Datatype = DateTime.
                        type: string
                        format: date-time
                    learner: 
                        $ref: "#/components/schemas/ProfileDType"
                    name: 
                        description: Optional name of the CLR. Model Primitive Datatype = String.
                        type: string
                    partial: 
                        description: True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue. Model Primitive Datatype = Boolean.
                        type: boolean
                    publisher: 
                        $ref: "#/components/schemas/ProfileDType"
                    revocationReason: 
                        description: If revoked, optional reason for revocation. Model Primitive Datatype = String.
                        type: string
                    revoked: 
                        description: If True the CLR is revoked. Model Primitive Datatype = Boolean.
                        type: boolean
                    signedAssertions: 
                        description: |
                            Signed assertions in JWS Compact Serialization format. Model Primitive Datatype = String.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                            pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    signedEndorsements: 
                        description: |
                            Signed endorsements of the CLR or any Achievement, Assertion, or Profile in the CLR; in JWS Compact Serialization format. Model Primitive Datatype = String.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                            pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    verification: 
                        $ref: "#/components/schemas/VerificationDType"
                    @context: 
                        description: The JSON-LD @context. Model Primitive Datatype = String.
                        type: string
                additionalProperties: false
            GetCryptographicKeyPayloadDType:
                description: |
                    Payload for the 'getKey' operation.
                type: object
                required: 
                    - id
                    - owner
                    - publicKeyPem
                    - @context
                properties: 
                    id: 
                        description: The URI of the CryptographicKey document. Used during signed verification. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this object. Normally 'CryptographicKey'. Model Primitive Datatype = NormalizedString.
                        type: string
                    owner: 
                        description: The identifier for the Profile that owns this PUBLIC KEY and the PRIVATE KEY used to sign the assertion or endorsement. Model Primitive Datatype = NormalizedString.
                        type: string
                    publicKeyPem: 
                        description: The PUBLIC KEY in PEM format corresponding to the PRIVATE KEY used by the owner to sign the assertion or endorsement. The PEM key encoding is a widely-used method to express public keys, compatible with almost every Secure Sockets Layer library implementation. Model Primitive Datatype = String.
                        type: string
                    @context: 
                        description: The JSON-LD @context. Model Primitive Datatype = String.
                        type: string
                additionalProperties: false
            GetEndorsementPayloadDType:
                description: |
                    Payload for the 'getEndorsement' operation.
                type: object
                required: 
                    - id
                    - claim
                    - issuedOn
                    - issuer
                    - verification
                    - @context
                properties: 
                    id: 
                        description: Globally unique IRI for the Endorsement. If this Endorsement will be verified using Hosted verification, the value should be the URL of the hosted version of the Endorsement. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this entity. Normally 'Endorsement'. Model Primitive Datatype = NormalizedString.
                        type: string
                    claim: 
                        $ref: "#/components/schemas/EndorsementClaimDType"
                    issuedOn: 
                        description: Timestamp of when the endorsement was published. Model Primitive Datatype = DateTime.
                        type: string
                        format: date-time
                    issuer: 
                        $ref: "#/components/schemas/EndorsementProfileDType"
                    revocationReason: 
                        description: If revoked, optional reason for revocation. Model Primitive Datatype = String.
                        type: string
                    revoked: 
                        description: If True the endorsement is revoked. Model Primitive Datatype = Boolean.
                        type: boolean
                    verification: 
                        $ref: "#/components/schemas/VerificationDType"
                    @context: 
                        description: The JSON-LD @context. Model Primitive Datatype = String.
                        type: string
                additionalProperties: false
            GetRevocationListPayloadDType:
                description: |
                    Payload for the 'getRevocationList' operation.
                type: object
                required: 
                    - id
                    - issuer
                    - @context
                properties: 
                    id: 
                        description: The URI of the RevocationList document. Used during Signed verification. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    type: 
                        description: The JSON-LD type of this entity. Normally 'RevocationList'. Model Primitive Datatype = NormalizedString.
                        type: string
                    issuer: 
                        description: The id of the Issuer. Model Primitive Datatype = NormalizedString.
                        type: string
                    revokedAssertions: 
                        description: |
                            The ids of revoked Assertions, Clrs, and Endorsements. Model Primitive Datatype = NormalizedString.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                    @context: 
                        description: The JSON-LD @context. Model Primitive Datatype = String.
                        type: string
                additionalProperties: false
            IdentityDType:
                description: |
                    A collection of information about the recipient of an achievement assertion.
                type: object
                required: 
                    - type
                    - identity
                    - hashed
                properties: 
                    id: 
                        description: Unique IRI for the Identity. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The type should identify the property by which the recipient of an Assertion is identified. This value should be an IRI mapped in the present context. For example, 'id' indicates that the identity property value is the id of the recipient's profile. Model Primitive Datatype = NormalizedString.
                        type: string
                    identity: 
                        description: Either the hash of the identity or the plaintext value. If it's possible that the plaintext transmission and storage of the identity value would leak personally identifiable information where there is an expectation of privacy, it is strongly recommended that an IdentityHash be used. Model Primitive Datatype = String.
                        type: string
                    hashed: 
                        description: Whether or not the identity value is hashed. Model Primitive Datatype = Boolean.
                        type: boolean
                    salt: 
                        description: If the recipient is hashed, this should contain the string used to salt the hash. If this value is not provided, it should be assumed that the hash was not salted. Model Primitive Datatype = String.
                        type: string
                additionalProperties: true
            PostClrPayloadDType:
                description: |
                    Payload for the 'postClr' operation. Only one format (signed or unsigned) is allowed.
                type: object
                properties: 
                    clr: 
                        $ref: "#/components/schemas/ClrDType"
                    signedClr: 
                        description: The signed Clr in JWS Compact Serialization format. Model Primitive Datatype = String.
                        type: string
                        pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                additionalProperties: false
            ProfileDType:
                description: |
                    A Profile is a collection of information that describes the person or organization using Comprehensive Learner Record (CLR). Publishers, learners, and issuers must be represented as profiles. Recipients, endorsers, or other entities may also be represented using this vocabulary.
                type: object
                required: 
                    - id
                properties: 
                    id: 
                        description: Globally unique IRI for the Learner, Publisher, and Issuer Profile. If the IRI is a URL it must resolve to a Profile resource. The Assertion Recipient is identified by reference to the Learner's Profile via the id, email, url, telephone, sourcedId, or studentId property. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this object. Normally 'Profile'. Model Primitive Datatype = NormalizedString.
                        type: string
                    address: 
                        $ref: "#/components/schemas/AddressDType"
                    additionalName: 
                        description: An additional name for a person, can be used for a middle name. Model Primitive Datatype = String.
                        type: string
                    birthDate: 
                        description: Birthdate of the person. Model Primitive Datatype = Date.
                        type: string
                        format: date
                    description: 
                        description: A short description of the individual or organization. Model Primitive Datatype = String.
                        type: string
                    email: 
                        description: A contact email address for the individual or organization. Model Primitive Datatype = String.
                        type: string
                    endorsements: 
                        description: |
                            Allows endorsers to make specific claims about the individual or organization represented by this profile.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/EndorsementDType"
                    familyName: 
                        description: Family name of a person. In the U.S., the last name of a person. Model Primitive Datatype = String.
                        type: string
                    givenName: 
                        description: Given name of a person. In the U.S., the first name of a person. Model Primitive Datatype = String.
                        type: string
                    identifiers: 
                        description: |
                            A set of System Identifiers that represent other identifiers for this Profile.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/SystemIdentifierDType"
                    image: 
                        description: IRI of an image representing the individual or organization. May be a DATA URI or the URL where the image may be found. Model Primitive Datatype = NormalizedString.
                        type: string
                    name: 
                        description: The full name of the individual or organization. Model Primitive Datatype = String.
                        type: string
                    official: 
                        description: The name of the authorized official for the Issuer. Model Primitive Datatype = String.
                        type: string
                    parentOrg: 
                        $ref: "#/components/schemas/ProfileDType"
                    publicKey: 
                        $ref: "#/components/schemas/CryptographicKeyDType"
                    revocationList: 
                        description: The URL of the Revocation List document used for marking revocation of signed Assertions, CLRs, and Endorsements. Required for issuer profiles. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    signedEndorsements: 
                        description: |
                            Signed endorsements in JWS Compact Serialization format. Model Primitive Datatype = String.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                            pattern: "^([A-Za-z0-9-_]{4,})\\.([-A-Za-z0-9-_]{4,})\\.([A-Za-z0-9-_]{4,})$"
                    sourcedId: 
                        description: The individual's or organization's unique 'sourcedId' value, which is used for providing interoperability with other identity systems. Model Primitive Datatype = String.
                        type: string
                    studentId: 
                        description: An institution's student identifier for the person. This is frequently issued through a Student Information System. Model Primitive Datatype = String.
                        type: string
                    telephone: 
                        description: Primary phone number for the individual or organization. Model Primitive Datatype = String.
                        type: string
                    url: 
                        description: Web resource that uniquely represents or belongs to the individual. This may be a resource about the individual, hosting provided by the institution to the individual, or an web resource independently controlled by the individual. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    verification: 
                        $ref: "#/components/schemas/VerificationDType"
                additionalProperties: true
            ResultDType:
                description: |
                    Describes a result of an achievement.
                type: object
                required: 
                    - resultDescription
                properties: 
                    id: 
                        description: Unique IRI for the object. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this object. Normally 'Result'. Model Primitive Datatype = NormalizedString.
                        type: string
                    achievedLevel: 
                        description: The id of the RubricCriterionLevel achieved. Model Primitive Datatype = NormalizedString.
                        type: string
                    alignments: 
                        description: |
                            The alignments between this result and nodes in external frameworks. This set of alignments are in addition to the set of alignments defined in the corresponding ResultDescription object.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/AlignmentDType"
                    resultDescription: 
                        description: The id of the ResultDescription describing this result. Model Primitive Datatype = NormalizedString.
                        type: string
                    status: 
                        description: |
                            The status of the achievement. Required if 'ResultType' is 'Status'.
                        type: string
                        enum: 
                           - Completed
                           - Enrolled
                           - Failed
                           - InProgress
                           - OnHold
                           - Withdrew
                    value: 
                        description: A grade or value representing the result of the performance, or demonstration, of the achievement.  For example, 'A' if the recipient received a grade of A in the class.  Model Primitive Datatype = String.
                        type: string
                additionalProperties: true
            ResultDescriptionDType:
                description: |
                    Describes a possible achievement result.
                type: object
                required: 
                    - id
                    - name
                    - resultType
                properties: 
                    id: 
                        description: Unique IRI for the ResultDescription. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this object. Normally 'ResultDescription'. Model Primitive Datatype = NormalizedString.
                        type: string
                    alignments: 
                        description: |
                            The alignments between this result description and nodes in external frameworks.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/AlignmentDType"
                    allowedValues: 
                        description: The ordered from 'low' to 'high' set of allowed values. Model Primitive Datatype = String.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                    name: 
                        description: The name of the result. Model Primitive Datatype = String.
                        type: string
                    requiredLevel: 
                        description: The id of the RubricCriterionLevel required to 'pass'. Model Primitive Datatype = NormalizedString.
                        type: string
                    requiredValue: 
                        description: The value from allowedValues or within the range of valueMin to valueMax required to 'pass'. Model Primitive Datatype = String.
                        type: string
                    resultType: 
                        description: |
                            The type of result. This is an extensible enumerated vocabulary.
                        anyOf: 
                                - description: The data-type that enables an enumerated vocabulary to be extended. Model Primitive Datatype = String.
                                  type: string
                                  pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
                                - enum: 
                                    - GradePointAverage
                                    - LetterGrade
                                    - Percent
                                    - PerformanceLevel
                                    - PredictedScore
                                    - Result
                                    - RawScore
                                    - RubricCriterion
                                    - RubricCriterionLevel
                                    - RubricScore
                                    - ScaledScore
                                    - Status
                                  type: string
                    rubricCriterionLevels: 
                        description: |
                            The ordered from 'low' to 'high' set of rubric criterion levels that may be asserted.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/RubricCriterionLevelDType"
                    valueMax: 
                        description: The maximum possible result that may be asserted. Model Primitive Datatype = String.
                        type: string
                    valueMin: 
                        description: The minimum possible result that may be asserted. Model Primitive Datatype = String.
                        type: string
                additionalProperties: true
            RubricCriterionLevelDType:
                description: |
                    Describes a rubric criterion level.
                type: object
                required: 
                    - id
                    - name
                properties: 
                    id: 
                        description: Unique IRI for the ResultCriterionLevel. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: The JSON-LD type of this object. Normally 'RubricCriterionLevel'. Model Primitive Datatype = String.
                        type: string
                    alignments: 
                        description: |
                            The alignments between this rubric criterion level and nodes in external frameworks.
                        type: array
                        minItems: 0
                        items: 
                            $ref: "#/components/schemas/AlignmentDType"
                    description: 
                        description: A description of the rubric criterion level. Model Primitive Datatype = String.
                        type: string
                    level: 
                        description: The rubric performance level in terms of success. Model Primitive Datatype = String.
                        type: string
                    name: 
                        description: The name of the RubricCriterionLevel. Model Primitive Datatype = String.
                        type: string
                    points: 
                        description: The number of grade points corresponding to a specific rubric level. Model Primitive Datatype = String.
                        type: string
                additionalProperties: true
            SystemIdentifierDType:
                description: |
                    A SystemIdentifier represents a single, system-local identifier for an Achievement.
                type: object
                required: 
                    - identifier
                    - identifierType
                properties: 
                    type: 
                        description: The JSON-LD type of this object. Normally 'SystemIdentifier'. Model Primitive Datatype = NormalizedString.
                        type: string
                    identifier: 
                        description: Opaque string representing the system identifier value. Model Primitive Datatype = String.
                        type: string
                    identifierType: 
                        description: |
                            The identifier type. This is an extensible enumerated vocabulary. Extending the vocabulary makes use of a naming convention. For example, the NCES School ID might be 'ext:NcesSchoolId'. Extended vocabulary terms must start with 'ext:' followed by any valid JSON string value. Please see the latest version of the CLR Implementation Guide for suggested values.
                        anyOf: 
                                - enum: 
                                    - LisSourcedId
                                    - OneRosterSourcedId
                                  type: string
                                - description: The data-type that enables an enumerated vocabulary to be extended. Model Primitive Datatype = String.
                                  type: string
                                  pattern: "(ext:)[a-zA-Z0-9\\.\\-_]+"
                additionalProperties: true
            VerificationDType:
                description: |
                    Information a reviewer can use to verify an Assertion, Clr, or Endorsement.
                type: object
                required: 
                    - type
                properties: 
                    id: 
                        description: Unique IRI for the Verification. Model Primitive Datatype = NormalizedString.
                        type: string
                    type: 
                        description: |
                            The JSON-LD type of this object. The strongly typed value indicates the verification method.
                        type: string
                        enum: 
                           - Hosted
                           - Signed
                           - Verification
                    allowedOrigins: 
                        description: The host registered name subcomponent of an allowed origin. Any given id URI will be considered valid. Model Primitive Datatype = String.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                    creator: 
                        description: The (HTTP) id of the key used to sign the Assertion, CLR, or Endorsement. If not present, verifiers will check the public key declared in the referenced issuer Profile. If a key is declared here, it must be authorized in the issuer Profile as well. creator is expected to be the dereferencable URI of a document that describes a CryptographicKey. Model Primitive Datatype = AnyURI.
                        type: string
                        format: uri
                    startsWith: 
                        description: The URI fragment that the verification property must start with. Valid Assertions, Clrs, and Endorsements must have an id within this scope. Multiple values allowed, and Assertions, Clrs, and Endorsements will be considered valid if their id starts with one of these values. Model Primitive Datatype = String.
                        type: array
                        minItems: 0
                        items: 
                            type: string
                    verificationProperty: 
                        description: The property to be used for verification. Only 'id' is supported. Verifiers will consider 'id' the default value if verificationProperty is omitted or if an issuer Profile has no explicit verification instructions, so it may be safely omitted. Model Primitive Datatype = String.
                        type: string
                additionalProperties: true
            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: 
                           - forbidden
                           - fullsuccess
                           - internal_server_error
                           - invalid_data
                           - invalid_query_parameter
                           - misdirected_request
                           - not_acceptable
                           - not_allowed
                           - not_modified
                           - server_busy
                           - unauthorizedrequest
                           - unknown
                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
                           - failure
                           - processing
                           - 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

    About this Document

    Title: IMS Comprehensive Learner Record Standard REST/JSON Binding v1.0
    Editors: Andy Miller, IMS Global
    Jeff Bohrer, IMS Global

    Co-chairs: Chris Houston, Capella University and eLumen
    Greg Nadeau, Public Consulting Group
    Ozgur Yogurtcu, AEFIS

    Version: 1.0
    Version Date: January 14, 2021
    Status: IMS Final Release
    Summary: The IMS Comprehensive Learner Record Standard is used to exchange information about users and their achievements. This standard defines a data model for comprehensive learner records. It also describes how this data can be exchanged using service calls. This document contains the REST/JSON Binding description for the Comprehensive Learner Record Standard.

    Revision Information: Final release of the Comprehensive Learner Record Standard v1.0.
    Purpose: For adoption and implemenation comprehensive learner records in a standardized, machine-readable format.
    Document Location: https://www.imsglobal.org/spec/clr/v1p0/RESTBinding/clr_RESTBind.html

    toc | top

    List of Contributors

    The following individuals contributed to the development of this document:

    Tamer Abuelsaad IBM
    Jeff Bohrer IMS Global
    Sherri Braxton University of Maryland, Baltimore County
    Deb Everhart Learning Objects
    Steve Gance Washington State Board for Community and Technical Colleges
    Matthew Hailstone Brigham Young University
    Chris Houston Capella University and eLumen
    Alex Hripak Credly
    Tracy Korsmo North Dakota Information Technology
    Mark Leuba IMS Global
    Jeff McNeal State of Michigan Department of Education
    Andy Miller IMS Global
    Greg Nadeau Public Consulting Group
    Nate Otto Concentric Sky
    David Ward Public Consulting Group
    Ozgur Yogurtcu AEFIS

    toc | top

    Revision History

    Version No. Release Date Comments
    1.0 6 July 2018 First release of the Comprehensive Learner Record IMS Candidate Final specification.
    1.0 May 21, 2020 Second release of the Comprehensive Learner Record IMS Candidate Final specification.
    1.0 January 14, 2021 Final release of Comprehensive Learner Record Standard v1.0.

    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 Comprehensive Learner Record Standard REST/JSON Binding v1.0

    Date: January 14, 2021

    toc | top