IMS Final Release

# LTI Core

Final Version 2.0
Date Issued: 6 January 2014
Latest version: http://www.imsglobal.org/lti

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 © 2014 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/license.html.

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

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

THIS SPECIFICATION IS BEING OFFERED WITHOUT ANY WARRANTY WHATSOEVER, AND IN PARTICULAR, ANY WARRANTY OF NONINFRINGEMENT IS EXPRESSLY DISCLAIMED. ANY USE OF THIS SPECIFICATION SHALL BE MADE ENTIRELY AT THE 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.

Join the discussion and post comments on the LTI Public Forum: http://www.imsglobal.org/community/forum/categories.cfm?catid=44

## Table of Contents

## 1. BaseUrlChoice

Defines the base URL that is used for certain kinds of resources referenced in a ToolProfile. The kinds of resources to which the base URL applies is specified by an associated BaseUrlSelector. If the BaseUrlChoice does not have an associated selector, then it applies universally to all resources referenced in the Tool Profile.

Properties of class BaseUrlChoice
default_base_url This is the base URL that should be used by default for all entities specified by the associated BaseUrlSelector. The secure_base_url attribute may override this default Base URL. | anyURI | 1
secure_base_url This is the base URL that should be used whenever security is enabled. If this base URL is not defined, then the default_base_url is used in all circumstances. | anyURI | 0..1
selector A resource that specifies the objects to which this BaseUrlChoice applies. | BaseUrlSelector | 0..1

## 2. BaseUrlSelector

This resource specifies the type of objects to which a set of base URLs apply.

Properties of class BaseUrlSelector
applies_to The class of resources selected by this BaseUrlSelector. | Class | 1..*

## 3. Capability

Direct Known Subtypes:
Variable, OutcomesCapability, MessageType

Represents a capability that may be declared by a Tool Consumer in its profile and enabled by a Tool when an integration contract is established.

Known Instances:

Simple Name | Description / URI
--- | ---
Context.org | A URI describing the organisational properties of the context from which a launch request originates (typically a CourseSection); for example, an ldap:// URI such as
    ldap://host.com:6666/cid=abc123,ou=dept,dc=plainjoe,dc=org
. If more than one format of organisational URI is specified, each should be separated with a space.`http://purl.imsglobal.org/vocab/lti/v2/variable#Context.org`
CourseOffering.academicSession | The text data that is used to describe the academic session for the course offering. In the LIS Database, this value corresponds to
    courseOfferingRecord/courseOffering/defaultCredits/textString
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseOffering.academicSession`
CourseOffering.credits | The default credits set for this Course Offering In the LIS Database, this value corresponds to
    courseOfferingRecord/courseOffering/defaultCredits/textString
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseOffering.credits`
CourseOffering.label | A human readable label for the Course Offering In the LIS Database, this value corresponds to
    courseOfferingRecord/courseOffering/label
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseOffering.label`
CourseOffering.longDescription | A long description of the Course Offering. In the LIS Database, this value corresponds to
    courseOfferingRecord/courseOffering/catalogDescription/longDescription
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseOffering.longDescription`
CourseOffering.shortDescription | A short description of the Course Offering. In the LIS Database, this value corresponds to
    courseOfferingRecord/courseOffering/catalogDescription/shortDescription
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseOffering.shortDescription`
CourseOffering.sourcedId | The LIS identifier for the Course Offering. In the LIS Database, this value corresponds to
    courseOfferingRecord/sourcedId
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseOffering.sourcedId`
CourseOffering.title | The title of the Course Offering. In the LIS Database, this value corresponds to
    courseOfferingRecord/courseOffering/title
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseOffering.title`
CourseSection.courseNumber | The course number, such as "Biology 101". In general, this number is not just a numeric value. In the LIS Database, this value corresponds to
    courseSectionRecord/courseSection/courseNumber/textString
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.courseNumber`
CourseSection.credits | The default credits set for the Course Section. In the LIS Database, this value corresponds to
    courseSectionRecord/courseSection/defaultCredits/textString
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.credits`
CourseSection.dataSource | An identifier for the original source system of the CourseSection object. In the LIS Database, this value corresponds to
    courseSectionRecord/courseSection/dataSource
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.dataSource`
CourseSection.dept | The department within which the Course Section is offered. In the LIS Database, this value corresponds to
    courseSectionRecord/courseSection/org[type/textString="Dept"]/orgName/textString
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.dept`
CourseSection.enrollControl.allowed | A boolean value that specifies whether the Tool Provider can enroll people in the Course Section. The value `false` indicates that only the source system can enroll people. In the LIS Database, this value corresponds to
    courseSectionRecord/courseSection/enrollControl/enrollAllowed
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.enrollControl.allowed`
CourseSection.enrollControll.accept | A boolean value that specifies whether the Course Section is accepting enrollments. In the LIS Database, this value corresponds to
    courseSectionRecord/courseSection/enrollControl/enrollAccept
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.enrollControll.accept`
CourseSection.label | A human readable label for the Course Section. In the LIS Database, this value corresponds to
    courseSectionRecord/courseSection/label
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.label`
CourseSection.longDescription | A long description of the Course Section. In the LIS Database, this value corresponds to
    courseSectionRecord/courseSection/catalogDescription/longDescription
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.longDescription`
CourseSection.maxNumberofStudents | The maximum number of students that can be enrolled in the Course Section. In the LIS Database, this value corresponds to
    courseSectionRecord/courseSection/maxNumberofStudents
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.maxNumberofStudents`
CourseSection.numberofStudents | The number of students who are enrolled in the Course Section. In the LIS Database, this value corresponds to
    courseSectionRecord/courseSection/numberofStudents
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.numberofStudents`
CourseSection.shortDescription | A short description of the Course Section. In the LIS Database, this value corresponds to
    courseSectionRecord/courseSection/catalogDescription/shortDescription
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.shortDescription`
CourseSection.sourceSectionId | The identifier for the source Course Section from which the target Course Section was cloned. In the LIS Database, this value corresponds to
    createCourseSectionFromCourseSectionRequest/sourcedId
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.sourceSectionId`
CourseSection.sourcedId | The LIS identifier for the Course Section In the LIS Database, this value corresponds to
    courseSection/sourcedId
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.sourcedId`
CourseSection.timeFrame.begin | The date and time when the Course Section becomes available. In the LIS Database, this value corresponds to
    courseSectionRecord/courseSection/timeFrame/begin
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.timeFrame.begin`
CourseSection.timeFrame.end | The date and time after which the Course Section is no longer available. In the LIS Database, this value corresponds to
    courseSectionRecord/courseSection/timeFrame/end
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.timeFrame.end`
CourseSection.title | The title of the Course Section. In the LIS Database, this value corresponds to
    courseSectionRecord/courseSection/title
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseSection.title`
CourseTemplate.courseNumber | The course number, such as "Biology 101". In general, this number is not just a numeric value. In the LIS Database, this value corresponds to
    courseTemplateRecord/courseTemplate/courseNumber/textString
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseTemplate.courseNumber`
CourseTemplate.credits | The default credits set for this Course Template. In the LIS Database, this value corresponds to
    courseTemplateRecord/courseTemplate/defaultCredits/textString
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseTemplate.credits`
CourseTemplate.label | A human readable label used to help identify the Course Template. In the LIS Database, this value corresponds to
    courseTemplateRecord/courseTemplate/label/textString
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseTemplate.label`
CourseTemplate.longDescription | A long description of the Course Template. In the LIS Database, this value corresponds to
    courseTemplateRecord/courseTemplate/catalogDescription/longDescription
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseTemplate.longDescription`
CourseTemplate.shortDescription | A short description of the Course Template. In the LIS Database, this value corresponds to
    courseTemplateRecord/courseTemplate/catalogDescription/shortDescription
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseTemplate.shortDescription`
CourseTemplate.sourcedId | The LIS identifier for the Course Template. In the LIS Database, this value corresponds to
    courseTemplateRecord/sourcedId
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseTemplate.sourcedId`
CourseTemplate.title | The title of the Course Template. In the LIS Database, this value corresponds to
    courseTemplateRecord/courseTemplate/title/textString
`http://purl.imsglobal.org/vocab/lti/v2/variable#CourseTemplate.title`
Group.email | An email address used for posting messages to members of the group. In the LIS Database, this value corresponds to
    groupRecord/group/email
`http://purl.imsglobal.org/vocab/lti/v2/variable#Group.email`
Group.enrollControl.accept | A boolean value that specifies whether the Group is accepting enrollments. In the LIS Database, this value corresponds to
    groupRecord/group/enrollControl/enrollAccept
`http://purl.imsglobal.org/vocab/lti/v2/variable#Group.enrollControl.accept`
Group.enrollControl.allowed | A boolean value that specifies whether the Tool Provider can enroll people in the Group. The value `false` indicates that only the source system can enroll people. In the LIS Database, this value corresponds to
    groupRecord/group/enrollControl/enrollAllowed
`http://purl.imsglobal.org/vocab/lti/v2/variable#Group.enrollControl.allowed`
Group.grouptype | A URI that uniquely identifies the type of group. This convention differs from the LIS convention of using a structured object to describe the type of a group. Ideally, the URI should resolve to JSON-LD document that describes the group type. However, any URI that uniquely identifies the group type in accordance with the rules of the grouptype scheme is acceptable. `http://purl.imsglobal.org/vocab/lti/v2/variable#Group.grouptype`
Group.longDescription | A long description of the Group. In the LIS Database, this value corresponds to
    groupRecord/group/description/longDescription
`http://purl.imsglobal.org/vocab/lti/v2/variable#Group.longDescription`
Group.parentId | An identifier for the parent group within which the target group is nested. In the LIS Database, this value corresponds to
    groupRecord/group/relationship[relation="Parent"]/sourcedId
`http://purl.imsglobal.org/vocab/lti/v2/variable#Group.parentId`
Group.shortDescription | A short description of the Group. In the LIS Database, this value corresponds to
    groupRecord/group/description/shortDescription
`http://purl.imsglobal.org/vocab/lti/v2/variable#Group.shortDescription`
Group.sourcedId | The LIS identifier for the Group. In the LIS Database, this value corresponds to
    groupRecord/sourcedId
`http://purl.imsglobal.org/vocab/lti/v2/variable#Group.sourcedId`
Group.timeFrame.begin | The date and time when access to Group resources begins. In the LIS Database, this value corresponds to
    groupRecord/group/timeframe/begin
`http://purl.imsglobal.org/vocab/lti/v2/variable#Group.timeFrame.begin`
Group.timeFrame.end | The date and time when access to Group resources ends. In the LIS Database, this value corresponds to
    groupRecord/group/timeframe/end
`http://purl.imsglobal.org/vocab/lti/v2/variable#Group.timeFrame.end`
Group.url | The web address of the Group. In the LIS Database, this value corresponds to
    groupRecord/group/url
`http://purl.imsglobal.org/vocab/lti/v2/variable#Group.url`
LineItem.dataSource | An identifier for the original source system of the LineItem record. In the LIS Database, this value corresponds to
    lineItemRecord/lineItem/dataSource
`http://purl.imsglobal.org/vocab/lti/v2/variable#LineItem.dataSource`
LineItem.resultValue.max | The maximum numeric score that a learner may earn on the assignment associated with this LineItem. In the LIS Database, this value corresponds to
    resultValueRecord/resultValue/valueRange/max
where
    resultValueRecord.sourcedId = lineItemRecord/lineItem/resultValueSourcedId
    http://purl.imsglobal.org/vocab/lti/v2/variable#LineItem.resultValue.max
LineItem.sourcedId | The LIS identifier for the LineItem In the LIS Database, this value corresponds to
    lineItemRecord/sourcedId
`http://purl.imsglobal.org/vocab/lti/v2/variable#LineItem.sourcedId`
LineItem.type | A URI that uniquely identifies the LineItem type. This convention differs from the LIS convention of using a structured object to describe LineItem types. The URI should resolve to a JSON-LD resource that describes the LineItem type. As a best practice the URI should start with a base URL that identifies the LineItemType vocabulary and end with a relative URL for a type within that vocabulary. In the LIS Database, the LineItem type is given by
    lineItemRecord/lineItem/lineItemType
`http://purl.imsglobal.org/vocab/lti/v2/variable#LineItem.type`
LineItem.type.displayName | The display name for the LineItemType. In the LIS Database, this value corresponds to
    lineItemTypeRecord/lineItemType/displayName
`http://purl.imsglobal.org/vocab/lti/v2/variable#LineItem.type.displayName`
LtiLink.custom.url | The endpoint URL for accessing link-level tool settings. `http://purl.imsglobal.org/vocab/lti/v2/variable#LtiLink.custom.url`
Membership.collectionSourcedId | The LIS identifier for the organizational unit (Course Section, Group, etc.) to which the Membership pertains. In the LIS Database, this value corresponds to
    membershipRecord/membership/collectionSourcedId
`http://purl.imsglobal.org/vocab/lti/v2/variable#Membership.collectionSourcedId`
Membership.createdTimestamp | The date and time when the membership role was created. If the Person has more than one role within the organizational unit, then this value is a comma separated list corresponding to the roles listed by the Membership.role variable. In the LIS Database, this value corresponds to
    membershipRecord/membership/member/role/dateTime
`http://purl.imsglobal.org/vocab/lti/v2/variable#Membership.createdTimestamp`
Membership.dataSource | An identifier for the original source system of the Membership record. In the LIS Database, this value corresponds to
    membershipRecord/membership/member/role/dataSource
`http://purl.imsglobal.org/vocab/lti/v2/variable#Membership.dataSource`
Membership.personSourcedId | The LIS identifier for the Person associated with the Membership. In the LIS Database, this value corresponds to
    membershipRecord/membership/member/personSourcedId
`http://purl.imsglobal.org/vocab/lti/v2/variable#Membership.personSourcedId`
Membership.role | A comma separated list of roles that the Person has within the organizational unit. In the LIS Database, this value corresponds to
    membershipRecord/membership/member/role/roleType
`http://purl.imsglobal.org/vocab/lti/v2/variable#Membership.role`
Membership.sourcedId | The LIS identifier for the Membership. In the LIS Database, this value corresponds to
    membershipRecord/sourcedId
`http://purl.imsglobal.org/vocab/lti/v2/variable#Membership.sourcedId`
Membership.status | Indicates if the membership is active or inactive. In accordance with the LIS specification, the value should be either `Active` or `Inactive`. If the Person has more than one role within the organizational unit, then this value is a comma separated list, where the values are ordered in correspondence with the roles named by the Membership.role variable. In the LIS Database, this value corresponds to
    membershipRecord/membership/member/role/status
`http://purl.imsglobal.org/vocab/lti/v2/variable#Membership.status`
Person.address.country | The country within the user's address. In the LIS Database, this value corresponds to
    personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair /[instanceName/text="Country"]/instanceValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.country`
Person.address.locality | The city, town, or other locality within the user's address. In the LIS Database, this value corresponds to
    personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair /[instanceName/text="Locality"]/instanceValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.locality`
Person.address.postcode | The postal code within the user's address. In the LIS Database, this value corresponds to
    personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair /[instanceName/text="Postcode"]/instanceValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.postcode`
Person.address.statepr | The state or province within the user's address. In the LIS Database, this value corresponds to
    personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair/[instanceName/text="Statepr"]/instanceValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.statepr`
Person.address.street1 | The first line of the user's street address. In the LIS Database, this value corresponds to
    personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair /[instanceName/text="NonFieldedStreetAddress1"]/instanceValue /text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.street1`
Person.address.street2 | The second line of the user's street address. In the LIS Database, this value corresponds to
    personRecord/person/address/[addressType/instanceValue/text="Preferred"]  addressPart /nameValuePair[instanceName/text="NonFieldedStreetAddress2"] /instanceValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.street2`
Person.address.street3 | The third line of the user's street address. In the LIS Database, this value corresponds to
    personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair /[instanceName/text="NonFieldedStreetAddress3"] /instanceValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.street3`
Person.address.street4 | The fourth line of the user's street address. In the LIS Database, this value corresponds to
    personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair /[instanceName/text="NonFieldedStreetAddress4"] /instanceValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.street4`
Person.address.timezone | The user's time zone. In the LIS Database, this value corresponds to
    personRecord/person/address/[addressType/instanceValue/text="Preferred"]addressPart /nameValuePair /[instanceName/text="Timezone"]/instanceValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.address.timezone`
Person.email.personal | The user's personal email address In the LIS Database, this value corresponds to
    person/contactinfo[contactinfoType/instanceValue/text="Email_Personal"]/contactinfoValue /text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.email.personal`
Person.email.primary | The user's primary email address. In the LIS Database, this value corresponds to
    personRecord/person/contactinfo[contactinfoType/instanceValue/text="Email_Primary"] /contactinfoValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.email.primary`
Person.name.family | The family name of the user. In the LIS Database, this value corresponds to
    personRecord/person/name/partName[instanceName/text="Family”]/instanceValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.name.family`
Person.name.full | The full name of the user. In the LIS Database, this value corresponds to
    personRecord/person/formname/[formnameType/instanceValue/text="Full"] /formattedName/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.name.full`
Person.name.given | The given name of the user. In the LIS Database, this value corresponds to
    personRecord/person/name/partName[instanceName/text="Given”]/instanceValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.name.given`
Person.name.middle | The middle name of the user. In the LIS Database, this value corresponds to
    personRecord/person/name/partName[instanceName/text="Middle”]/instanceValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.name.middle`
Person.name.prefix | The prefix for the user's name, such as Dr., Mr., Ms. etc. In the LIS Database, this value corresponds to
    personRecord/person/name/partName[instanceName/text="Prefix”]/instanceValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.name.prefix`
Person.name.suffix | The suffix for the user's name, such as Jr., II, etc. In the LIS Database, this value corresponds to
    personRecord/person/name/partName[instanceName/text="Suffix”]/instanceValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.name.suffix`
Person.phone.home | The user's home phone number In the LIS Database, this value corresponds to
    personRecord/person/contactinfo [contactinfoType/instanceValue/text="Telephone_Home"]/contactinfoValue /text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.phone.home`
Person.phone.mobile | The user's mobile phone number In the LIS Database, this value corresponds to
    personRecord/person/contactinfo[contactinfoType/instanceValue/text="Mobile"] /contactInfoValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.phone.mobile`
Person.phone.primary | The user's primary phone number In the LIS Database, this value corresponds to
    personRecord/person/contactinfo [contactinfoType/instanceValue/text="Telephone_Primary"]/contactinfoValue /text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.phone.primary`
Person.phone.work | The user's work phone number. In the LIS Database, this value corresponds to
    personRecord/person/contactinfo [contactinfoType/instanceValue/text="Telephone_Work"]/contactinfoValue /text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.phone.work`
Person.sms | The number at which the user prefers to receive SMS text messages. In the LIS Database, this value corresponds to
    personRecord/person/contactinfo[contactinfoType/instanceValue/text="SMS"]  /contactinfoValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.sms`
Person.sourcedId | The LIS identifier for the user. In the LIS Database, this value corresponds to `personRecord/sourcedId` `http://purl.imsglobal.org/vocab/lti/v2/variable#Person.sourcedId`
Person.webaddress | The user's web address. This could be a facebook address, a blog, or any other web address linked to the user. The value should be a URL. In the LIS Database, this value corresponds to
    personRecord/person/contactinfo[contactinfoType/instanceValue/text="Web-Address"] /contactinfoValue/text
`http://purl.imsglobal.org/vocab/lti/v2/variable#Person.webaddress`
ResourceLink.description | A plain text description of the link’s destination, suitable for display alongside the link. `http://purl.imsglobal.org/vocab/lti/v2/variable#ResourceLink.description`
ResourceLink.title | A plain text title for the resource. `http://purl.imsglobal.org/vocab/lti/v2/variable#ResourceLink.title`
Result.autocreate | `http://purl.imsglobal.org/vocab/lti/v2/capability#Result.autocreate`
Result.comment | A comment associated with the outcome which may be made visible to the student. `http://purl.imsglobal.org/vocab/lti/v2/variable#Result.comment`
Result.createdTimestamp | The date and time when the Result was created. In the LIS Database, this value corresponds to
`http://purl.imsglobal.org/vocab/lti/v2/variable#Result.createdTimestamp`
Result.dataSource | An identifier for the original source system of the Result record. In the LIS Database, this value corresponds to
    resultRecord/result/dataSource
`http://purl.imsglobal.org/vocab/lti/v2/variable#Result.dataSource`
Result.resultScore | The score that the learner earned on the assignment or activity to which this Result pertains. In the LIS Database, this value corresponds to
    resultRecord/result/resultScore/textString
`http://purl.imsglobal.org/vocab/lti/v2/variable#Result.resultScore`
Result.sourcedId | The LIS identifier for the Result resource. In the LIS Database, this value corresponds to
`http://purl.imsglobal.org/vocab/lti/v2/variable#Result.sourcedId`
Result.status | A URI for the status of the Result. As a best practice, the URI should resolve to a JSON-LD description of the status value or a term in a VDEX file. The vocabulary for Result status values is extensible. The set of standard values includes: http://www.imsglobal.org/lis/omsv1p0/statusofresultvocabularyv1p0#Unmoderated http://www.imsglobal.org/lis/omsv1p0/statusofresultvocabularyv1p0#Tobemoderated http://www.imsglobal.org/lis/omsv1p0/statusofresultvocabularyv1p0#Pending http://www.imsglobal.org/lis/omsv1p0/statusofresultvocabularyv1p0#Completed `http://purl.imsglobal.org/vocab/lti/v2/variable#Result.status`
Result.url | The URL of the Result resource. Client applications may issue an HTTP request to read, update or delete the resource at this URL. `http://purl.imsglobal.org/vocab/lti/v2/variable#Result.url`
ToolProxy.custom.url | The endpoint URL for accessing system-wide tool settings. `http://purl.imsglobal.org/vocab/lti/v2/variable#ToolProxy.custom.url`
ToolProxyBinding.custom.url | The endpoint URL for accessing context-level tool settings. `http://purl.imsglobal.org/vocab/lti/v2/variable#ToolProxyBinding.custom.url`
User.id | Corresponds to the user_id launch parameterfrom the `LaunchMixin` class. This is the local identifier for the user within the Tool Consumer system. `http://purl.imsglobal.org/vocab/lti/v2/variable#User.id`
User.image | The URL for an image of the user suitable for use as a profile picture or avatar. `http://purl.imsglobal.org/vocab/lti/v2/variable#User.image`
User.org | A URI describing the user's organisational properties; for example, an ldap:// URI such as
    ldap://host.com:6666/uid=user,ou=people,dc=example,dc=com
. If more than one format of organisational URI is specified, each should be separated with a space.`http://purl.imsglobal.org/vocab/lti/v2/variable#User.org`
User.username | The username that identifies the user within the Tool Consumer system. `http://purl.imsglobal.org/vocab/lti/v2/variable#User.username`

## 4. Contact

Contact information for the associated object.

Properties of class Contact
email The email of the primary contact for the associated object. | normalizedString | 1

## 5. Context

A learning context, such as a Course Section.

Properties of class Context
id | normalizedString | 1
sourcedId | normalizedString | 0..1

## 6. Endpoint

Direct Known Subtypes:
MessageHandler, IconEndpoint

This is the abstract base class for objects that have an endpoint such as icons or message handlers.

Properties of class Endpoint
path This attribute specifies the path for an endpoint such as a MessageHandler or an Icon. Typically, this path is relative to one of the base URL values defined in a BaseUrlChoice. In the case of a MessageHandler, the path may be an absolute path if the associated message type explicitly declares that an absolute path is allowed. | anyURI | 1

## 7. HasCode

Direct Known Subtypes:
ResourceType, Vendor, ProductFamily

A resource that can be identified by a `code` property. The code property may be globally unique (as in the case of a Vendor resource) or locally unqiue (as in the case of a Product Family, where the code is locally unique within the scope of the parent Vendor resource).

Properties of class HasCode
code A unique identifier for the resource. | Token.Type | 1

## 8. HttpMethod

Enumerates the HTTP methods that can be used when sending a message, as defined by IETF RFC 2616 .

Known Instances:

Simple Name | Description / URI
--- | ---
GET | `http://purl.imsglobal.org/vocab/lti/v2/lti#GET`
POST | `http://purl.imsglobal.org/vocab/lti/v2/lti#POST`

## 9. IconEndpoint

Direct Known Supertypes:
Endpoint

Defines the path for an Icon.

Properties inherited from Endpoint
path

## 10. IconInfo

Contains information about a graphical icon that may be displayed in the Tool Consumer's user interface.

Properties of class IconInfo
default_location Specifies the default path to an icon. The absolute URL is formed by appending this path to the appropriate base URL for icons. | IconEndpoint | 0..1
icon_style The style of the icon referenced by this IconInfo. | IconStyle | *
key If localization is supported then the 'key' attribute identifies a property in the resource bundle provided in response to the get-bundle-request message. The value of that property is the locale-specific path to the icon. | Name.Type | 0..1

## 11. IconStyle

A resource that specifies the style for an Icon.

The LTI standard does not define any particular Icon styles. Each vendor is free to publish its own set of icon styles. A typical style might specify dimensions of the icon or its intended usage. Each IconStyle is uniquely identified by a URI. Ideally, the URI should resolve to a resource that provides a definition of the icon style.

## 12. LocalizedName

This container stores the default display name for some object plus a key that may be used to lookup a translation for the display name from a resource bundle for a particular locale. The string value has a maximum length of 128 characters.

Properties of class LocalizedName
default_value The default value for the display name. This value is used if (1) the key attribute is undefined, (2) the localization capability is not enabled, or (3) a value for the specified key is not found in the locale-specific resource bundle. | LongName.Type | 0..1
key The key used to lookup the locale-specific value from a resource bundle. | Name.Type | 0..1

## 13. LocalizedText

This container defines a block of text. The container includes a default value for the text, plus a key that can be used to lookup a locale-specific value from a resource bundle.

Properties of class LocalizedText
default_value This is the default value for the text. This default value is used if (1) the key is not specified, (2) the localization capability is not enabled, or (3) the specified key is not found in the locale-specific resource bundle. | Text.Type | 0..1
key If localization is supported then the key identifies a property in the bundle returned by the get-bundle-request message handler. | Name.Type | 0..1

## 14. LtiLink

Direct Known Supertypes:
ToolSettingsContainer

An `LtiLink` represents a link within the Tool Consumer system pointing to a resource within the Tool Provider.

Properties of class LtiLink
resource_link_id A globally unique identifier for this LTI link. | GUID.Type | 1

Properties inherited from ToolSettingsContainer
custom, custom_url

## 15. MessageHandler

Direct Known Supertypes:
Endpoint

Defines the features of a message handler, including information about the handler's service endpoint and custom parameters that it expects.

Properties of class MessageHandler
enabled_capability A capability that is enabled for messages handled by this MessageHandler. | Capability | *
message_type The type of message that can be submitted to the Message Handler. | MessageType | 1
parameter Specifies a custom parameter that is expected by the MessageHandler. | Parameter | *

Properties inherited from Endpoint
path

## 16. MessageType

Direct Known Supertypes:
Capability

This container holds metadata about a particular type of message. It provides a friendly name (an alias) for the formal Message class name, and it specifies the allowed HTTP methods for Messages of the given type.

Properties of class MessageType
absolute_path_allowed Specifies whether the path for this message type is allowed to be specified using an absolute path. A value of "false" means that the MessageHandler must declare a relative path. | boolean | 0..1
http_method Specifies an HTTP method (POST, GET, PUT, etc.) for the type of messages represented by this MessageType. | HttpMethod | 1..*
message_class This attribute identifies the formal Class definition the type of message that can be delivered to a given MessageHandler. | Class | 1

## 17. Parameter

Defines the characteristics of a parameter expected by a MessageHandler.

Properties of class Parameter
fixed Denotes that the value of the parameter is fixed at the time of definition within the product profile. This value must be passed in each message of the associated message type. | DataValue.Type | 0..1
name The name of the parameter. | Name | 1
variable Denotes that the parameter has a variable value that is automatically substituted at run-time. The value of this attribute is the name for a variable whose value will be added to the message at run-time. | VariableName.Type | 0..1

## 18. ProductFamily

Direct Known Supertypes:
HasCode
Known Uses:

- Vendor.product

A ProductFamily represents the collection of all versions of a particular product over time. Two products that have the same product code belong to the same ProductFamily. The LTI product model has four levels:

1. `ProductFamily`: The collection of all versions of a given product.
2. `ProductInfo`: Encapsulates information about one particular version of a product.
3. `ProductInstance`: Represents one deployed instance of a particular version of a product.
4. `ProductProfile`: Defines a view of a deployed instance of a product. This view may be customized for different integration partners.

Notice that the ProductFamily sits at the top of the product hierarchy. Each product family is owned by a `Vendor`.

Properties of class ProductFamily
vendor The vendor that owns the ProductFamily. | Vendor | 1
version Encapsulates information about one version of the product. | ProductInfo | *

Properties inherited from HasCode
code

## 19. ProductInfo

Known Uses:

- ProductFamily.version

Encapsulates information about one released version of a product (Tool Consumer or Tool).

Properties of class ProductInfo
description This is a description of the product suitable for display to end-users. | LocalizedText | 0..1
instance A deployed instance of a particular version of a product (Tool or Tool Consumer). | ProductInstance | *
product_family An inverse attribute that references the ProductFamily within which this ProductInfo is defined. | ProductFamily | 1
product_name A name for the product, suitable for display to end users. | LocalizedName | 1
product_version This is the version of the product. | normalizedString | 1
technical_description This is a human readable description of the technical aspects of this product that might be of interest to developers who wish to integrate with this product via LTI. | LocalizedText | 0..1

## 20. ProductInstance

Known Uses:

- ProductInfo.instance

The resource encapsulates information about one deployed instance of a web-based product (Tool or Tool Consumer).

Properties of class ProductInstance
guid A globally unique identifier for the service provider. As a best practice, this value should match an Internet domain name assigned by ICANN, but any globally unique identifier is acceptable. | GUID.Type | 1
product_info This is metadata about the product described in the profile. | ProductInfo | 1
profile A resource that presents a view of this ProductInstance to one or more integration partners. | ProductProfile | *
service_owner The entity that owns the services provided by this product instance. | ServiceOwner | 0..1
service_provider This is the service provider that hosts the deployed product. | ServiceProvider | 0..1
support Contact information for support on this deployed instance of the product (Tool or ToolConsumer). | Contact | 0..1

## 21. ProductProfile

Direct Known Subtypes:
ToolProfile, ToolConsumerProfile
Known Uses:

- ProductInstance.profile

A ProductProfile presents an integration view of a deployed instance of some product (Tool or Tool Consumer). It defines the services and other features offered to an integration partner. A profile may be customized for each integration partner or shared with multiple partners.

ProductProfile is the abstract base class for all product profiles. The ToolConsumerProfile and ToolProfile are derived from this base class.

Properties of class ProductProfile
lti_version The identifier for an LTI version that the version supports. A given product (Tool or Tool Consumer) may support multiple versions, but only one version is selected for use in the integration contract. | normalizedString | 1
product_instance An inverse attribute which references the ProductInstance within which this ProductProfile is defined. | ProductInstance | 1
service_offered The descriptor for a service offered by the product (Tool or Tool Consumer). | ServiceDescriptor | *

## 22. PropertyMap

An abstract class whose properties are defined by the Tool Provider and stored in the Tool Consumer. When represented in JSON-LD, the PropertyMap object typically appears as a plain-old JSON object (though it may have a custom JSON-LD context that defines the semantics for the custom properties). It is a best practice for the values in a PropertyMap to be strings. This best practice may be revised if the development community expresses a desire to support other data types in a PropertyMap.

## 23. ResourceHandler

The set of information for a specific resource handler.

Properties of class ResourceHandler
description A description of the service provider, suitable for display to end-users. | LocalizedText | 0..1
icon_info Provides information about a graphical icon that represents the resource described by this ResourceHandler. | IconInfo | *
message Defines the features of a message handler associated with the resource described by this ResourceHandler. | MessageHandler | 1..*
resource_name The name of the resource handler suitable for display in the TC user interface. | LocalizedName | 1
resource_type Identifies the type of resource associated with this ResourceHandler. Resource types are identified by a code that is unique within a given ProductFamily. | ResourceType | 1

## 24. ResourceType

Direct Known Supertypes:
HasCode
Known Uses:

- ProductFamily

This class represents all ResourceHandlers of a given type. Two ResourceHandlers that belong to this set are considered to be different versions of the same ResourceHandler.

Properties of class ResourceType
resource_type_owner | ProductFamily | 1

Properties inherited from HasCode
code

## 25. RestService

Direct Known Supertypes:
ServiceDescriptor

A descriptor for a REST service.

Properties of class RestService
action Specifies an HTTP action that is supported at the REST endpoint. A given endpoint may support more than one action. For example, it is common practice for a collection endpoint to accept POST requests, and a different item endpoint to accept GET, PUT, and DELETE requests. | HttpMethod | 1..*
endpoint A URI template that defines the REST endpoint for resources that may be accessed via the REST service. The URI template should conform to the syntax in the proposed IETF standard [draft-gregorio-uritemplate-08]. | anyURI | 1
format The content type (also known as media type) of resources accessed via the endpoint defined by this RestService descriptor. The endpoint of a REST service may support more than one content type if content negotiation is enabled as described in the HTTP 1.1 specification. | normalizedString | 1..*

## 26. RestServiceProfile

Direct Known Supertypes:
ServiceProfile

A kind of ServiceProfile specialized for REST services.

Properties of class RestServiceProfile
action Specifies an HTTP method (POST, GET, PUT, etc.) which the integration partner intends to use. A RestServiceProfile may include more than one action. However, the set of actions declared in a RestServiceProfile must be a subset of actions declared in the RestService referenced by the `service` property. | HttpMethod | 1..*

Properties inherited from ServiceProfile
service

## 27. SecurityContract

This entity specifies all aspects of the security agreements between Tool Provider and Tool Consumer.

Notice that the security contract distinguishes between `tool_service`s and `end_user_service`s. A `tool_service` is a service that the Tool invokes when acting on its own. By contrast, a `end_user_service` is a service that the Tool invokes when acting as an agent for some end user. Consider, for example, the case where a Tool is reporting scores to the Tool Consumer via an outcomes service. When a student submits an assignment, the Tool may calculate a score and post it to the Tool Consumer. In this case the Tool is acting on its own since students generally do not have permission to enter their own scores into a grade book. Now, suppose the Tool exposes a user interface which allows instructors to change a score. In this case, when the Tool posts the modified score to the Tool Consumer grade book, it is acting as an agent for the end user. This example, illustrates that the same service may be referenced as both a `tool_service` and a `end_user_service`

Properties of class SecurityContract
end_user_service The profile for a Tool Consumer service that may be invoked by the Tool when acting as an agent for some end user. | ServiceProfile | *
shared_secret This is the shared secret used for communications between the Tool Consumer and the Tool Provider. It is expected that the Tool Consumer present an interface to the administrative user for them to activate the Tool Proxy before this secret is ever used by the Tool Consumer. The shared secret may be updated when a tool is re-registered (see the reregisterTool operation of the ToolRegistrationService). In addition, the TC and TP should provide interfaces which allow their respective administrators to change the shared secret through an out-of-band agreement. | string | 1
tool_service The profile for a Tool Consumer service that may be invoked by the Tool acting on its own (as opposed to acting as an agent for some end user). | ServiceProfile | *

## 28. ServiceDescriptor

Direct Known Subtypes:
RestService

This entity defines a profile for a service. It is a "profile" in the sense that it specifies a subset of operations that are declared by the full interface for some service. For example, a profile might list the "read" operations of a service but exclude the "write" operations. This is useful because a product (Tool or TC) might want to offer the read-only operations to a partner, but it might not want to expose write operations. (On the other hand, it is perfectly legitimate for a profile to list all of the operations that are declared in the service interface if desired.) ServiceProfiles are used for four different purposes: (1) they allow a product to advertise the operations that it offers to a partner, (2) they allow a product to declare the operations that it intends to use, (3) they allow a product to advertise the security profiles that are available for service operations, and (4) they allow a product to assert the security profiles that will be used for service operations.

## 29. ServiceOwner

The entity that owns the services provided by a product instance.

Properties of class ServiceOwner
description A description of the service provider, suitable for display to end-users. | LocalizedText | 0..1
service_owner_name | LocalizedName | 1
timestamp A timestamp for the ServiceProvider record. This value is useful for determining which record is most current. | dateTime | 1

## 30. ServiceProfile

Direct Known Subtypes:
RestServiceProfile

A profile for some service that may be invoked by an integration partner. A profile specifies which methods or operations the integration partner intends to use.

Properties of class ServiceProfile
service The descriptor for the service that is being profiled. | ServiceDescriptor | 1

## 31. ServiceProvider

This resource represents the service provider that hosts a product (Tool or Tool Consumer).

Properties of class ServiceProvider
description A description of the service provider, suitable for display to end-users. | LocalizedText | 0..1
guid A globally unique identifier for the service provider. As a best practice, this value should match an Internet domain name assigned by ICANN, but any globally unique identifier is acceptable. | GUID.Type | 1
service_provider_name The name of the service provider, suitable for display to end users. | LocalizedName | 1
support Contact information for support from a service provider. | Contact | 0..1
timestamp A timestamp for the ServiceProvider record. This value is useful for determining which record is most current. | dateTime | 1

## 32. ShortLocalizedName

This container stores the default display name for some object plus a key that may be used to lookup a translation for the display name from a resource bundle for a particular locale. This class is similar to LocalizedName, except that that the string value is limited to 64 characters.

Properties of class ShortLocalizedName
default_value The default value for the display name. This value is used if (1) the key attribute is undefined, (2) the localization capability is not enabled, or (3) a value for the specified key is not found in the locale-specific resource bundle. | ShortName.Type | 0..1
key The key used to lookup the locale-specific value from a resource bundle. | Name.Type | 0..1

## 33. ToolConsumerProfile

Direct Known Supertypes:
ProductProfile
See Also:

- A REST API for ToolConsumerProfile Resources in the `application/vnd.ims.lti.v2.toolconsumerprofile+json` Format
- application/vnd.ims.lti.v2.toolconsumerprofile+json

The profile for a Tool Consumer product.

Properties of class ToolConsumerProfile
capability_offered A capability offered by the Tool Consumer to its integration partners. | Capability | *
guid A globally unique identifier for the service provider. As a best practice, this value should match an Internet domain name assigned by ICANN, but any globally unique identifier is acceptable. | GUID.Type | 1

Properties inherited from ProductProfile
lti_version, product_instance, service_offered

## 34. ToolProfile

Direct Known Supertypes:
ProductProfile

The profile for a Tool product.

Properties of class ToolProfile
base_url_choice | BaseUrlChoice | 1..*
message | MessageHandler | *
resource_handler | ResourceHandler | *

Properties inherited from ProductProfile
lti_version, product_instance, service_offered

## 35. ToolProxy

Direct Known Supertypes:
ToolSettingsContainer
See Also:

- A REST API for ToolProxy Resources in the `application/vnd.ims.lti.v2.toolproxy+json` Format
- application/vnd.ims.lti.v2.toolproxy+json
- application/vnd.ims.lti.v2.toolproxy.id+json

This entity defines the integration contract between a ToolConsumer and a Tool. It is called a "ToolProxy" because its primary purpose is to provide the ToolConsumer with all of the information needed to embed a given Tool within the ToolConsumer system.

Properties of class ToolProxy
enabled_capability A capability that is enabled for messages handled by this MessageHandler. | Capability | *
lti_version The LTI version that governs the integration between the Tool and ToolConsumer. | token | 1
security_contract The security aspect of an integration contract between two parties. | SecurityContract | 1
tool_consumer_profile The profile of the Tool Consumer that is participating in the integration governed by this ToolProxy. | ToolConsumerProfile | 1
tool_profile The profile of the Tool that is participating in the integration governed by this ToolProxy. | ToolProfile | 1
tool_proxy_guid The globally unique identifier for the ToolProxy (a.k.a. integration contract). | GUID.Type | 1

Properties inherited from ToolSettingsContainer
custom, custom_url

## 36. ToolProxyBinding

Direct Known Supertypes:
ToolSettingsContainer

A `ToolProxyBinding` associates a ToolProxy with a learning Context (such as a Course Section). This association must be established before the corresponding Tool can be used within the Context. The `ToolProxyBinding` also serves as a container that holds tool settings associated with the learning Context.

Properties of class ToolProxyBinding
context The learning Context associated with this `ToolProxyBinding`. | Context | 1

Properties inherited from ToolSettingsContainer
custom, custom_url

## 37. ToolSettingsContainer

Direct Known Subtypes:
LtiLink, ToolProxyBinding, ToolProxy
See Also:

- A REST API for Tool Settings in multiple formats
- application/vnd.ims.lti.v2.toolsettings+json

`ToolSettingsContainer` is the base class for all resources that encapsulate tool settings.

Properties of class ToolSettingsContainer
custom A collection of custom properties defined by the Tool Provider and stored in this ToolSettingsContainer. | PropertyMap | 0..1
custom_url The REST endpoint at which custom tool settings may be accessed for this ToolSettingsContainer. | anyURI | 0..1

## 38. Vendor

Direct Known Supertypes:
HasCode

A person or agency that offers products to the market. The key types of products relevant to LTI are Tools (which are described by Tool Profiles) and Tool Consumers (which are described by Tool Consumer Profiles).

Properties of class Vendor
contact Contact information for this Vendor. | Contact | 0..1
description This is a human-readable description of the Vendor. | LocalizedText | 0..1
product A group of related products offered by the Vendor. All of the products within a given product family are different versions of the same product. A vendor may have multiple product families. For example, the same vendor might offer a discussion forum tool and also a white board tool. Each of these tools corresponds to a different product family. | ProductFamily | *
timestamp A timestamp for the Vendor record. This value is useful for determining which record is most current. | dateTime | 1
vendor_name Defines a human readable name for the Vendor. The name should be suitable for display in management screens within the Tool Provider system. | LocalizedName | 1
website This is the URL of the vendor. | anyURI | 0..1

Properties inherited from HasCode
code

## About this Document

Title: | LTI Core
Co-chairs: | Greg McFall (Pearson), Lance Neumann (Blackboard)
Editor: | Stephen Vickers (IMS Global)
Version: | 2.0
Version Date: | 6 January 2014
Release: | Final Release
Status: | IMS Final Release
Purpose: | This document is made available for review and comment by the public community at large.
Document Location: | Join the discussion and post comments on the LTI Public Forum: http://www.imsglobal.org/community/forum/categories.cfm?catid=44

### List of Contributors

The following list of individuals contributed to the authoring of this document:

Craig Dunk | Desire2learn | Colin Smythe | IMS Global
Greg McFall | Pearson | Matt Stoelting | Cengage
Mark McKell | IMS Global | John Tibbetts | VitalSource
Lance Neumann | Blackboard | Stephen Vickers | IMS Global
Charles Severance | IMS Global |  |

IMS Global Learning Consortium, Inc. (“IMS Global”) is publishing the information contained in this (“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 Global Learning Tools Interoperability Final v2.0
Revision: 6 January 2014