Brightspace/D2L APIs for Courses and Enrollments
Part 1: Create a Role with Permissions
We recommend you create a role specifically for this integration. This will allow you to control the permissions available to VitalSource without affecting other users.
- Click on the gear icon to view the Admin Tools.
 - Under the Security Tab, select Roles & Permissions.
 - Click Create/Copy.
 - You can copy an existing role if you like or start fresh. Either way, make sure your role is configured as noted in the next steps.
 
- 
- General
- Name: VitalSource
 - Cascading Role: Check this box
 - Description: Can add if needed
 - Role Alias: Can add if needed
 
 - You do not need to select anything in Tool Behavior Options or Classlist Display Options
 - Course Access Options:
- Access Inactive Courses: Check the box
 - Access Past Courses: Check this box
 - Access Future Courses: Check this box
 - Access All Course Sections
 - Access All Course Groups
 
 
 - General
 
- Click Save.
 - On the Edit Role Interactions page, check all boxes for your Administrator role.
 - Click Save and you have created the role.
 - On the Role List page, click the down arrow next to the VitalSource role you just created and select Edit Permissions.
 - In the Filter by Tool dropdown menu, select Classlist and click Apply Filter. Check the following boxes and click Save.
- a. Has Access to the Classlist: All boxes
 - b. See Classlist Report: All boxes
 - c. View Group Enrollments: All boxes
 
 - In the Filter by Tool dropdown menu, select Content and click Apply Filter. Check the following boxes and click Save. *omit if your campus does not wish to use our LTI link placement service
- a. View Course Content: All boxes
 - b. Manage Content: All boxes
 - c. Create and Edit Modules and Topics: All boxes
 
 - In the Filter by Tool dropdown menu, select Course Management Console and click Apply Filter. Check the following boxes and click Save.
- a. See Course Info: Course Offering, Group, Semester, Section, Department, Program, School Type, Campus
 - b. See Tool Management: Course Offering
 - c. Set Tool Status: Course Offering
 
 - In the Filter by Tool dropdown menu, select External Learning Tools and click Apply Filter. Check the following boxes and click Save.  *omit if your campus does not wish to use our LTI link placement service
- a. Manage External Learning Tools Configuration: Course Template, Course Offering, Semester, Section, Department, Program
 - b. Launch External Learning Tool Links: Course Offering
 - c. Manage and Delete External Learning Tool Links: Course Template, Course Offering, Semester, Section, Department, Program
 - d. Manage External Learning Tool Providers: Course Template, Course Offering, Semester, Section, Department, Program
 - e. Create Quicklinks from available External Learning Tools links: All boxes
 - f. Create External Learning Tool Links from available External Learning Tool Providers: All boxes
 - g. Manage LTI Advantage Tool Registrations: Organization
 - h. Manage LTI Advantage Tool Deployments: Organization
 - i. Delete External Learning Tool Links: All boxes
 
 - In the Filter by Tool dropdown menu, select My Org Units and click Apply Filter. Check the following boxes and click Save.
- a. See My Org Units: Organization, Course Template, Course Offering, Group, Semester, Section, Department, Program
 - b. Manage My Org Units tool: Course Offering
 
 - In the Filter by Tool dropdown menu, select Org Unit Editor and click Apply Filter. Check the following boxes and click Save.
- a. View Org Unit Editor: Organization
 
 - In the Filter by Tool dropdown menu, select Tool Management and click Apply Filter. Check the following boxes and click Save.
- a. See Org Tool Management: Organization
 
 - In the Filter by Tool dropdown menu, select User Information Privacy and click Apply Filter. Check the following boxes and click Save.
- a. See First Names: All boxes
 - b. See Last Names: All boxes
 - c. See Usernames: All boxes
 - d. See Org Defined IDs: All boxes
 - e. See Email Addresses: All boxes
 
 - In the Filter by Tool dropdown menu, select Users and click Apply Filter. Check the following boxes and click Save.
- a. View the Users' Email Address: All boxes
 - b. View Users' Org Defined IDs: All boxes
 - c. View User Enrollments: All boxes
 - d. Search for 'Instructor': All boxes
 - e. Search for 'Student': All boxes
 
 
Part 2: Create a System User
- Navigate to the Settings Menu (gear icon) and select Users.
 - Click New User and enter the following:
- First Name: VitalSource
 - Last Name: Integration
 - Username: vst.integration
 - Role: Select the VitalSource role you created in Part 1
 - Password: Check the Manually set password box and enter a password that you will remember. You will need this later.
 
 - Click Save.
 
Part 3: Register an App
- Navigate to the Settings Menu (gear icon) and select Manage Extensibility
 - Click Register an App and enter the following:
 - Application Name: VitalSource
 - Trusted URL: https://bc.vitalsource.com/oauth2callback
 - Enable this application: Check this box
 - I accept the Non-Commercial Developer Agreement: Check this box
 - Click Register Application
 - Copy the Application ID & Application Key and send them to the VitalSource team along with the URL for your Brightspace site.
 
Part 4: Authenticate
- The VitalSource team will send you an authentication link after receiving the application key and ID from you.
 - Before clicking the link, go to your Brightspace site and make sure you are logged out of your own account.
 - Click the link and enter the username and password for the user you created in Part 2 above.
 - You should receive a Success! message meaning that you have authenticated the rostering application. Send a confirmation back to the VitalSource team.
 - Once VitalSource has confirmed that the setup was successful, please add a VitalSource link to a course in your upcoming term and click on this link.
- This will initiate the API sync and allow us to begin pulling course and roster information.
 
 
For Each New Term
Each term sync is initiated with a click on the VitalSource link within a course associated with the upcoming term. To pull course and roster information for each new term, be sure to click on the VitalSource link in a course in the upcoming term to initiate the new term sync.
Endpoints
Here is a comprehensive list of the D2L Valence APIs used by the VitalSource app.
- GET /d2l/api/lp/1.2/courses/:course_id
 - GET /d2l/api/lp/1.2/orgstructure/:semester_id/children/
 - GET /d2l/api/lp/1.2/enrollments/orgunits/:course_id/users/
 - GET /d2l/api/lp/1.2/organization/info
 - GET /d2l/api/lp/1.2/orgstructure/:semester_id
 - GET /d2l/api/lp/1.2/orgstructure/:org_id/children
 - GET /d2l/api/le/1.40/:course_id/content/root/
 - POST /d2l/api/le/1.40/:course_id/content/root/
 - GET /d2l/api/le/1.40/:course_id/content/modules/:module_id/structure/
 - POST /d2l/api/le/1.40/:course_id/content/modules/:module_id/structure/
 - POST /d2l/api/le/1.40/lti/link/:course_id
 - POST /d2l/api/le/1.40/lti/quicklink/:course_id/:lti_link_id
 
Data Storage & Usage
Here is a description of the Brightspace data the VitalSource app receives and how that data is stored & used.
| 
 Field  | 
 Description  | 
 Storage & Usage  | 
| 
 (course) identifier  | 
 Unique course identifier  | 
 stored & used for identifying unique courses, communication of student opt-out decisions to publisher courseware providers when applicable  | 
| 
 (course) name  | 
 Course title  | 
 stored & used for display in VitalSource Launch & Analytics and matching LMS/VLE course data to SIS course data for Inclusive Access programmes  | 
| 
 (course) code  | 
 Course code/label  | 
 stored & used for display in VitalSource Launch & Analytics and matching LMS/VLE course data to SIS course data for Inclusive Access programmes  | 
| 
 (course) StartDate  | 
 Course start date  | 
 stored & used for determining when courses should be considered active in application displays and when to issue add/drop content access to students  | 
| 
 (course) EndDate  | 
 Course end date  | 
 stored & used for determining when a course ends  | 
| 
 (semester) identifier  | 
 Unique semester identifier  | 
 stored & used to group courses together that belong to the same semester  | 
| 
 (semester) name  | 
 Semester title  | 
 stored & used to group courses together that belong to the same semester  | 
| 
 (semester) code  | 
 Semester abbreviation  | 
 not stored or used  | 
| 
 (department) identifier  | 
 Unique department identifier  | 
 not stored or used  | 
| 
 (department) name  | 
 Department name  | 
 not stored or used  | 
| 
 (department) code  | 
 Department abbreviation  | 
 not stored or used  | 
| 
 (user) identifier  | 
 Unique user identifier  | 
 not stored or used  | 
| 
 (user) displayName  | 
 User full name  | 
 stored & used for personalised display  | 
| 
 (user) emailAddress  | 
 User email address  | 
 stored & used for matching LMS/VLE student accounts to SIS student enrolment for Inclusive Access programmes  | 
| 
 (user) orgDefinedId  | 
 Unique user identifier  | 
 stored & used for matching LMS/VLE student accounts to SIS student enrolment for Inclusive Access programmes  | 
| 
 (user) profileBadgeUrl  | 
 D2L profile badge url  | 
 not stored or used  | 
| 
 (user) profileIdentifier  | 
 D2L profile identifier  | 
 not stored or used  | 
| 
 (user) role  | 
 A user's role within an org unit  | 
 stored & used to determine the appropriate user experience and access type a user should be granted  | 
| 
 (organization) identifier  | 
 Unique D2L organisation identifier  | 
 not stored, used to execute other D2L Valence APIs  | 
