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.
© 2021 IMS Global Learning Consortium, Inc.
All Rights Reserved.
Trademark information: http://www.imsglobal.org/copyright.html
Document Name: IMS Comprehensive Learner Record Standard REST/JSON Binding v1.0
Revision: January 14, 2021
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.
1. Introduction
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
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
6. Service OpenAPI Description
6.2 Tags 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.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
7. Extending and Profiling the Standard
7.1.1 Proprietary Operations
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
Appendix B OpenAPI Listings
B1 Comprehensive Learner Record Standard OpenAPI JSON Definition Listing
B2 Comprehensive Learner Record Standard OpenAPI YAML Definition Listing
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
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:
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.
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. |
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 |
This Section is NORMATIVE.
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.
All of the paths MUST also contain, as the base of the path, excluding the host name, the string: "/ims/clr/v1p0/".
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.
There are no pre-defined query parameters for this endpoint.
There are no pre-defined query parameters for this endpoint.
There are no pre-defined query parameters for this endpoint.
The description of the "limit" query parameter is presented in Table 3.3.4.1
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. |
The description of the "offset" query parameter is presented in Table 3.3.4.2
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) |
The description of the "since" query parameter is presented in Table 3.3.4.3
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. |
There are no pre-defined query parameters for this endpoint.
There are no pre-defined query parameters for this endpoint.
There are no pre-defined query parameters for this endpoint.
There are no pre-defined query parameters for this endpoint.
There are no pre-defined query parameters for this endpoint.
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.
REST Endpoint | HTTP Verb | HTTP Codes and Handling |
---|---|---|
/assertions/{sourcedId} | GET |
|
/clrs | GET |
|
/clrs | POST |
|
/clrs/{sourcedId} | DELETE |
|
/clrs/{sourcedId} | GET |
|
/discovery | GET |
|
/endorsements/{sourcedId} | GET |
|
/keys/{sourcedId} | GET |
|
/revocations/{sourcedId} | GET |
|
This Section is NORMATIVE.
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. |
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.
The role of each component during Registration, Obtaining Tokens, and Authenticating with Tokens using the appropriate method are described below.
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].
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.
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.
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": [] }
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].
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:
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.
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.
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:
|
||||||||||
grant_types |
No |
Array of OAuth 2.0 grant type strings. In this specification only "authorization_code" and
refresh_token" are allowed:
|
||||||||||
response_types |
No |
Array of OAuth 2.0 response type strings. In this specification only "code" is allowed:
|
||||||||||
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:
|
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.
|
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.
|
||||||||||
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.
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.
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;
Content-Type
header of "application/ld+json"Accept
header. If not included, the provider MUST respond with 406 Not Acceptable.@context
property
@context
property type MUST be defined as a string or an array of strings
@context
property is defined as a string it MUST be the CLR context URL
https://purl.imsglobal.org/spec/clr/v1p0/context/clr_v1p0.jsonld
@context
property is defined as an array of strings, the CLR context URL MUST be
listed last in order to ensure that CLR terms retain their primacy given that JSON-LD parsers rely on a
"most-recently-defined-wins" approach when evaluating duplicate terms.
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.
This Section is NORMATIVE.
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.
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.
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:
|
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.
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.
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.
The following Table describes the OpenAPI information for the HTTP Verb "GET" on 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 |
|
|||||||||||||||||||||
Query Parameters | Query parameters are not permitted. | |||||||||||||||||||||
Responses |
|
The following Table describes the OpenAPI information for the HTTP Verb "GET" on 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:
The scopes that enable access to this endpoint are:
|
|||||||||||||||||||||||||||
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 |
|
|||||||||||||||||||||||||||
Responses |
|
The following Table describes the OpenAPI information for the HTTP Verb "POST" on 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:
The scopes that enable access to this endpoint are:
|
||||||||||||||||||||||||||||||||||||
Description | Create or replace a CLR. | ||||||||||||||||||||||||||||||||||||
Path Placeholders | Path placeholders are not permitted. | ||||||||||||||||||||||||||||||||||||
Query Parameters | Query parameters are not permitted. | ||||||||||||||||||||||||||||||||||||
Responses |
|
The following Table describes the OpenAPI information for the HTTP Verb "DELETE" on 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:
The scopes that enable access to this endpoint are:
|
||||||||||||||||||||||||||||||||||||
Description | Delete a CLR. | ||||||||||||||||||||||||||||||||||||
Path Placeholders |
|
||||||||||||||||||||||||||||||||||||
Query Parameters | Query parameters are not permitted. | ||||||||||||||||||||||||||||||||||||
Responses |
|
The following Table describes the OpenAPI information for the HTTP Verb "GET" on 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:
The scopes that enable access to this endpoint are:
|
||||||||||||||||||||||||||||||
Description | Returns the current version of the specified Clr. This operation is used to verify a Hosted Clr. | ||||||||||||||||||||||||||||||
Path Placeholders |
|
||||||||||||||||||||||||||||||
Query Parameters | Query parameters are not permitted. | ||||||||||||||||||||||||||||||
Responses |
|
The following Table describes the OpenAPI information for the HTTP Verb "GET" on 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 |
|
The following Table describes the OpenAPI information for the HTTP Verb "GET" on 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 |
|
|||||||||||||||||||||
Query Parameters | Query parameters are not permitted. | |||||||||||||||||||||
Responses |
|
The following Table describes the OpenAPI information for the HTTP Verb "GET" on 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 |
|
|||||||||||||||||||||
Query Parameters | Query parameters are not permitted. | |||||||||||||||||||||
Responses |
|
The following Table describes the OpenAPI information for the HTTP Verb "GET" on 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 |
|
|||||||||||||||||||||
Query Parameters | Query parameters are not permitted. | |||||||||||||||||||||
Responses |
|
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.
The OpenAPI JSON Schema description for the "AchievementDType" Complex Type is given in Table 6.5.1.
The OpenAPI JSON Schema description for the "AddressDType" Complex Type is given in Table 6.5.2.
The OpenAPI JSON Schema description for the "AlignmentDType" Complex Type is given in Table 6.5.3.
The OpenAPI JSON Schema description for the "ArtifactDType" Complex Type is given in Table 6.5.4.
The OpenAPI JSON Schema description for the "AssertionDType" Complex Type is given in Table 6.5.5.
The OpenAPI JSON Schema description for the "AssociationDType" Complex Type is given in Table 6.5.6.
The OpenAPI JSON Schema description for the "ClrDType" Complex Type is given in Table 6.5.7.
The OpenAPI JSON Schema description for the "ClrSetDType" Complex Type is given in Table 6.5.8.
The OpenAPI JSON Schema description for the "CriteriaDType" Complex Type is given in Table 6.5.9.
The OpenAPI JSON Schema description for the "CryptographicKeyDType" Complex Type is given in Table 6.5.10.
The OpenAPI JSON Schema description for the "DiscoveryDocumentDType" Complex Type is given in Table 6.5.11.
The OpenAPI JSON Schema description for the "EndorsementDType" Complex Type is given in Table 6.5.12.
The OpenAPI JSON Schema description for the "EndorsementClaimDType" Complex Type is given in Table 6.5.13.
The OpenAPI JSON Schema description for the "EndorsementProfileDType" Complex Type is given in Table 6.5.14.
The OpenAPI JSON Schema description for the "EvidenceDType" Complex Type is given in Table 6.5.15.
The OpenAPI JSON Schema description for the "GetAssertionPayloadDType" Complex Type is given in Table 6.5.16.
The OpenAPI JSON Schema description for the "GetClrPayloadDType" Complex Type is given in Table 6.5.17.
The OpenAPI JSON Schema description for the "GetCryptographicKeyPayloadDType" Complex Type is given in Table 6.5.18.
The OpenAPI JSON Schema description for the "GetEndorsementPayloadDType" Complex Type is given in Table 6.5.19.
The OpenAPI JSON Schema description for the "GetRevocationListPayloadDType" Complex Type is given in Table 6.5.20.
The OpenAPI JSON Schema description for the "IdentityDType" Complex Type is given in Table 6.5.21.
The OpenAPI JSON Schema description for the "PostClrPayloadDType" Complex Type is given in Table 6.5.22.
The OpenAPI JSON Schema description for the "ProfileDType" Complex Type is given in Table 6.5.23.
The OpenAPI JSON Schema description for the "ResultDType" Complex Type is given in Table 6.5.24.
The OpenAPI JSON Schema description for the "ResultDescriptionDType" Complex Type is given in Table 6.5.25.
The OpenAPI JSON Schema description for the "RubricCriterionLevelDType" Complex Type is given in Table 6.5.26.
The OpenAPI JSON Schema description for the "SystemIdentifierDType" Complex Type is given in Table 6.5.27.
The OpenAPI JSON Schema description for the "VerificationDType" Complex Type is given in Table 6.5.28.
The OpenAPI JSON Schema description for the "imsx_CodeMinorDType" Complex Type is given in Table 6.5.29.
The OpenAPI JSON Schema description for the "imsx_CodeMinorFieldDType" Complex Type is given in Table 6.5.30.
The OpenAPI JSON Schema description for the "imsx_StatusInfoDType" Complex Type is given in Table 6.5.31.
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.
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].
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"
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.
[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/. |
Table A1.1 provides 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:
|
Table A1.2 provides the key to the descriptions of the query parameters that are permitted for an endpoint.
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:
|
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:
|
Description | Contains descriptions relating to the query parameter and its values space. |
Table A1.3 provides 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:
|
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. |
These definitions are with respect to the OpenAPI version 2 [OAS, 14] and version 3 [OAS, 17] specifications.
Tables A2.1a and A2.1b provide the key to the OpenAPI(2) and OpenAPI(3) general information respectively.
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. |
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. |
Table A2.2 provides the key to the tabular description of the OpenAPI tags information (versions 2 and 3).
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. |
Table A2.3 provides 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:
|
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:
The permitted values in OAS3 are:
|
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. |
Table A2.4 provides the key to 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:
|
Responses | The set of query responses that are permitted for the request. For each response the following information is supplied:
|
Table A2.5 provides the key to 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. |
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" ] }
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 } } } }
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
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
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 |
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 |
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. |
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