IMS Final Release

IMS Global Logo

IMS LTI Resource Search Service OpenAPI Definition Version 1.0

IMS Final Release
Version 1.0

Date Issued: 10th September, 2018
Latest version: http://www.imsglobal.org/lti-rs/

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 © 2018 IMS Global Learning Consortium. All Rights Reserved.

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

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

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

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

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

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

Document Name: IMS LTI Resource Search Service OpenAPI Definition v1.0

Revision: 10th September, 2018

toc | top

Abstract

The Learning Tools Interoperability (LTI) Resource Search specification defines how to search digital repositories for a set of resources via a web services API. The standard addresses searching learning object repositories (LORs), and other catalogs of learning resources. The specification supports executing these search from learning tools using various attributes of resources and returning full metadata about the resources to the learning tools. Results can be launched either as URLs or LTI links. The goal of the LTI Resource Search standard is a standard way for students and teachers to be able to search resource providers, such as learning object repositories, from single sources or aggregated from multiple sources, within a learning object consumer such as a learning management system or other educational platform.

toc | top

Table of Contents

Abstract

1. Introduction

1.1 Scope and Context

1.2 Conventions

1.3 Structure of this Document

1.4 Nomenclature

2. Service OpenAPI Description

2.1 General Information

2.2 Tags Information

2.3 Security Information

2.4 Paths Information

2.4.1 "/resources" Path

2.4.2 "/subjects" Path

2.5 Definitions Information

2.5.1 "CCLTILink.Type" Definition

2.5.2 "CSMSet.Type" Definition

2.5.3 "CurriculumStandardsMetadata.Type" Definition

2.5.4 "LTILink.Type" Definition

2.5.5 "LTILinkResourceRef.Type" Definition

2.5.6 "LabelledGUID.Type" Definition

2.5.7 "LearningObjectives.Type" Definition

2.5.8 "Metadata.Type" Definition

2.5.9 "PlatformPropertySet.Type" Definition

2.5.10 "Property.Type" Definition

2.5.11 "PropertySet.Type" Definition

2.5.12 "Resource.Type" Definition

2.5.13 "ResourceSet.Type" Definition

2.5.14 "SetOfGUIDs.Type" Definition

2.5.15 "Subject.Type" Definition

2.5.16 "SubjectSet.Type" Definition

2.5.17 "TextComplexity.Type" Definition

2.5.18 "Vendor.Type" Definition

2.5.19 "imsx_CodeMinor.Type" Definition

2.5.20 "imsx_CodeMinorField.Type" Definition

2.5.21 "imsx_StatusInfo.Type" Definition

References

Appendix A OpenAPI Modeling Terms

A1 OpenAPI Descriptions Explanations

A1.1 OpenAPI General Information Table Explanation

A1.2 OpenAPI Tags Table Explanation

A1.3 OpenAPI Security Table Explanation

A1.4 OpenAPI Paths Table Explanation

A1.5 OpenAPI Definitions Table Explanation

Appendix B OpenAPI Listings

B1 Listing of the OpenAPI (JSON) File

B2 Listing of the OpenAPI (YAML) File

About this Document

List of Contributors

Revision History

toc | top

List of Tables

Table 2.1 - The Set of General Information Defined in the OpenAPI Description.

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

Table 2.4.1 - The Set of HTTP Verbs Permitted on the "/resources" Path.

Table 2.4.2 - The Set of HTTP Verbs Permitted on the "/subjects" Path.

Table 2.5.1 - OpenAPI JSON Schema description for the "CCLTILink.Type" Complex Type.

Table 2.5.2 - OpenAPI JSON Schema description for the "CSMSet.Type" Complex Type.

Table 2.5.3 - OpenAPI JSON Schema description for the "CurriculumStandardsMetadata.Type" Complex Type.

Table 2.5.4 - OpenAPI JSON Schema description for the "LTILink.Type" Complex Type.

Table 2.5.5 - OpenAPI JSON Schema description for the "LTILinkResourceRef.Type" Complex Type.

Table 2.5.6 - OpenAPI JSON Schema description for the "LabelledGUID.Type" Complex Type.

Table 2.5.7 - OpenAPI JSON Schema description for the "LearningObjectives.Type" Complex Type.

Table 2.5.8 - OpenAPI JSON Schema description for the "Metadata.Type" Complex Type.

Table 2.5.9 - OpenAPI JSON Schema description for the "PlatformPropertySet.Type" Complex Type.

Table 2.5.10 - OpenAPI JSON Schema description for the "Property.Type" Complex Type.

Table 2.5.11 - OpenAPI JSON Schema description for the "PropertySet.Type" Complex Type.

Table 2.5.12 - OpenAPI JSON Schema description for the "Resource.Type" Complex Type.

Table 2.5.13 - OpenAPI JSON Schema description for the "ResourceSet.Type" Complex Type.

Table 2.5.14 - OpenAPI JSON Schema description for the "SetOfGUIDs.Type" Complex Type.

Table 2.5.15 - OpenAPI JSON Schema description for the "Subject.Type" Complex Type.

Table 2.5.16 - OpenAPI JSON Schema description for the "SubjectSet.Type" Complex Type.

Table 2.5.17 - OpenAPI JSON Schema description for the "TextComplexity.Type" Complex Type.

Table 2.5.18 - OpenAPI JSON Schema description for the "Vendor.Type" Complex Type.

Table 2.5.19 - OpenAPI JSON Schema description for the "imsx_CodeMinor.Type" Complex Type.

Table 2.5.20 - OpenAPI JSON Schema description for the "imsx_CodeMinorField.Type" Complex Type.

Table 2.5.21 - OpenAPI JSON Schema description for the "imsx_StatusInfo.Type" Complex Type.

Table A1.1 The key to the tabular description of the OpenAPI general information

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

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

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

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

toc | top

1. Introduction

1.1 Scope and Context

This document is the LTI Resources Search (RS) OpenAPI Definition v1.0 and as such it is used as the basis for implementing the RS Service Model. The key related documents are:

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

The OpenAPI files are based upon the OpenAPI Specification [OAS, 14] version 2.

1.2 Conventions

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

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

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

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

1.3 Structure of this Document

The structure of the rest of this document is:

2. Service OpenAPI Description A detailed explanation of the structure of the OpenAPI files that are produced as part of the specification documentation. The associated JSON and YAML files are supplied in Appendix B;
References The set of references cited throughout this document.
Appendix A OpenAPI Modeling Terms An overview of the model driven approach, the concepts and the terms used by IMS to create the service model REST/JSON binding definitions (based upon a profile of UML) and the accompanying documentation (including this OpenAPI definition);
Appendix B OpenAPI Listings The listings of the OpenAPI(JSON) and OpenAPI(YAML) files that have been created to define the REST/JSON binding in a machine-readable format i.e. conforming to the OpenAPI 2.0 specification.

1.4 Nomenclature

API Application Programming Interface
AfAPNP Access for All Personal Needs and Preferences
CASE Competencies and Academic Standards Exchange
HTTP Hypertext Transfer Protocol
I-BAT IMS Binding Autogeneration Toolkit
IETF Internet Engineering Task Force
ISO International Standards Organization
JSON Java Script Object Notation
LOR Learning Object Repository
LTI Learning Tools Interoperability
OAS OpenAPI Specification
PNP Personal Needs and Preferences
REST Representation State Transfer
RFC Request for Comments
RS LTI Resource Search
TLS Transport Layer Security
UML Unified Modeling Language
URI Uniform Resource Identifier
URL Uniform Resource Locator
YAML Yet Another Markup Language

toc | top

2. Service OpenAPI Description

This Section is NORMATIVE

2.1 General Information

The set of General Information defined in the OpenAPI description, and realised in both the JSON and YAML instances, is listed in Table 2.1. The syntax and semantics for this information are described in Appendix A1.1.

Table 2.1 - The Set of General Information Defined in the OpenAPI Description.
Swagger Version 2.0
Specification Title LTI Resource Search Service
Specification Version 1.0
Description The IMS LTI Resource Search (RS) Service defines how to search digital respositories for a set of resources.
Terms of Service Permission is granted to all parties to use excerpts from this document as needed in producing requests for proposals. The limited permissions granted above are perpetual and will not be revoked by IMS or its successors or assigns. THIS API DEFINITION IS BEING OFFERED WITHOUT ANY WARRANTY WHATSOEVER, AND IN PARTICULAR, ANY WARRANTY OF NONINFRINGEMENT IS EXPRESSLY DISCLAIMED. ANY USE OF THIS SPECIFICATION SHALL BE MADE ENTIRELY AT THE IMPLEMENTERS OWN RISK, AND NEITHER THE CONSORTIUM, NOR ANY OF ITS MEMBERS OR SUBMITTERS, SHALL HAVE ANY LIABILITY WHATSOEVER TO ANY IMPLEMENTER OR THIRD PARTY FOR ANY DAMAGES OF ANY NATURE WHATSOEVER, DIRECTLY OR INDIRECTLY, ARISING FROM THE USE OF THIS API DEFINITION.
Contact Lisa Mattson (COO), IMS Global (http://www.imsglobal.org). Email: lmattson@imsglobal.org.
License IMS Global - https://www.imsglobal.org/license.html
Host www.imsglobal.org
Base Path /ims/rs/v1p0
Schemes http, https
Consumes application/json
Produces application/json

2.2 Tags Information

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

Table 2.2 - The Set of Tags Defined in the OpenAPI Description.
Tag Name Description
ResourceSearchManager The set of service operations that manage searching for resources. The set of endpoints assigned to this tag are:
SubjectsManager The set of service operations that manage access to the lists of subjects supported by a LOR. The set of endpoints assigned to this tag are:

2.3 Security Information

There is no security approach defined for this specification and so there are no Security Mode features included in the OpenAPI definition.

2.4 Paths Information

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

2.4.1 "/resources" Path

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

Table 2.4.1 - The Set of HTTP Verbs Permitted on the '/resources' Path.
HTTP Verb: GET
Operation ID searchForResources
Summary The REST "read" request message for the "searchForResources()" API call.
Tags ResourceSearchManager
Description This is the search request. The criteria for the search are passed as query parameters and the set of identified resources are returned in the payload for the response message.
Path Placeholders Path placeholders are not permitted.
Query Parameters
Name Type Multiplicity Default
limit Positive Integer [0..1] 100
offset Non-negative Integer [0..1] 0
filter Normalized String [0..1] -
sort Normalized String [0..1] -
orderBy [ Enumeration ] [0..1] -
fields Normalized String [0..*] -
Responses
Name Type Description
200 ResourceSet.Type The response code for when the query request has been successfully completed and the set of identified resources returned. This would be accompanied by the 'codeMajor/severity' values of 'success/status'
400 imsx_StatusInfo.Type The request has been declared as 'bad'. This will be due to the provision of bad data in the request query parameters. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
401 imsx_StatusInfo.Type The request was not correctly authorised i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
403 imsx_StatusInfo.Type This is used to indicate that the server can be reached and process the request but refuses to take any further action. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
500 imsx_StatusInfo.Type This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
default imsx_StatusInfo.Type This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
422 imsx_StatusInfo.Type This error condition may occur if a JSON request body contains well-formed i.e. syntactically correct, but semantically erroneous, JSON instructions. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
429 imsx_StatusInfo.Type The server is receiving too many requests i.e. 'server_busy'. Retry at a later time. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.

2.4.2 "/subjects" Path

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

Table 2.4.2 - The Set of HTTP Verbs Permitted on the '/subjects' Path.
HTTP Verb: GET
Operation ID getAllSubjects
Summary The REST "read" request message for the "getAllSubjects()" API call.
Tags SubjectsManager
Description To obtain, read, the list of subjects that are supported by a LOR.
Path Placeholders Path placeholders are not permitted.
Query Parameters Query parameters are not permitted.
Responses
Name Type Description
200 SubjectSet.Type The response code for when the query request has been successfully completed and the set of subjects returned. This would be accompanied by the 'codeMajor/severity' values of 'success/status'
400 imsx_StatusInfo.Type The request has been declared as 'bad'. This will be due to the provision of bad data in the request query parameters. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
401 imsx_StatusInfo.Type The request was not correctly authorised i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
403 imsx_StatusInfo.Type This is used to indicate that the server can be reached and process the request but refuses to take any further action. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
422 imsx_StatusInfo.Type This error condition may occur if a JSON request body contains well-formed i.e. syntactically correct, but semantically erroneous, JSON instructions. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
429 imsx_StatusInfo.Type The server is receiving too many requests i.e. 'server_busy'. Retry at a later time. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
500 imsx_StatusInfo.Type This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
default imsx_StatusInfo.Type This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.

2.5 Definitions Information

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

2.5.1 "CCLTILink.Type" Definition

The OpenAPI JSON Schema description for the "CCLTILink.Type" Complex Type is given in Table 2.5.1.

Table 2.5.1 - OpenAPI JSON Schema description for the "CCLTILink.Type" Complex Type.
Annotations The extended set of information used to define the presence of an LTI Link resource (this is based upon the definition for including an LTI link inside an IMS Common Cartridge or IMS Thin Common Cartridge).
Diagram To be supplied in a later release of this document
Type Hierarchy LTILink.Type
^---CCLTILink.Type
Model title{1..1} ! description{0..1} ! custom{0..1} ! extensions{0..1} ! launch_url{0..1} ! secure_launch_url{0..1} ! icon{0..1} ! secure_icon{0..1} ! vendor{1..1} ! cartridge_bundle{0..1} ! cartridge_icon{0..1} ! metadata{0..1}
Source
    "CCLTILink.Type" : {
        "description" : "...",
        "type" : "object",
        "allOf" : [
            {
                "$ref" : "#/definitions/LTILink.Type"
            },
            {
                "type" : "object",
                "properties" : {
                    "cartridge_bundle" : {
                        "$ref" : "#/definitions/LTILinkResourceRef.Type"
                    },
                    "cartridge_icon" : {
                        "$ref" : "#/definitions/LTILinkResourceRef.Type"
                    },
                    "metadata" : {
                        "$ref" : "#/definitions/Metadata.Type"
                    }
                },
                "additionalProperties" : false
            }
        ]
    },
                        

2.5.2 "CSMSet.Type" Definition

The OpenAPI JSON Schema description for the "CSMSet.Type" Complex Type is given in Table 2.5.2.

Table 2.5.2 - OpenAPI JSON Schema description for the "CSMSet.Type" Complex Type.
Annotations This is the is the container for the set of curriculum standards metadata. Each member of the set contains the curriculum standards metadata for a specific source of the GUIDs.
Diagram To be supplied in a later release of this document
Model resourceLabel{0..1} ! resourcePartId{0..1} ! curriculumStandardsMetadata{1..*}
Source
    "CSMSet.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "resourceLabel" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "resourcePartId" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "curriculumStandardsMetadata" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 1,
                "items" : {
                    "$ref" : "#/definitions/CurriculumStandardsMetadata.Type"
                }
            }
        },
        "required" : [ "curriculumStandardsMetadata" ],
        "additionalProperties" : false
    },
                        

2.5.3 "CurriculumStandardsMetadata.Type" Definition

The OpenAPI JSON Schema description for the "CurriculumStandardsMetadata.Type" Complex Type is given in Table 2.5.3.

Table 2.5.3 - OpenAPI JSON Schema description for the "CurriculumStandardsMetadata.Type" Complex Type.
Annotations This is the container for the special metadata for curriculum standards for a particular domain of GUID provider.
Diagram To be supplied in a later release of this document
Model providerId{0..1} ! setOfGUIDs{1..*}
Source
    "CurriculumStandardsMetadata.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "providerId" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "setOfGUIDs" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 1,
                "items" : {
                    "$ref" : "#/definitions/SetOfGUIDs.Type"
                }
            }
        },
        "required" : [ "setOfGUIDs" ],
        "additionalProperties" : false
    },
                        

2.5.4 "LTILink.Type" Definition

The OpenAPI JSON Schema description for the "LTILink.Type" Complex Type is given in Table 2.5.4.

Table 2.5.4 - OpenAPI JSON Schema description for the "LTILink.Type" Complex Type.
Annotations The container for all of the core information about an LTI Link.
Diagram To be supplied in a later release of this document
Model title{1..1} ! description{0..1} ! custom{0..1} ! extensions{0..1} ! launch_url{0..1} ! secure_launch_url{0..1} ! icon{0..1} ! secure_icon{0..1} ! vendor{1..1}
Source
    "LTILink.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "title" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "description" : {
                "description" : "Model Primitive Datatype = String. ",
                "type" : "string"
            },
            "custom" : {
                "$ref" : "#/definitions/PropertySet.Type"
            },
            "extensions" : {
                "$ref" : "#/definitions/PlatformPropertySet.Type"
            },
            "launch_url" : {
                "description" : "Model Primitive Datatype = AnyURI. ",
                "type" : "string",
                "format" : "uri"
            },
            "secure_launch_url" : {
                "description" : "Model Primitive Datatype = AnyURI. ",
                "type" : "string",
                "format" : "uri"
            },
            "icon" : {
                "description" : "Model Primitive Datatype = AnyURI. ",
                "type" : "string",
                "format" : "uri"
            },
            "secure_icon" : {
                "description" : "Model Primitive Datatype = AnyURI. ",
                "type" : "string",
                "format" : "uri"
            },
            "vendor" : {
                "$ref" : "#/definitions/Vendor.Type"
            }
        },
        "required" : [ "title","vendor" ],
        "additionalProperties" : false
    },
                        

2.5.5 "LTILinkResourceRef.Type" Definition

The OpenAPI JSON Schema description for the "LTILinkResourceRef.Type" Complex Type is given in Table 2.5.5.

Table 2.5.5 - OpenAPI JSON Schema description for the "LTILinkResourceRef.Type" Complex Type.
Annotations The container for the link information.
Diagram To be supplied in a later release of this document
Model name{1..1} ! resourceUri{1..1}
Source
    "LTILinkResourceRef.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "name" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "resourceUri" : {
                "description" : "Model Primitive Datatype = AnyURI. ",
                "type" : "string",
                "format" : "uri"
            }
        },
        "required" : [ "name","resourceUri" ],
        "additionalProperties" : false
    },
                        

2.5.6 "LabelledGUID.Type" Definition

The OpenAPI JSON Schema description for the "LabelledGUID.Type" Complex Type is given in Table 2.5.6.

Table 2.5.6 - OpenAPI JSON Schema description for the "LabelledGUID.Type" Complex Type.
Annotations The labelled curriculum standard GUID.
Diagram To be supplied in a later release of this document
Model label{0..1} ! caseItemURI{0..1} ! GUID{1..1}
Source
    "LabelledGUID.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "label" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "caseItemURI" : {
                "description" : "Model Primitive Datatype = AnyURI. ",
                "type" : "string",
                "format" : "uri"
            },
            "GUID" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            }
        },
        "required" : [ "GUID" ],
        "additionalProperties" : false
    },
                        

2.5.7 "LearningObjectives.Type" Definition

The OpenAPI JSON Schema description for the "LearningObjectives.Type" Complex Type is given in Table 2.5.7.

Table 2.5.7 - OpenAPI JSON Schema description for the "LearningObjectives.Type" Complex Type.
Annotations The container for the learning objectives which are addressed by the resource.
Diagram To be supplied in a later release of this document
Model alignmentType{1..1} ! educationalFramework{0..1} ! targetDescription{0..1} ! targetName{0..1} ! targetURL{0..1} ! caseItemUri{0..1} ! caseItemGUID{0..1}
Source
    "LearningObjectives.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "alignmentType" : {
                "description" : "...",
                "type" : "string",
                "enum" : [ "assesses","teaches","requires","textComplexity","readingLevel","educationalSubject","educationLevel" ]
            },
            "educationalFramework" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "targetDescription" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "targetName" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "targetURL" : {
                "description" : "Model Primitive Datatype = AnyURI. ",
                "type" : "string",
                "format" : "uri"
            },
            "caseItemUri" : {
                "description" : "Model Primitive Datatype = AnyURI. ",
                "type" : "string",
                "format" : "uri"
            },
            "caseItemGUID" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            }
        },
        "required" : [ "alignmentType" ],
        "additionalProperties" : false
    },
                        

2.5.8 "Metadata.Type" Definition

The OpenAPI JSON Schema description for the "Metadata.Type" Complex Type is given in Table 2.5.8.

Table 2.5.8 - OpenAPI JSON Schema description for the "Metadata.Type" Complex Type.
Annotations The container for all of the metadata associated with the LTI link. Currently this metadata is restricted to the set of curriculum standards annotations.
Diagram To be supplied in a later release of this document
Model curriculumStandardsMetadataSet{0..1}
Source
    "Metadata.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "curriculumStandardsMetadataSet" : {
                "$ref" : "#/definitions/CSMSet.Type"
            }
        },
        "additionalProperties" : false
    },
                        

2.5.9 "PlatformPropertySet.Type" Definition

The OpenAPI JSON Schema description for the "PlatformPropertySet.Type" Complex Type is given in Table 2.5.9.

Table 2.5.9 - OpenAPI JSON Schema description for the "PlatformPropertySet.Type" Complex Type.
Annotations The container for the collection of properties that are available for a specific platform.
Diagram To be supplied in a later release of this document
Model platform{1..1} ! properties{1..*}
Source
    "PlatformPropertySet.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "platform" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "properties" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 1,
                "items" : {
                    "$ref" : "#/definitions/Property.Type"
                }
            }
        },
        "required" : [ "platform","properties" ],
        "additionalProperties" : false
    },
                        

2.5.10 "Property.Type" Definition

The OpenAPI JSON Schema description for the "Property.Type" Complex Type is given in Table 2.5.10.

Table 2.5.10 - OpenAPI JSON Schema description for the "Property.Type" Complex Type.
Annotations The container for the name/value pair for a specific property.
Diagram To be supplied in a later release of this document
Model name{1..1} ! value{1..1}
Source
    "Property.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "name" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "value" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            }
        },
        "required" : [ "name","value" ],
        "additionalProperties" : false
    },
                        

2.5.11 "PropertySet.Type" Definition

The OpenAPI JSON Schema description for the "PropertySet.Type" Complex Type is given in Table 2.5.11.

Table 2.5.11 - OpenAPI JSON Schema description for the "PropertySet.Type" Complex Type.
Annotations The container for the collection of properties that have been specified.
Diagram To be supplied in a later release of this document
Model properties{1..*}
Source
    "PropertySet.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "properties" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 1,
                "items" : {
                    "$ref" : "#/definitions/Property.Type"
                }
            }
        },
        "required" : [ "properties" ],
        "additionalProperties" : false
    },
                        

2.5.12 "Resource.Type" Definition

The OpenAPI JSON Schema description for the "Resource.Type" Complex Type is given in Table 2.5.12.

Table 2.5.12 - OpenAPI JSON Schema description for the "Resource.Type" Complex Type.
Annotations The container for the information about a resource that is supported by a LOR.
Diagram To be supplied in a later release of this document
Model name{1..1} ! description{0..1} ! subject{0..*} ! url{0..1} ! ltiLink{0..1} ! learningResourceType{1..*} ! language{0..*} ! thumbnailUrl{0..1} ! typicalAgeRange{0..1} ! textComplexity{0..*} ! learningObjectives{0..*} ! author{0..*} ! publisher{1..1} ! useRightsURL{0..1} ! timeRequired{0..1} ! technicalFormat{0..1} ! educationalAudience{0..*} ! accessibilityAPI{0..*} ! accessibilityInputMethods{0..*} ! accessibilityFeatures{0..*} ! accessibilityHazards{0..*} ! accessMode{0..*} ! publishDate{0..1} ! rating{0..1} ! relevance{0..1} ! { Namespace Extension }
Source
    "Resource.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "name" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "description" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "subject" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "array",
                "minItems" : 0,
                "items" : {
                    "type" : "string"
                }
            },
            "url" : {
                "description" : "Model Primitive Datatype = AnyURI. ",
                "type" : "string",
                "format" : "uri"
            },
            "ltiLink" : {
                "$ref" : "#/definitions/CCLTILink.Type"
            },
            "learningResourceType" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 1,
                "items" : {
                    "enum" : [ "Assessment/Item","Assessment/Formative","Assessment/Interim","Assessment/Rubric","Assessment/Preparation","Collection/Course","Collection/Unit","Collection/Curriculum Guide","Collection/Lesson","Game","Interactive/Simulation","Interactive/Animation","Interactive/Whiteboard","Activity/Worksheet","Activity/Learning","Activity/Experiment","Lecture","Text/Book","Text/Chapter","Text/Document","Text/Article","Text/Passage","Text/Textbook","Text/Reference","Text/Website","Media/Audio","Media/Images/Visuals","Media/Video","Other" ]
                }
            },
            "language" : {
                "description" : "Model Primitive Datatype = Language. ",
                "type" : "array",
                "minItems" : 0,
                "items" : {
                    "type" : "string"
                }
            },
            "thumbnailUrl" : {
                "description" : "Model Primitive Datatype = AnyURI. ",
                "type" : "string",
                "format" : "uri"
            },
            "typicalAgeRange" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "textComplexity" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 0,
                "items" : {
                    "$ref" : "#/definitions/TextComplexity.Type"
                }
            },
            "learningObjectives" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 0,
                "items" : {
                    "$ref" : "#/definitions/LearningObjectives.Type"
                }
            },
            "author" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "array",
                "minItems" : 0,
                "items" : {
                    "type" : "string"
                }
            },
            "publisher" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "useRightsURL" : {
                "description" : "Model Primitive Datatype = AnyURI. ",
                "type" : "string",
                "format" : "uri"
            },
            "timeRequired" : {
                "description" : "Model Primitive Datatype = Duration. ",
                "type" : "string"
            },
            "technicalFormat" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "educationalAudience" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 0,
                "items" : {
                    "enum" : [ "student","teacher","administrator","parent","aide","proctor","guardian","relative" ]
                }
            },
            "accessibilityAPI" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 0,
                "items" : {
                    "enum" : [ "MSAA","UIAutomation","ARIAv1","IAccessible2","AndroidAccessibility","ATK","AT-SPI","BlackberryAccessibility","JavaAccessibility","MacOSXAccessibility" ]
                }
            },
            "accessibilityInputMethods" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 0,
                "items" : {
                    "enum" : [ "fullKeyboardControl","fullMouseControl","fullVoiceControl" ]
                }
            },
            "accessibilityFeatures" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "array",
                "minItems" : 0,
                "items" : {
                    "type" : "string"
                }
            },
            "accessibilityHazards" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 0,
                "items" : {
                    "enum" : [ "flashing","sound","olfactoryHazard","motionSimulation" ]
                }
            },
            "accessMode" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 0,
                "items" : {
                    "enum" : [ "auditory","color","itemSize","olfactory","orientation","position","tactile","textOnImage","textual","visual" ]
                }
            },
            "publishDate" : {
                "description" : "Model Primitive Datatype = Date. ",
                "type" : "string",
                "format" : "date"
            },
            "rating" : {
                "description" : "...",
                "type" : "string",
                "enum" : [ "1","2","3","4","5" ]
            },
            "relevance" : {
                "description" : "Model Primitive Datatype = Float. ",
                "type" : "number",
                "format" : "float"
            }
        },
        "required" : [ "name","learningResourceType","publisher" ],
        "additionalProperties" : true
    },
                        

2.5.13 "ResourceSet.Type" Definition

The OpenAPI JSON Schema description for the "ResourceSet.Type" Complex Type is given in Table 2.5.13.

Table 2.5.13 - OpenAPI JSON Schema description for the "ResourceSet.Type" Complex Type.
Annotations The container for the set of resources that have been supplied by the service provider. This may be empty if none of the resources fulfill the search criteria. The order of resources is not significant.
Diagram To be supplied in a later release of this document
Model resources{0..*}
Source
    "ResourceSet.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "resources" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 0,
                "items" : {
                    "$ref" : "#/definitions/Resource.Type"
                }
            }
        },
        "additionalProperties" : false
    },
                        

2.5.14 "SetOfGUIDs.Type" Definition

The OpenAPI JSON Schema description for the "SetOfGUIDs.Type" Complex Type is given in Table 2.5.14.

Table 2.5.14 - OpenAPI JSON Schema description for the "SetOfGUIDs.Type" Complex Type.
Annotations The container for the set of GUIDs that annotate a resource for a particular geographical/socio-political/etc. region.
Diagram To be supplied in a later release of this document
Model region{0..1} ! version{0..1} ! labelledGUID{1..*}
Source
    "SetOfGUIDs.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "region" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "version" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "labelledGUID" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 1,
                "items" : {
                    "$ref" : "#/definitions/LabelledGUID.Type"
                }
            }
        },
        "required" : [ "labelledGUID" ],
        "additionalProperties" : false
    },
                        

2.5.15 "Subject.Type" Definition

The OpenAPI JSON Schema description for the "Subject.Type" Complex Type is given in Table 2.5.15.

Table 2.5.15 - OpenAPI JSON Schema description for the "Subject.Type" Complex Type.
Annotations This is the container for the details of a subject that is covered by the content within a LOR.
Diagram To be supplied in a later release of this document
Model identifier{1..1} ! name{1..1} ! parent{1..1}
Source
    "Subject.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "identifier" : {
                "description" : "Model Primitive Datatype = PositiveInteger. ",
                "type" : "integer",
                "format" : "int32",
                "minimum" : 1
            },
            "name" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "parent" : {
                "description" : "Model Primitive Datatype = PositiveInteger. ",
                "type" : "integer",
                "format" : "int32",
                "minimum" : 1
            }
        },
        "required" : [ "identifier","name","parent" ],
        "additionalProperties" : false
    },
                        

2.5.16 "SubjectSet.Type" Definition

The OpenAPI JSON Schema description for the "SubjectSet.Type" Complex Type is given in Table 2.5.16.

Table 2.5.16 - OpenAPI JSON Schema description for the "SubjectSet.Type" Complex Type.
Annotations The container for the set of subjects that have been supplied by the service provider. This may be empty if none of the subjects fulfill the search criteria. The order of subjects is not significant.
Diagram To be supplied in a later release of this document
Model subjects{0..*}
Source
    "SubjectSet.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "subjects" : {
                "description" : "...",
                "type" : "array",
                "minItems" : 0,
                "items" : {
                    "$ref" : "#/definitions/Subject.Type"
                }
            }
        },
        "additionalProperties" : false
    },
                        

2.5.17 "TextComplexity.Type" Definition

The OpenAPI JSON Schema description for the "TextComplexity.Type" Complex Type is given in Table 2.5.17.

Table 2.5.17 - OpenAPI JSON Schema description for the "TextComplexity.Type" Complex Type.
Annotations The name/pair value container for a text complexity annotation.
Diagram To be supplied in a later release of this document
Model name{1..1} ! value{1..1}
Source
    "TextComplexity.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "name" : {
                "description" : "...",
                "type" : "string",
                "enum" : [ "Lexile","Flesch-Kincaid","Dale-Schall","DRA","Fountas-Pinnell" ]
            },
            "value" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            }
        },
        "required" : [ "name","value" ],
        "additionalProperties" : false
    },
                        

2.5.18 "Vendor.Type" Definition

The OpenAPI JSON Schema description for the "Vendor.Type" Complex Type is given in Table 2.5.18.

Table 2.5.18 - OpenAPI JSON Schema description for the "Vendor.Type" Complex Type.
Annotations The container for the information about the vendor who created the resource.
Diagram To be supplied in a later release of this document
Model code{1..1} ! name{1..1} ! description{0..1} ! url{0..1} ! emailContact{0..1}
Source
    "Vendor.Type" : {
        "description" : "...",
        "type" : "object",
        "properties" : {
            "code" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "name" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            },
            "description" : {
                "description" : "Model Primitive Datatype = String. ",
                "type" : "string"
            },
            "url" : {
                "description" : "Model Primitive Datatype = AnyURI. ",
                "type" : "string",
                "format" : "uri"
            },
            "emailContact" : {
                "description" : "Model Primitive Datatype = NormalizedString. ",
                "type" : "string"
            }
        },
        "required" : [ "code","name" ],
        "additionalProperties" : false
    },
                        

2.5.19 "imsx_CodeMinor.Type" Definition

The OpenAPI JSON Schema description for the "imsx_CodeMinor.Type" Complex Type is given in Table 2.5.19.

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

2.5.20 "imsx_CodeMinorField.Type" Definition

The OpenAPI JSON Schema description for the "imsx_CodeMinorField.Type" Complex Type is given in Table 2.5.20.

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

2.5.21 "imsx_StatusInfo.Type" Definition

The OpenAPI JSON Schema description for the "imsx_StatusInfo.Type" Complex Type is given in Table 2.5.21.

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

toc | top

References

[CASE, 17] Competencies and Academic Standards Exchange (CASE) Service, B.Grogan, G.Nadeau, C.Smythe and J.Hobson, IMS Global Learning Consortium Inc., July 2017, https://www.imsglobal.org/sites/default/files/CASE/casev1p0/information_model/caseservicev1p0_infomodelv1p0.html.
[I-BAT, 06] IMS Binding Auto-generation Toolkit (I-BAT), C.Smythe, IMS Global Learning Consortium Inc., July 2006.
[ISO 8601] ISO8601:2004 Data elements and interchange formats - Information interchange - Representation of dates and times, ISO, International Standards Organization (ISO), 2000.
[OAS, 14] OpenAPI Specification (version 2), D.Miller, J.Harmon, J.Whitlock, K.Hahn, M.Gardiner, M.Ralphson, R.Dolin, R.Ratovsky and T.Tam, OpenAPI Initiative (Linux Foundation), September 2014, https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md.
[RFC 2119] Key words for use in RFCs to Indicate Requirement Levels., S. Bradner, IETF (RFC 2119), March 1997, https://tools.ietf.org/html/rfc2119.
[RFC 3066] Tags for the Identification of Languages, H.Alvestrand, IETF (RFC 3066), January 2001, https://www.ietf.org/rfc/rfc3066.txt.
[RS-BP, 18] IMS LTI Resources Search Service 1.0 Best Practices and Implementation Guide Final Release, A.Blum, T.Ingram, V.Jaiswal and J.Hobson, IMS Global Learning Consortium Inc., September 2018, http://www.imsglobal.org/lti/rsv1p0/rsservicev1p0_bpigv1p0.html.
[RS-CC, 18] IMS LTI Resources Search Service 1.0 Conformance and Certification Final Release, A.Blum, T.Ingram, V.Jaiswal and C.Smythe, IMS Global Learning Consortium Inc., September 2018, http://www.imsglobal.org/lti/rsv1p0/rsservicev1p0_conformancev1p0.html.
[RS-RJ, 18] IMS LTI Resources Search Service 1.0 REST/JSON Final Release, A.Blum, T.Ingram, V.Jaiswal and C.Smythe, IMS Global Learning Consortium Inc., September 2018, http://www.imsglobal.org/lti/rsv1p0/rsservicev1p0_restbindv1p0.html.
[RS-SM, 18] IMS LTI Resources Search Service 1.0 Service Model Final Release, A.Blum, T.Ingram, V.Jaiswal and C.Smythe, IMS Global Learning Consortium Inc., September 2018, http://www.imsglobal.org/lti/rsv1p0/rsservicev1p0_infomodelv1p0.html.
[RS-UC, 18] IMS LTI Resources Search Service 1.0 Use-cases Final Release, T.Ingram, A.Blum, V.Jaiswal and J.Hobson, IMS Global Learning Consortium Inc., September 2018, http://www.imsglobal.org/lti/rsv1p0/rsservicev1p0_usecasesv1p0.html.
[UNICODE, 16] UNICODE Collation Algorithm Version 9.0, M.Davis, K.Whistler and M.Scheer, Unicode Technical Standard #10, May 2016.

toc | top

Appendix A OpenAPI Modeling Terms

A1 OpenAPI Descriptions Explanations

This Section is NON-NORMATIVE.

These definitions are with respect to the OpenAPI version 2 specification [OAS, 14].

A1.1 OpenAPI General Information Table Explanation

Table A1.1 provides the key to the OpenAPI general information.

Table A1.1 The key to the tabular description of the OpenAPI general information.
Category Definition and Usage
Swagger Version The version of the OpenAPI/Swagger specification for this OpenAPI description (this must be set as 2.0).
Specification Title The title of the specification being described.
Specification Version The version of the specification being described.
Description A short, human readable description of the specification being described using OpenAPI.
Terms of Service The Terms of Service for the API.
Contact The contact information for the API. For the IMS OpenAPI released files this will be set as "Lisa Mattson (IMS COO)". When used for an implementation this should be changed to the actual contact person.
License The URL for the associated IMS License for the use of this OpenAPI description.
Host The host (name or ip) serving the API. For the IMS OpenAPI 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.

toc | top

A1.2 OpenAPI Tags Table Explanation

Table A1.2 provides the key to the tabular description of the OpenAPI tags information.

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

toc | top

A1.3 OpenAPI Security Table Explanation

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

Table A1.3 The key to the tabular description of the OpenAPI security information.
Category Definition and Usage
Security Label The label by which this mode is identified within the OpenAPI file.
Type The security mode supported. The permitted values are:
  • "basic" - use of basic authentication
  • "apikey" - use of an API key (in the header or as a query parameter)
  • "oauth2" - use of OAuth 2.0
Description A human readable description of the usage of this security scheme.
Flow The flow used by the OAuth2 security scheme. The permitted values are:
  • "implicit" - implicit grant type is used to obtain access tokens (see [RFC 6749] sub-section 4.2)
  • "password" - resource owner password credentials grant type (see [RFC 6749] sub-section 4.3)
  • "application" - client credentials grant type (see [RFC 6749] sub-section 4.4)
  • "accessCode" - authorization code grant type (see [RFC 6749] sub-section 4.1)
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
Scopes The set of labels by which the global scope will be identified.
Global Scope The default identification of the security mode to be applied to an endpoint.

toc | top

A1.4 OpenAPI Paths Table Explanation

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

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

toc | top

A1.5 OpenAPI Definitions Table Explanation

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

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

toc | top

Appendix B OpenAPI Listings

This Section is NOT NORMATIVE.

B1 Listing of the OpenAPI (JSON) File

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

{
    "swagger" : "2.0",
    "info" : {
        "version" : "1.0",
        "title" : "LTI Resource Search Service OpenAPI (JSON) Definition",
        "description" : "The IMS LTI Resource Search (RS) Service defines how to search digital respositories for a set of resources. ",
        "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/rs/v1p0",
    "schemes" : [ "http","https" ],
    "tags" : [
        {
            "name" : "ResourceSearchManager",
            "description" : "The set of service operations that manage searching for resources."
        },
        {
            "name" : "SubjectsManager",
            "description" : "The set of service operations that manage access to the lists of subjects supported by a LOR."
        }
    ],
    "paths" : {
        "/resources" : {
            "get" : {
                "operationId" : "searchForResources",
                "summary" : "The REST read request message for the searchForResources() API call.",
                "tags" : [ "ResourceSearchManager" ],
                "description" : "This is the search request. The criteria for the search are passed as query parameters and the set of identified resources are returned in the payload for the response message.",
                "parameters" : [
                    {
                        "name" : "limit",
                        "in" : "query",
                        "description" : "This is used as part of the data pagination mechanism to control the number of records returned in any one response message. The 'limit' defines the download segmentation value i.e. the maximum number of records to be contained in the response. The form of implementation is described in the corresponding binding document(s).",
                        "required" : false,
                        "type" : "integer",
                        "format" : "int32",
                        "allowEmptyValue" : false,
                        "default" : 100,
                        "minimum" : 1
                    },
                    {
                        "name" : "offset",
                        "in" : "query",
                        "description" : "This is used as part of the data pagination mechanism to control the download rate of data. The 'offset' is the number of the first record to be supplied in the segmented response message. The form of implementation is described in the corresponding binding document(s).",
                        "required" : false,
                        "type" : "integer",
                        "format" : "int32",
                        "allowEmptyValue" : false,
                        "default" : 0,
                        "minimum" : 0
                    },
                    {
                        "name" : "filter",
                        "in" : "query",
                        "description" : "The filtering rules to be applied when identifying the records to be supplied in the response message. Filtering defines the search criteria to be applied at the service provider for the identification and selection of the resources to be returned. A strict vocabulary is used for the permitted search terms (see the RS REST/JSON binding document 'Keyword Searching' in Sub-section 3.1 [RS-RJ, 18]).",
                        "required" : false,
                        "type" : "string",
                        "allowEmptyValue" : false
                    },
                    {
                        "name" : "sort",
                        "in" : "query",
                        "description" : "This is used as part of the sorting mechanism to be use by the service provider. The 'sort' identifies the sort criteria to be used for the records in the response message. Use with the orderBy parameter. The form of implementation is described in the corresponding binding document(s).",
                        "required" : false,
                        "type" : "string",
                        "allowEmptyValue" : false
                    },
                    {
                        "name" : "orderBy",
                        "in" : "query",
                        "description" : "This is used as part of the sorting mechanism to be use by the service provider. This defines the form of ordering for response to the sorted request i.e. ascending (asc) or descending (desc). The form of implementation is described in the corresponding binding document(s).",
                        "required" : false,
                        "type" : "string",
                        "enum" : [ "asc","desc" ],
                        "allowEmptyValue" : false
                    },
                    {
                        "name" : "fields",
                        "in" : "query",
                        "description" : "To identify the range of fields, and only those fields, that should be supplied in the response message. The permitted vocabulary for these fields is determined by the payloads that are returned in the corresponding response messages.",
                        "required" : false,
                        "type" : "array",
                        "items" : {
                            "type" : "string"
                        },
                        "collectionFormat" : "csv",
                        "allowEmptyValue" : false
                    }
                ],
                "responses" : {
                    "200" : {
                        "description" : "The response code for when the query request has been successfully completed and the set of identified resources returned. This would be accompanied by the 'codeMajor/severity' values of 'success/status'",
                        "schema" : {
                            "$ref" : "#/definitions/ResourceSet.Type"
                        }
                    },
                    "400" : {
                        "description" : "The request has been declared as 'bad'.  This will be due to the provision of bad data in the request query parameters. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                        "schema" : {
                            "$ref" : "#/definitions/imsx_StatusInfo.Type"
                        }
                    },
                    "401" : {
                        "description" : "The request was not correctly authorised i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                        "schema" : {
                            "$ref" : "#/definitions/imsx_StatusInfo.Type"
                        }
                    },
                    "403" : {
                        "description" : "This is used to indicate that the server can be reached and process the request but refuses to take any further action. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                        "schema" : {
                            "$ref" : "#/definitions/imsx_StatusInfo.Type"
                        }
                    },
                    "500" : {
                        "description" : "This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                        "schema" : {
                            "$ref" : "#/definitions/imsx_StatusInfo.Type"
                        }
                    },
                    "default" : {
                        "description" : "This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.",
                        "schema" : {
                            "$ref" : "#/definitions/imsx_StatusInfo.Type"
                        }
                    },
                    "422" : {
                        "description" : "This error condition may occur if a JSON request body contains well-formed i.e. syntactically correct, but semantically erroneous, JSON instructions. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                        "schema" : {
                            "$ref" : "#/definitions/imsx_StatusInfo.Type"
                        }
                    },
                    "429" : {
                        "description" : "The server is receiving too many requests i.e. 'server_busy'. Retry at a later time. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                        "schema" : {
                            "$ref" : "#/definitions/imsx_StatusInfo.Type"
                        }
                    }
                }
            }
        },
        "/subjects" : {
            "get" : {
                "operationId" : "getAllSubjects",
                "summary" : "The REST read request message for the getAllSubjects() API call.",
                "tags" : [ "SubjectsManager" ],
                "description" : "To obtain, read, the list of subjects that are supported by a LOR.",
                "responses" : {
                    "200" : {
                        "description" : "The response code for when the query request has been successfully completed and the set of subjects returned. This would be accompanied by the 'codeMajor/severity' values of 'success/status'",
                        "schema" : {
                            "$ref" : "#/definitions/SubjectSet.Type"
                        }
                    },
                    "400" : {
                        "description" : "The request has been declared as 'bad'.  This will be due to the provision of bad data in the request query parameters. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                        "schema" : {
                            "$ref" : "#/definitions/imsx_StatusInfo.Type"
                        }
                    },
                    "401" : {
                        "description" : "The request was not correctly authorised i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                        "schema" : {
                            "$ref" : "#/definitions/imsx_StatusInfo.Type"
                        }
                    },
                    "403" : {
                        "description" : "This is used to indicate that the server can be reached and process the request but refuses to take any further action. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                        "schema" : {
                            "$ref" : "#/definitions/imsx_StatusInfo.Type"
                        }
                    },
                    "422" : {
                        "description" : "This error condition may occur if a JSON request body contains well-formed i.e. syntactically correct, but semantically erroneous, JSON instructions. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                        "schema" : {
                            "$ref" : "#/definitions/imsx_StatusInfo.Type"
                        }
                    },
                    "429" : {
                        "description" : "The server is receiving too many requests i.e. 'server_busy'. Retry at a later time. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.",
                        "schema" : {
                            "$ref" : "#/definitions/imsx_StatusInfo.Type"
                        }
                    },
                    "500" : {
                        "description" : "This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. ",
                        "schema" : {
                            "$ref" : "#/definitions/imsx_StatusInfo.Type"
                        }
                    },
                    "default" : {
                        "description" : "This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.",
                        "schema" : {
                            "$ref" : "#/definitions/imsx_StatusInfo.Type"
                        }
                    }
                }
            }
        }
    },
    "definitions" : {
        "CCLTILink.Type" : {
            "description" : "The extended set of information used to define the presence of an LTI Link resource (this is based upon the definition for including an LTI link inside an IMS Common Cartridge or IMS Thin Common Cartridge).",
            "type" : "object",
            "allOf" : [
                {
                    "$ref" : "#/definitions/LTILink.Type"
                },
                {
                    "type" : "object",
                    "properties" : {
                        "cartridge_bundle" : {
                            "$ref" : "#/definitions/LTILinkResourceRef.Type"
                        },
                        "cartridge_icon" : {
                            "$ref" : "#/definitions/LTILinkResourceRef.Type"
                        },
                        "metadata" : {
                            "$ref" : "#/definitions/Metadata.Type"
                        }
                    },
                    "additionalProperties" : false
                }
            ]
        },
        "CSMSet.Type" : {
            "description" : "This is the is the container for the set of curriculum standards metadata. Each member of the set contains the curriculum standards metadata for a specific source of the GUIDs.",
            "type" : "object",
            "properties" : {
                "resourceLabel" : {
                    "description" : "Model Primitive Datatype = NormalizedString. This is a human readable label used to identify the type of resource, or part of resource, to which the enclosed metadata refers.",
                    "type" : "string"
                },
                "resourcePartId" : {
                    "description" : "Model Primitive Datatype = NormalizedString. This is used to contain the appropriate identifier that is used to identify the resource part.",
                    "type" : "string"
                },
                "curriculumStandardsMetadata" : {
                    "description" : "The curriculum standards associated from a single source of the curriculum standards definition.",
                    "type" : "array",
                    "minItems" : 1,
                    "items" : {
                        "$ref" : "#/definitions/CurriculumStandardsMetadata.Type"
                    }
                }
            },
            "required" : [ "curriculumStandardsMetadata" ],
            "additionalProperties" : false
        },
        "CurriculumStandardsMetadata.Type" : {
            "description" : "This is the container for the special metadata for curriculum standards for a particular domain of GUID provider.",
            "type" : "object",
            "properties" : {
                "providerId" : {
                    "description" : "Model Primitive Datatype = NormalizedString. This is used to denote the originator of the GUID scheme.",
                    "type" : "string"
                },
                "setOfGUIDs" : {
                    "description" : "The set of curriculum standards GUIDs that apply to the learning associated resource.",
                    "type" : "array",
                    "minItems" : 1,
                    "items" : {
                        "$ref" : "#/definitions/SetOfGUIDs.Type"
                    }
                }
            },
            "required" : [ "setOfGUIDs" ],
            "additionalProperties" : false
        },
        "LTILink.Type" : {
            "description" : "The container for all of the core information about an LTI Link. ",
            "type" : "object",
            "properties" : {
                "title" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The human readable title/label for the activity being addressed by the content available through the LTI link.",
                    "type" : "string"
                },
                "description" : {
                    "description" : "Model Primitive Datatype = String. A human readable description of the activity addressed by the content supplied via the LTI link.",
                    "type" : "string"
                },
                "custom" : {
                    "$ref" : "#/definitions/PropertySet.Type"
                },
                "extensions" : {
                    "$ref" : "#/definitions/PlatformPropertySet.Type"
                },
                "launch_url" : {
                    "description" : "Model Primitive Datatype = AnyURI. The URL for the LTI launch. One of either the launch_url or the secure_launch_url must be specified. It is acceptable to specify both and if both are specified, the Tool Consumer (TC) decides which to use. Typically, the TC will use a secure_launch_url when embedding the Tool in a secure page and the launch_url when embedding the tool in a non-secure page. So, it is important that the Tool Provider (TP) provides the same functionality whether the launch_url or secure_launch_url is used.",
                    "type" : "string",
                    "format" : "uri"
                },
                "secure_launch_url" : {
                    "description" : "Model Primitive Datatype = AnyURI. A secure URL for the LTI launch. One of either the launch_url or the secure_launch_url must be specified. It is acceptable to specify both and if both are specified, the Tool Consumer (TC) decides which to use. Typically, the TC will use a secure_launch_url when embedding the Tool in a secure page and the launch_url when embedding the tool in a non-secure page. So, it is important that the Tool Provider (TP) provides the same functionality whether the launch_url or secure_launch_url is used.",
                    "type" : "string",
                    "format" : "uri"
                },
                "icon" : {
                    "description" : "Model Primitive Datatype = AnyURI. A URL to an icon for this tool.",
                    "type" : "string",
                    "format" : "uri"
                },
                "secure_icon" : {
                    "description" : "Model Primitive Datatype = AnyURI. A secure URL to an icon for this tool.",
                    "type" : "string",
                    "format" : "uri"
                },
                "vendor" : {
                    "$ref" : "#/definitions/Vendor.Type"
                }
            },
            "required" : [ "title","vendor" ],
            "additionalProperties" : false
        },
        "LTILinkResourceRef.Type" : {
            "description" : "The container for the link information.",
            "type" : "object",
            "properties" : {
                "name" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The name of the type of content supplied by the link.",
                    "type" : "string"
                },
                "resourceUri" : {
                    "description" : "Model Primitive Datatype = AnyURI. The URI for the link.",
                    "type" : "string",
                    "format" : "uri"
                }
            },
            "required" : [ "name","resourceUri" ],
            "additionalProperties" : false
        },
        "LabelledGUID.Type" : {
            "description" : "The labelled curriculum standard GUID.",
            "type" : "object",
            "properties" : {
                "label" : {
                    "description" : "Model Primitive Datatype = NormalizedString. A human readable string to provide a clue about the nature of the curriculum standard.",
                    "type" : "string"
                },
                "caseItemURI" : {
                    "description" : "Model Primitive Datatype = AnyURI. The corresponding Competency and Academic Standards (CASE) URI. This is the URI used for alignment with the IMS CASE Service 1.0 specification [CASE, 17].",
                    "type" : "string",
                    "format" : "uri"
                },
                "GUID" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The GUID itself.",
                    "type" : "string"
                }
            },
            "required" : [ "GUID" ],
            "additionalProperties" : false
        },
        "LearningObjectives.Type" : {
            "description" : "The container for the learning objectives which are addressed by the resource.",
            "type" : "object",
            "properties" : {
                "alignmentType" : {
                    "description" : "A category of alignment between the learning resource and the framework node.",
                    "type" : "string",
                    "enum" : [ "assesses","teaches","requires","textComplexity","readingLevel","educationalSubject","educationLevel" ]
                },
                "educationalFramework" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The framework to which the resource being described is aligned.",
                    "type" : "string"
                },
                "targetDescription" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The description of a node in an established educational framework.",
                    "type" : "string"
                },
                "targetName" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The name of a node in an established educational framework.",
                    "type" : "string"
                },
                "targetURL" : {
                    "description" : "Model Primitive Datatype = AnyURI. The URL of a node in an established educational framework.",
                    "type" : "string",
                    "format" : "uri"
                },
                "caseItemUri" : {
                    "description" : "Model Primitive Datatype = AnyURI. Reference to a CASE CFItem for a standard or skill [CASE, 17].",
                    "type" : "string",
                    "format" : "uri"
                },
                "caseItemGUID" : {
                    "description" : "Model Primitive Datatype = NormalizedString. Reference to CASE CFItem as a GUID [CASE, 17].",
                    "type" : "string"
                }
            },
            "required" : [ "alignmentType" ],
            "additionalProperties" : false
        },
        "Metadata.Type" : {
            "description" : "The container for all of the metadata associated with the LTI link. Currently this metadata is restricted to the set of curriculum standards annotations.",
            "type" : "object",
            "properties" : {
                "curriculumStandardsMetadataSet" : {
                    "$ref" : "#/definitions/CSMSet.Type"
                }
            },
            "additionalProperties" : false
        },
        "PlatformPropertySet.Type" : {
            "description" : "The container for the collection of properties that are available for a specific platform.",
            "type" : "object",
            "properties" : {
                "platform" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The identifier for the authoring environment.",
                    "type" : "string"
                },
                "properties" : {
                    "description" : "The set of extension properties for the identified platform.",
                    "type" : "array",
                    "minItems" : 1,
                    "items" : {
                        "$ref" : "#/definitions/Property.Type"
                    }
                }
            },
            "required" : [ "platform","properties" ],
            "additionalProperties" : false
        },
        "Property.Type" : {
            "description" : "The container for the name/value pair for a specific property.",
            "type" : "object",
            "properties" : {
                "name" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The name of the key for the property.",
                    "type" : "string"
                },
                "value" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The value for the property.",
                    "type" : "string"
                }
            },
            "required" : [ "name","value" ],
            "additionalProperties" : false
        },
        "PropertySet.Type" : {
            "description" : "The container for the collection of properties that have been specified.",
            "type" : "object",
            "properties" : {
                "properties" : {
                    "description" : "The set of properties for the identified platform or orginal authoring platform.",
                    "type" : "array",
                    "minItems" : 1,
                    "items" : {
                        "$ref" : "#/definitions/Property.Type"
                    }
                }
            },
            "required" : [ "properties" ],
            "additionalProperties" : false
        },
        "Resource.Type" : {
            "description" : "The container for the information about a resource that is supported by a LOR.",
            "type" : "object",
            "properties" : {
                "name" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The name/title of resource.",
                    "type" : "string"
                },
                "description" : {
                    "description" : "Model Primitive Datatype = NormalizedString. A human readable description of the contents of the resource.",
                    "type" : "string"
                },
                "subject" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The subject(s) of the resource. May have multiple subjects tagged.",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string"
                    }
                },
                "url" : {
                    "description" : "Model Primitive Datatype = AnyURI. How to access resource over Internet e.g. HTTP, FTP, etc. A resource must have either a URL or or a LTI Link.",
                    "type" : "string",
                    "format" : "uri"
                },
                "ltiLink" : {
                    "$ref" : "#/definitions/CCLTILink.Type"
                },
                "learningResourceType" : {
                    "description" : "The type of the resource. There may be multiple types.",
                    "type" : "array",
                    "minItems" : 1,
                    "items" : {
                        "enum" : [ "Assessment/Item","Assessment/Formative","Assessment/Interim","Assessment/Rubric","Assessment/Preparation","Collection/Course","Collection/Unit","Collection/Curriculum Guide","Collection/Lesson","Game","Interactive/Simulation","Interactive/Animation","Interactive/Whiteboard","Activity/Worksheet","Activity/Learning","Activity/Experiment","Lecture","Text/Book","Text/Chapter","Text/Document","Text/Article","Text/Passage","Text/Textbook","Text/Reference","Text/Website","Media/Audio","Media/Images/Visuals","Media/Video","Other" ]
                    }
                },
                "language" : {
                    "description" : "Model Primitive Datatype = Language. The languages used in the resource. International two digit code for language e.g. 'en' for English. Use the [RFC 3066] annotation.",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string"
                    }
                },
                "thumbnailUrl" : {
                    "description" : "Model Primitive Datatype = AnyURI. Link to a thumbnail representing resource.",
                    "type" : "string",
                    "format" : "uri"
                },
                "typicalAgeRange" : {
                    "description" : "Model Primitive Datatype = NormalizedString. Age of the typical intended user. This is described as EITHER the minimum-maximum age range (the format is '11-12', '5-7', etc. with ONLY integers permitted) OR the age as a single integer e.g. '9'.",
                    "type" : "string"
                },
                "textComplexity" : {
                    "description" : "A number indicating text complexity based on number of established measures.",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/TextComplexity.Type"
                    }
                },
                "learningObjectives" : {
                    "description" : "The set of learning objectives addressed by the resource.",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/LearningObjectives.Type"
                    }
                },
                "author" : {
                    "description" : "Model Primitive Datatype = NormalizedString. Author or creator of the resource.",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string"
                    }
                },
                "publisher" : {
                    "description" : "Model Primitive Datatype = NormalizedString. Owner of the rights to the resource or who made it available (company or person).",
                    "type" : "string"
                },
                "useRightsURL" : {
                    "description" : "Model Primitive Datatype = AnyURI. URL describing how resource can be licensed. Could be Creative Commons license link or link to other specific open or proprietary license.",
                    "type" : "string",
                    "format" : "uri"
                },
                "timeRequired" : {
                    "description" : "Model Primitive Datatype = Duration. Time that the resource takes to consume. Use the [ISO 8601] format for a duration.",
                    "type" : "string"
                },
                "technicalFormat" : {
                    "description" : "Model Primitive Datatype = NormalizedString. A valid MIME type format for the resource e.g. text, HTML, PDF, MPEG, MP3, etc. See https://www.iana.org/assignments/media-types/media-types.xhtml.",
                    "type" : "string"
                },
                "educationalAudience" : {
                    "description" : "For whom the resource is intended.",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "enum" : [ "student","teacher","administrator","parent","aide","proctor","guardian","relative" ]
                    }
                },
                "accessibilityAPI" : {
                    "description" : "Which (if any) accessibility API is supported by the resource.",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "enum" : [ "MSAA","UIAutomation","ARIAv1","IAccessible2","AndroidAccessibility","ATK","AT-SPI","BlackberryAccessibility","JavaAccessibility","MacOSXAccessibility" ]
                    }
                },
                "accessibilityInputMethods" : {
                    "description" : "How the resource can be controlled by the user, which includes full keyboard controllability, mouse controllability, and voice controllability.",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "enum" : [ "fullKeyboardControl","fullMouseControl","fullVoiceControl" ]
                    }
                },
                "accessibilityFeatures" : {
                    "description" : "Model Primitive Datatype = NormalizedString. These include alternatives and listed enhancements for the resource. These can be transformation features, navigation features, control features or augmentation features.",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "type" : "string"
                    }
                },
                "accessibilityHazards" : {
                    "description" : "The set of accessibility hazards which are encountered when using this resource.",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "enum" : [ "flashing","sound","olfactoryHazard","motionSimulation" ]
                    }
                },
                "accessMode" : {
                    "description" : "The human sensory perceptual system or cognitive faculty through which a person may process or perceive information.",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "enum" : [ "auditory","color","itemSize","olfactory","orientation","position","tactile","textOnImage","textual","visual" ]
                    }
                },
                "publishDate" : {
                    "description" : "Model Primitive Datatype = Date. Date the resource was published by the publisher. The 'date' using the [ISO 8601] format.",
                    "type" : "string",
                    "format" : "date"
                },
                "rating" : {
                    "description" : "A rating of the quality of the resource determined by the Search Provider. Often derived from crowdsource ratings.",
                    "type" : "string",
                    "enum" : [ "1","2","3","4","5" ]
                },
                "relevance" : {
                    "description" : "Model Primitive Datatype = Float. This is a floating point value based on relevance to the specific search. Higher relevance has a higher number.",
                    "type" : "number",
                    "format" : "float"
                }
            },
            "required" : [ "name","learningResourceType","publisher" ],
            "additionalProperties" : true
        },
        "ResourceSet.Type" : {
            "description" : "The container for the set of resources that have been supplied by the service provider. This may be empty if none of the resources fulfill the search criteria. The order of resources is not significant.",
            "type" : "object",
            "properties" : {
                "resources" : {
                    "description" : "The actual resources supplied by the service provider. The order of resources is not significant.",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/Resource.Type"
                    }
                }
            },
            "additionalProperties" : false
        },
        "SetOfGUIDs.Type" : {
            "description" : "The  container for the set of GUIDs that annotate a resource for a particular geographical/socio-political/etc. region.",
            "type" : "object",
            "properties" : {
                "region" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The region responsible for the definition. ",
                    "type" : "string"
                },
                "version" : {
                    "description" : "Model Primitive Datatype = NormalizedString. This is used to denote any relevant versioning information.",
                    "type" : "string"
                },
                "labelledGUID" : {
                    "description" : "The actual GUID plus the corresponding labelling information.",
                    "type" : "array",
                    "minItems" : 1,
                    "items" : {
                        "$ref" : "#/definitions/LabelledGUID.Type"
                    }
                }
            },
            "required" : [ "labelledGUID" ],
            "additionalProperties" : false
        },
        "Subject.Type" : {
            "description" : "This is the container for the details of a subject that is covered by the content within a LOR.",
            "type" : "object",
            "properties" : {
                "identifier" : {
                    "description" : "Model Primitive Datatype = PositiveInteger. The unique identifier, an integer, of the subject node. For the root node the value will be 'null'. ",
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 1
                },
                "name" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The name of the subject node, which may have any character and need not be unique with the returned taxonomy. ",
                    "type" : "string"
                },
                "parent" : {
                    "description" : "Model Primitive Datatype = PositiveInteger. An integer (the identifier of that subject node) that references the single parent of this node. The returned data must be a true rooted tree, where each node returned has a single parent. ",
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 1
                }
            },
            "required" : [ "identifier","name","parent" ],
            "additionalProperties" : false
        },
        "SubjectSet.Type" : {
            "description" : "The container for the set of subjects that have been supplied by the service provider. This may be empty if none of the subjects fulfill the search criteria. The order of subjects is not significant.",
            "type" : "object",
            "properties" : {
                "subjects" : {
                    "description" : "The actual list of subject supplied by the service provider. The order of subjects is not significant.",
                    "type" : "array",
                    "minItems" : 0,
                    "items" : {
                        "$ref" : "#/definitions/Subject.Type"
                    }
                }
            },
            "additionalProperties" : false
        },
        "TextComplexity.Type" : {
            "description" : "The name/pair value container for a text complexity annotation.",
            "type" : "object",
            "properties" : {
                "name" : {
                    "description" : "The name of the complexity measure. This is taken from an enumerated vocabulary.",
                    "type" : "string",
                    "enum" : [ "Lexile","Flesch-Kincaid","Dale-Schall","DRA","Fountas-Pinnell" ]
                },
                "value" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The text complexity measure in terms of the named measuring scale.",
                    "type" : "string"
                }
            },
            "required" : [ "name","value" ],
            "additionalProperties" : false
        },
        "Vendor.Type" : {
            "description" : "The container for the information about the vendor who created the resource.",
            "type" : "object",
            "properties" : {
                "code" : {
                    "description" : "Model Primitive Datatype = NormalizedString. An identification code for the vendor.",
                    "type" : "string"
                },
                "name" : {
                    "description" : "Model Primitive Datatype = NormalizedString. The name of the vendor.",
                    "type" : "string"
                },
                "description" : {
                    "description" : "Model Primitive Datatype = String. A human readable description of the vendor.",
                    "type" : "string"
                },
                "url" : {
                    "description" : "Model Primitive Datatype = AnyURI. A URL for the vendor.",
                    "type" : "string",
                    "format" : "uri"
                },
                "emailContact" : {
                    "description" : "Model Primitive Datatype = NormalizedString. Contact email for the vendor.",
                    "type" : "string"
                }
            },
            "required" : [ "code","name" ],
            "additionalProperties" : false
        },
        "imsx_CodeMinor.Type" : {
            "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_CodeMinorField.Type"
                    }
                }
            },
            "required" : [ "imsx_codeMinorField" ],
            "additionalProperties" : false
        },
        "imsx_CodeMinorField.Type" : {
            "description" : "This is the container for a single code minor status code.",
            "type" : "object",
            "properties" : {
                "imsx_codeMinorFieldName" : {
                    "description" : "Model Primitive Datatype = NormalizedString. This should contain the identity of the system that has produced the code minor status code report.",
                    "type" : "string"
                },
                "imsx_codeMinorFieldValue" : {
                    "description" : "The code minor status code (this is a value from the corresponding enumerated vocabulary).",
                    "type" : "string",
                    "enum" : [ "fullsuccess","forbidden","invalid_query_parameter","unauthorisedrequest","internal_server_error","server_busy","invalid_data" ]
                }
            },
            "required" : [ "imsx_codeMinorFieldName","imsx_codeMinorFieldValue" ],
            "additionalProperties" : false
        },
        "imsx_StatusInfo.Type" : {
            "description" : "This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.",
            "type" : "object",
            "properties" : {
                "imsx_codeMajor" : {
                    "description" : "The code major value (from the corresponding enumerated vocabulary).",
                    "type" : "string",
                    "enum" : [ "success","processing","failure","unsupported" ]
                },
                "imsx_severity" : {
                    "description" : "The severity value (from the corresponding enumerated vocabulary).",
                    "type" : "string",
                    "enum" : [ "status","warning","error" ]
                },
                "imsx_description" : {
                    "description" : "Model Primitive Datatype = String. A human readable description supplied by the entity creating the status code information.",
                    "type" : "string"
                },
                "imsx_codeMinor" : {
                    "$ref" : "#/definitions/imsx_CodeMinor.Type"
                }
            },
            "required" : [ "imsx_codeMajor","imsx_severity" ],
            "additionalProperties" : false
        }
    },
    "consumes" : [ "application/json" ],
    "produces" : [ "application/json" ]
}
        

B2 Listing of the OpenAPI (YAML) File

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

swagger: '2.0'

#####################################################################################
#                               API Information                                     #
#####################################################################################
info:
    version: '1.0'
    title: LTI Resource Search Service OpenAPI (YAML) Definition
    description: The IMS LTI Resource Search (RS) Service defines how to search digital respositories for a set of resources.
    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/rs/v1p0
schemes:
    - http
    - https
consumes:
    - application/json
produces:
    - application/json

#####################################################################################
#                                  Tags                                             #
#####################################################################################
tags:
    - name: ResourceSearchManager
      description: |
        The set of service operations that manage searching for resources.
    - name: SubjectsManager
      description: |
        The set of service operations that manage access to the lists of subjects supported by a LOR.

#####################################################################################
#                                 Security                                          #
#####################################################################################

#####################################################################################
#                                   Paths                                           #
#####################################################################################
paths:
    /resources:
        get:
            operationId: searchForResources
            summary: The REST read request message for the searchForResources() API call.
            tags:
                - ResourceSearchManager
            description: |
                This is the search request. The criteria for the search are passed as query parameters and the set of identified resources are returned in the payload for the response message.
            parameters:
                - name: limit
                  in: query
                  description: |
                      This is used as part of the data pagination mechanism to control the number of records returned in any one response message. The 'limit' defines the download segmentation value i.e. the maximum number of records to be contained in the response. The form of implementation is described in the corresponding binding document(s).
                  required: false
                  type: integer
                  format: int32
                  allowEmptyValue: false
                  default: 100
                  minimum: 1
                - name: offset
                  in: query
                  description: |
                      This is used as part of the data pagination mechanism to control the download rate of data. The 'offset' is the number of the first record to be supplied in the segmented response message. The form of implementation is described in the corresponding binding document(s).
                  required: false
                  type: integer
                  format: int32
                  allowEmptyValue: false
                  default: 0
                  minimum: 0
                - name: filter
                  in: query
                  description: |
                      The filtering rules to be applied when identifying the records to be supplied in the response message. Filtering defines the search criteria to be applied at the service provider for the identification and selection of the resources to be returned. A strict vocabulary is used for the permitted search terms (see the RS REST/JSON binding document 'Keyword Searching' in Sub-section 3.1 [RS-RJ, 18]).
                  required: false
                  type: string
                  allowEmptyValue: false
                - name: sort
                  in: query
                  description: |
                      This is used as part of the sorting mechanism to be use by the service provider. The 'sort' identifies the sort criteria to be used for the records in the response message. Use with the orderBy parameter. The form of implementation is described in the corresponding binding document(s).
                  required: false
                  type: string
                  allowEmptyValue: false
                - name: orderBy
                  in: query
                  description: |
                      This is used as part of the sorting mechanism to be use by the service provider. This defines the form of ordering for response to the sorted request i.e. ascending (asc) or descending (desc). The form of implementation is described in the corresponding binding document(s).
                  required: false
                  type: string
                  enum:
                    - asc
                    - desc
                  allowEmptyValue: false
                - name: fields
                  in: query
                  description: |
                      To identify the range of fields, and only those fields, that should be supplied in the response message. The permitted vocabulary for these fields is determined by the payloads that are returned in the corresponding response messages.
                  required: false
                  type: array
                  items:
                      type: string
                  collectionFormat: csv
                  allowEmptyValue: false
            responses:
                "200" :
                    description: |
                        The response code for when the query request has been successfully completed and the set of identified resources returned. This would be accompanied by the 'codeMajor/severity' values of 'success/status'
                    schema:
                        $ref: "#/definitions/ResourceSet.Type"
                "400" :
                    description: |
                        The request has been declared as 'bad'.  This will be due to the provision of bad data in the request query parameters. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema:
                        $ref: "#/definitions/imsx_StatusInfo.Type"
                "401" :
                    description: |
                        The request was not correctly authorised i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema:
                        $ref: "#/definitions/imsx_StatusInfo.Type"
                "403" :
                    description: |
                        This is used to indicate that the server can be reached and process the request but refuses to take any further action. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema:
                        $ref: "#/definitions/imsx_StatusInfo.Type"
                "500" :
                    description: |
                        This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema:
                        $ref: "#/definitions/imsx_StatusInfo.Type"
                "default" :
                    description: |
                        This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                    schema:
                        $ref: "#/definitions/imsx_StatusInfo.Type"
                "422" :
                    description: |
                        This error condition may occur if a JSON request body contains well-formed i.e. syntactically correct, but semantically erroneous, JSON instructions. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema:
                        $ref: "#/definitions/imsx_StatusInfo.Type"
                "429" :
                    description: |
                        The server is receiving too many requests i.e. 'server_busy'. Retry at a later time. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema:
                        $ref: "#/definitions/imsx_StatusInfo.Type"

    /subjects:
        get:
            operationId: getAllSubjects
            summary: The REST read request message for the getAllSubjects() API call.
            tags:
                - SubjectsManager
            description: |
                To obtain, read, the list of subjects that are supported by a LOR.
            responses:
                "200" :
                    description: |
                        The response code for when the query request has been successfully completed and the set of subjects returned. This would be accompanied by the 'codeMajor/severity' values of 'success/status'
                    schema:
                        $ref: "#/definitions/SubjectSet.Type"
                "400" :
                    description: |
                        The request has been declared as 'bad'.  This will be due to the provision of bad data in the request query parameters. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema:
                        $ref: "#/definitions/imsx_StatusInfo.Type"
                "401" :
                    description: |
                        The request was not correctly authorised i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema:
                        $ref: "#/definitions/imsx_StatusInfo.Type"
                "403" :
                    description: |
                        This is used to indicate that the server can be reached and process the request but refuses to take any further action. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema:
                        $ref: "#/definitions/imsx_StatusInfo.Type"
                "422" :
                    description: |
                        This error condition may occur if a JSON request body contains well-formed i.e. syntactically correct, but semantically erroneous, JSON instructions. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema:
                        $ref: "#/definitions/imsx_StatusInfo.Type"
                "429" :
                    description: |
                        The server is receiving too many requests i.e. 'server_busy'. Retry at a later time. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema:
                        $ref: "#/definitions/imsx_StatusInfo.Type"
                "500" :
                    description: |
                        This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema:
                        $ref: "#/definitions/imsx_StatusInfo.Type"
                "default" :
                    description: |
                        This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                    schema:
                        $ref: "#/definitions/imsx_StatusInfo.Type"


#####################################################################################
#                               Definitions                                         #
#####################################################################################
definitions:
    CCLTILink.Type:
        description: |
            The extended set of information used to define the presence of an LTI Link resource (this is based upon the definition for including an LTI link inside an IMS Common Cartridge or IMS Thin Common Cartridge).
        type: object
        allOf:
            - $ref: "#/definitions/LTILink.Type"
            - type: object
              properties:
                cartridge_bundle:
                    $ref: "#/definitions/LTILinkResourceRef.Type"
                cartridge_icon:
                    $ref: "#/definitions/LTILinkResourceRef.Type"
                metadata:
                    $ref: "#/definitions/Metadata.Type"
              additionalProperties: false
    CSMSet.Type:
        description: |
            This is the is the container for the set of curriculum standards metadata. Each member of the set contains the curriculum standards metadata for a specific source of the GUIDs.
        type: object
        required:
            - curriculumStandardsMetadata
        properties:
            resourceLabel:
                description: This is a human readable label used to identify the type of resource, or part of resource, to which the enclosed metadata refers. Model Primitive Datatype = NormalizedString.
                type: string
            resourcePartId:
                description: This is used to contain the appropriate identifier that is used to identify the resource part. Model Primitive Datatype = NormalizedString.
                type: string
            curriculumStandardsMetadata:
                description: |
                    The curriculum standards associated from a single source of the curriculum standards definition.
                type: array
                minItems: 1
                items:
                    $ref: "#/definitions/CurriculumStandardsMetadata.Type"
        additionalProperties: false
    CurriculumStandardsMetadata.Type:
        description: |
            This is the container for the special metadata for curriculum standards for a particular domain of GUID provider.
        type: object
        required:
            - setOfGUIDs
        properties:
            providerId:
                description: This is used to denote the originator of the GUID scheme. Model Primitive Datatype = NormalizedString.
                type: string
            setOfGUIDs:
                description: |
                    The set of curriculum standards GUIDs that apply to the learning associated resource.
                type: array
                minItems: 1
                items:
                    $ref: "#/definitions/SetOfGUIDs.Type"
        additionalProperties: false
    LTILink.Type:
        description: |
            The container for all of the core information about an LTI Link.
        type: object
        required:
            - title
            - vendor
        properties:
            title:
                description: The human readable title/label for the activity being addressed by the content available through the LTI link. Model Primitive Datatype = NormalizedString.
                type: string
            description:
                description: A human readable description of the activity addressed by the content supplied via the LTI link. Model Primitive Datatype = String.
                type: string
            custom:
                $ref: "#/definitions/PropertySet.Type"
            extensions:
                $ref: "#/definitions/PlatformPropertySet.Type"
            launch_url:
                description: The URL for the LTI launch. One of either the launch_url or the secure_launch_url must be specified. It is acceptable to specify both and if both are specified, the Tool Consumer (TC) decides which to use. Typically, the TC will use a secure_launch_url when embedding the Tool in a secure page and the launch_url when embedding the tool in a non-secure page. So, it is important that the Tool Provider (TP) provides the same functionality whether the launch_url or secure_launch_url is used. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            secure_launch_url:
                description: A secure URL for the LTI launch. One of either the launch_url or the secure_launch_url must be specified. It is acceptable to specify both and if both are specified, the Tool Consumer (TC) decides which to use. Typically, the TC will use a secure_launch_url when embedding the Tool in a secure page and the launch_url when embedding the tool in a non-secure page. So, it is important that the Tool Provider (TP) provides the same functionality whether the launch_url or secure_launch_url is used. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            icon:
                description: A URL to an icon for this tool. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            secure_icon:
                description: A secure URL to an icon for this tool. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            vendor:
                $ref: "#/definitions/Vendor.Type"
        additionalProperties: false
    LTILinkResourceRef.Type:
        description: |
            The container for the link information.
        type: object
        required:
            - name
            - resourceUri
        properties:
            name:
                description: The name of the type of content supplied by the link. Model Primitive Datatype = NormalizedString.
                type: string
            resourceUri:
                description: The URI for the link. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
        additionalProperties: false
    LabelledGUID.Type:
        description: |
            The labelled curriculum standard GUID.
        type: object
        required:
            - GUID
        properties:
            label:
                description: A human readable string to provide a clue about the nature of the curriculum standard. Model Primitive Datatype = NormalizedString.
                type: string
            caseItemURI:
                description: The corresponding Competency and Academic Standards (CASE) URI. This is the URI used for alignment with the IMS CASE Service 1.0 specification [CASE, 17]. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            GUID:
                description: The GUID itself. Model Primitive Datatype = NormalizedString.
                type: string
        additionalProperties: false
    LearningObjectives.Type:
        description: |
            The container for the learning objectives which are addressed by the resource.
        type: object
        required:
            - alignmentType
        properties:
            alignmentType:
                description: |
                    A category of alignment between the learning resource and the framework node.
                type: string
                enum:
                   - assesses
                   - teaches
                   - requires
                   - textComplexity
                   - readingLevel
                   - educationalSubject
                   - educationLevel
            educationalFramework:
                description: The framework to which the resource being described is aligned. Model Primitive Datatype = NormalizedString.
                type: string
            targetDescription:
                description: The description of a node in an established educational framework. Model Primitive Datatype = NormalizedString.
                type: string
            targetName:
                description: The name of a node in an established educational framework. Model Primitive Datatype = NormalizedString.
                type: string
            targetURL:
                description: The URL of a node in an established educational framework. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            caseItemUri:
                description: Reference to a CASE CFItem for a standard or skill [CASE, 17]. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            caseItemGUID:
                description: Reference to CASE CFItem as a GUID [CASE, 17]. Model Primitive Datatype = NormalizedString.
                type: string
        additionalProperties: false
    Metadata.Type:
        description: |
            The container for all of the metadata associated with the LTI link. Currently this metadata is restricted to the set of curriculum standards annotations.
        type: object
        properties:
            curriculumStandardsMetadataSet:
                $ref: "#/definitions/CSMSet.Type"
        additionalProperties: false
    PlatformPropertySet.Type:
        description: |
            The container for the collection of properties that are available for a specific platform.
        type: object
        required:
            - platform
            - properties
        properties:
            platform:
                description: The identifier for the authoring environment. Model Primitive Datatype = NormalizedString.
                type: string
            properties:
                description: |
                    The set of extension properties for the identified platform.
                type: array
                minItems: 1
                items:
                    $ref: "#/definitions/Property.Type"
        additionalProperties: false
    Property.Type:
        description: |
            The container for the name/value pair for a specific property.
        type: object
        required:
            - name
            - value
        properties:
            name:
                description: The name of the key for the property. Model Primitive Datatype = NormalizedString.
                type: string
            value:
                description: The value for the property. Model Primitive Datatype = NormalizedString.
                type: string
        additionalProperties: false
    PropertySet.Type:
        description: |
            The container for the collection of properties that have been specified.
        type: object
        required:
            - properties
        properties:
            properties:
                description: |
                    The set of properties for the identified platform or orginal authoring platform.
                type: array
                minItems: 1
                items:
                    $ref: "#/definitions/Property.Type"
        additionalProperties: false
    Resource.Type:
        description: |
            The container for the information about a resource that is supported by a LOR.
        type: object
        required:
            - name
            - learningResourceType
            - publisher
        properties:
            name:
                description: The name/title of resource. Model Primitive Datatype = NormalizedString.
                type: string
            description:
                description: A human readable description of the contents of the resource. Model Primitive Datatype = NormalizedString.
                type: string
            subject:
                description: |
                    The subject(s) of the resource. May have multiple subjects tagged. Model Primitive Datatype = NormalizedString.
                type: array
                minItems: 0
                items:
                    type: string
            url:
                description: How to access resource over Internet e.g. HTTP, FTP, etc. A resource must have either a URL or or a LTI Link. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            ltiLink:
                $ref: "#/definitions/CCLTILink.Type"
            learningResourceType:
                description: |
                    The type of the resource. There may be multiple types.
                type: array
                minItems: 1
                items:
                    enum:
                       - Assessment/Item
                       - Assessment/Formative
                       - Assessment/Interim
                       - Assessment/Rubric
                       - Assessment/Preparation
                       - Collection/Course
                       - Collection/Unit
                       - Collection/Curriculum Guide
                       - Collection/Lesson
                       - Game
                       - Interactive/Simulation
                       - Interactive/Animation
                       - Interactive/Whiteboard
                       - Activity/Worksheet
                       - Activity/Learning
                       - Activity/Experiment
                       - Lecture
                       - Text/Book
                       - Text/Chapter
                       - Text/Document
                       - Text/Article
                       - Text/Passage
                       - Text/Textbook
                       - Text/Reference
                       - Text/Website
                       - Media/Audio
                       - Media/Images/Visuals
                       - Media/Video
                       - Other
            language:
                description: The languages used in the resource. International two digit code for language e.g. 'en' for English. Use the [RFC 3066] annotation. Model Primitive Datatype = Language.
                type: array
                minItems: 0
                items:
                    type: string
            thumbnailUrl:
                description: Link to a thumbnail representing resource. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            typicalAgeRange:
                description: Age of the typical intended user. This is described as EITHER the minimum-maximum age range (the format is '11-12', '5-7', etc. with ONLY integers permitted) OR the age as a single integer e.g. '9'. Model Primitive Datatype = NormalizedString.
                type: string
            textComplexity:
                description: |
                    A number indicating text complexity based on number of established measures.
                type: array
                minItems: 0
                items:
                    $ref: "#/definitions/TextComplexity.Type"
            learningObjectives:
                description: |
                    The set of learning objectives addressed by the resource.
                type: array
                minItems: 0
                items:
                    $ref: "#/definitions/LearningObjectives.Type"
            author:
                description: |
                    Author or creator of the resource. Model Primitive Datatype = NormalizedString.
                type: array
                minItems: 0
                items:
                    type: string
            publisher:
                description: Owner of the rights to the resource or who made it available (company or person). Model Primitive Datatype = NormalizedString.
                type: string
            useRightsURL:
                description: URL describing how resource can be licensed. Could be Creative Commons license link or link to other specific open or proprietary license. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            timeRequired:
                description: Time that the resource takes to consume. Use the [ISO 8601] format for a duration. Model Primitive Datatype = Duration.
                type: string
            technicalFormat:
                description: A valid MIME type format for the resource e.g. text, HTML, PDF, MPEG, MP3, etc. See https://www.iana.org/assignments/media-types/media-types.xhtml. Model Primitive Datatype = NormalizedString.
                type: string
            educationalAudience:
                description: |
                    For whom the resource is intended.
                type: array
                minItems: 0
                items:
                    enum:
                       - student
                       - teacher
                       - administrator
                       - parent
                       - aide
                       - proctor
                       - guardian
                       - relative
            accessibilityAPI:
                description: |
                    Which (if any) accessibility API is supported by the resource.
                type: array
                minItems: 0
                items:
                    enum:
                       - MSAA
                       - UIAutomation
                       - ARIAv1
                       - IAccessible2
                       - AndroidAccessibility
                       - ATK
                       - AT-SPI
                       - BlackberryAccessibility
                       - JavaAccessibility
                       - MacOSXAccessibility
            accessibilityInputMethods:
                description: |
                    How the resource can be controlled by the user, which includes full keyboard controllability, mouse controllability, and voice controllability.
                type: array
                minItems: 0
                items:
                    enum:
                       - fullKeyboardControl
                       - fullMouseControl
                       - fullVoiceControl
            accessibilityFeatures:
                description: These include alternatives and listed enhancements for the resource. These can be transformation features, navigation features, control features or augmentation features. Model Primitive Datatype = NormalizedString.
                type: array
                minItems: 0
                items:
                    type: string
            accessibilityHazards:
                description: |
                    The set of accessibility hazards which are encountered when using this resource.
                type: array
                minItems: 0
                items:
                    enum:
                       - flashing
                       - sound
                       - olfactoryHazard
                       - motionSimulation
            accessMode:
                description: |
                    The human sensory perceptual system or cognitive faculty through which a person may process or perceive information.
                type: array
                minItems: 0
                items:
                    enum:
                       - auditory
                       - color
                       - itemSize
                       - olfactory
                       - orientation
                       - position
                       - tactile
                       - textOnImage
                       - textual
                       - visual
            publishDate:
                description: Date the resource was published by the publisher. The 'date' using the [ISO 8601] format. Model Primitive Datatype = Date.
                type: string
                format: date
            rating:
                description: |
                    A rating of the quality of the resource determined by the Search Provider. Often derived from crowdsource ratings.
                type: string
                enum:
                   - 1
                   - 2
                   - 3
                   - 4
                   - 5
            relevance:
                description: This is a floating point value based on relevance to the specific search. Higher relevance has a higher number. Model Primitive Datatype = Float.
                type: number
                format: float
        additionalProperties: true
    ResourceSet.Type:
        description: |
            The container for the set of resources that have been supplied by the service provider. This may be empty if none of the resources fulfill the search criteria. The order of resources is not significant.
        type: object
        properties:
            resources:
                description: |
                    The actual resources supplied by the service provider. The order of resources is not significant.
                type: array
                minItems: 0
                items:
                    $ref: "#/definitions/Resource.Type"
        additionalProperties: false
    SetOfGUIDs.Type:
        description: |
            The  container for the set of GUIDs that annotate a resource for a particular geographical/socio-political/etc. region.
        type: object
        required:
            - labelledGUID
        properties:
            region:
                description: The region responsible for the definition.  Model Primitive Datatype = NormalizedString.
                type: string
            version:
                description: This is used to denote any relevant versioning information. Model Primitive Datatype = NormalizedString.
                type: string
            labelledGUID:
                description: |
                    The actual GUID plus the corresponding labelling information.
                type: array
                minItems: 1
                items:
                    $ref: "#/definitions/LabelledGUID.Type"
        additionalProperties: false
    Subject.Type:
        description: |
            This is the container for the details of a subject that is covered by the content within a LOR.
        type: object
        required:
            - identifier
            - name
            - parent
        properties:
            identifier:
                description: The unique identifier, an integer, of the subject node. For the root node the value will be 'null'.  Model Primitive Datatype = PositiveInteger.
                type: integer
                format: int32
                minimum: 1
            name:
                description: The name of the subject node, which may have any character and need not be unique with the returned taxonomy.  Model Primitive Datatype = NormalizedString.
                type: string
            parent:
                description: An integer (the identifier of that subject node) that references the single parent of this node. The returned data must be a true rooted tree, where each node returned has a single parent.  Model Primitive Datatype = PositiveInteger.
                type: integer
                format: int32
                minimum: 1
        additionalProperties: false
    SubjectSet.Type:
        description: |
            The container for the set of subjects that have been supplied by the service provider. This may be empty if none of the subjects fulfill the search criteria. The order of subjects is not significant.
        type: object
        properties:
            subjects:
                description: |
                    The actual list of subject supplied by the service provider. The order of subjects is not significant.
                type: array
                minItems: 0
                items:
                    $ref: "#/definitions/Subject.Type"
        additionalProperties: false
    TextComplexity.Type:
        description: |
            The name/pair value container for a text complexity annotation.
        type: object
        required:
            - name
            - value
        properties:
            name:
                description: |
                    The name of the complexity measure. This is taken from an enumerated vocabulary.
                type: string
                enum:
                   - Lexile
                   - Flesch-Kincaid
                   - Dale-Schall
                   - DRA
                   - Fountas-Pinnell
            value:
                description: The text complexity measure in terms of the named measuring scale. Model Primitive Datatype = NormalizedString.
                type: string
        additionalProperties: false
    Vendor.Type:
        description: |
            The container for the information about the vendor who created the resource.
        type: object
        required:
            - code
            - name
        properties:
            code:
                description: An identification code for the vendor. Model Primitive Datatype = NormalizedString.
                type: string
            name:
                description: The name of the vendor. Model Primitive Datatype = NormalizedString.
                type: string
            description:
                description: A human readable description of the vendor. Model Primitive Datatype = String.
                type: string
            url:
                description: A URL for the vendor. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            emailContact:
                description: Contact email for the vendor. Model Primitive Datatype = NormalizedString.
                type: string
        additionalProperties: false
    imsx_CodeMinor.Type:
        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_CodeMinorField.Type"
        additionalProperties: false
    imsx_CodeMinorField.Type:
        description: |
            This is the container for a single code minor status code.
        type: object
        required:
            - imsx_codeMinorFieldName
            - imsx_codeMinorFieldValue
        properties:
            imsx_codeMinorFieldName:
                description: This should contain the identity of the system that has produced the code minor status code report. Model Primitive Datatype = NormalizedString.
                type: string
            imsx_codeMinorFieldValue:
                description: |
                    The code minor status code (this is a value from the corresponding enumerated vocabulary).
                type: string
                enum:
                   - fullsuccess
                   - forbidden
                   - invalid_query_parameter
                   - unauthorisedrequest
                   - internal_server_error
                   - server_busy
                   - invalid_data
        additionalProperties: false
    imsx_StatusInfo.Type:
        description: |
            This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.
        type: object
        required:
            - imsx_codeMajor
            - imsx_severity
        properties:
            imsx_codeMajor:
                description: |
                    The code major value (from the corresponding enumerated vocabulary).
                type: string
                enum:
                   - success
                   - processing
                   - failure
                   - unsupported
            imsx_severity:
                description: |
                    The severity value (from the corresponding enumerated vocabulary).
                type: string
                enum:
                   - status
                   - warning
                   - error
            imsx_description:
                description: A human readable description supplied by the entity creating the status code information. Model Primitive Datatype = String.
                type: string
            imsx_codeMinor:
                $ref: "#/definitions/imsx_CodeMinor.Type"
        additionalProperties: false
        

toc | top

About this Document

Title: IMS LTI Resource Search Service OpenAPI Definition v1.0
Editors: Colin Smythe, IMS Global (UK)
Jill Hobson, IMS Global (USA)

Co-chairs: Adam Blum, OpenEd (USA)
Tom Ingram, Escambia County School District (USA)

Version: 1.0
Version Date: 10th September, 2018
Status: IMS Final Release
Summary: The IMS LTI Resource Search (RS) Service defines how to search digital repositories for a set of resources. The standard addresses searching learning object repositories (LORs), and other catalogs of learning resources, from learning tools using various attributes of resources and returning full metadata about the resources to the learning tools. Results include resource access specification as either URLs or LTI links. The benefit for an educator or student using the learning tool (such as a Learning Management System) is seamless ability to search resource libraries for appropriate resources and transparent launching of those resources. This document contains the OpenAPI definition for the RS service.

Revision Information: First release of this specification.
Purpose: For public adoption.
Document Location: IMS Public Website (Specifications Download): https://www.imsglobal.org/specifications.html

toc | top

List of Contributors

The following individuals contributed to the development of this document:

Ray Baranoski Safari Montage (USA)
Adam Blum Open Ed (USA)
Stacy Cohen Framingham State University (USA)
Paul DeVey Pearson (USA)
Viktor Haag Desire2learn (Canada)
Mark Hannah Knovation (USA)
Jill Hobson IMS Global (USA)
Tom Ingram Escambia County School District (USA)
Vikash Jaiswal Knovation (USA)
Joshua Marks PCG (USA)
Justin Mason University of Wisconsin Extension (USA)
Elizabeth Neuman State of Wisconsin Dept. of Public Instruction (USA)
Colin Smythe IMS Global (UK)

toc | top

Revision History

Version No. Release Date Comments
Final Release 1.0 10th September, 2018 The first formal release for the specification. This specification is made available for public adoption.

toc | top

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

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

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

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

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

IMS Global would appreciate receiving your comments and suggestions.

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

Please refer to Document Name: IMS LTI Resource Search Service OpenAPI Definition v1.0

Date: 10th September, 2018

toc | top