Best Of
Has anyone used an API to manage Special Access?
We are looking for a way to bulk edit/update Special Access for Assignments so that admins do not have to manually add these to every individual assignment.
We are looking for a way to automate special access for our students with reasonable adjustments using API. If you've experimented with this before we'd be super keen to chat!
We use SITS by Tribal.
Re: How to Determine if Discussion has Feedback from Instructor via API
@Joshua.V.999
I believe I am tagging the correct individual (we met at D2L Fusion 2026 in Phoenix in the Builders Lab), but I think I may have found my answer.
Hi @Stephen.R.50 and @Matt.W.287 — thank you both for looking into this. I wanted to circle back and share that I did find a working approach, in case it helps anyone else who lands here.
The key insight is that discussion feedback isn't exposed through the Discussions API — it surfaces through the Grades API, provided the topic is associated with a grade item. The "Overall Feedback" an instructor enters in Quick Eval or the discussion grading interface is written to the grade value's Comments field, not to anything under /discussions/.
Here's the chain I ended up with (LE v1.95, LP v1.58):
1. Pull grade objects and find the discussion-linked ones
GET /d2l/api/le/1.95/{orgUnitId}/grades/
Each grade object may carry an AssociatedTool property. For discussions, AssociatedTool.ToolId === 3000, and AssociatedTool.ToolItemId is the discussion TopicId. That gives you a topic → grade-item map:
if (tool && tool.ToolId === 3000 && tool.ToolItemId) {
discussionGradeMap[tool.ToolItemId] = gradeObject.Id;
}
(For reference, ToolId === 51000 is Quizzes, and assignments come through the Dropbox API — same pattern works for those.)
2. Enumerate topics so you have names/IDs to join against
GET /d2l/api/le/1.95/{orgUnitId}/discussions/forums/
GET /d2l/api/le/1.95/{orgUnitId}/discussions/forums/{forumId}/topics/
3. Pull grade values for each discussion-linked grade item
GET /d2l/api/le/1.95/{orgUnitId}/grades/{gradeObjectId}/values/?pageSize=200
4. Read feedback off the returned GradeValue
This was the piece that took me a few tries. A student has instructor feedback when GradeValue.Comments.Html or GradeValue.Comments.Text is non-empty:
var hasFeedback = v.GradeValue && v.GradeValue.Comments && ((v.GradeValue.Comments.Html && v.GradeValue.Comments.Html.trim().length > 0) || (v.GradeValue.Comments.Text && v.GradeValue.Comments.Text.trim().length > 0));
Worth noting: I initially checked Comments.Content (the RichText shape documented elsewhere) and got zero hits across courses I knew had feedback. Dumping the raw GradeValue JSON for a graded student showed the payload uses Html and Text. If you're getting empty results, that's the first thing I'd check.
The same object also answers "who left it and when":
GradeValue.LastModified→ feedback timestampGradeValue.LastModifiedBy→ the instructor's user ID (resolvable to a name via the classlist/enrollments API)
Taking the max LastModified across students with non-empty comments gives you a per-topic "last feedback given" date, which is what my dashboard surfaces.
I verified this against a course where an instructor had graded a discussion via Quick Eval — all six students who posted came back with both a grade and populated Comments.Html.
The important caveat — where your answer still holds
This only works for discussion topics associated with a grade item. For a topic with no linked grade item, there are no grade values to inspect, and I found no reliable API path to determine whether an instructor left feedback. The ScoreOutOf/ScoredCount fields on the topic object only tell you a score was entered, not that written feedback exists. So for ungraded discussions, "not available via API" appears to still be the correct answer.
It's also specifically the grading feedback that's detectable — an instructor replying inline within the thread as a post is a different thing and isn't captured here.
Hope this saves someone else some time.
Re: Accessing User Courses via API
Hi Daniel,
The scopes look good. Ensure the user making the API call has the permission required to view the target user’s enrollments and role. Check:
- Admin Tools → Roles and Permissions → Users → View User Enrollments
- Admin Tools → Roles and Permissions → Users → Search for {roleName}
See permisison details noted at the top of the community resource
Hope that helps!
Quizzes not showing in Content until available date even though they aren't hidden
On the Quizzes page, future quizzes are listed for the students and they can click on them and see the description. However, when adding them into Content using Add Existing, the quiz does not show for students until the 'Available on' date. How can we enable future quizzes to be shown in Content for the students?
Re: Bulk unenroll learners from specific Course Offering
Hi Tim,
Yes, you could create an Intelligent Agent in the course offering to run at a scheduled time to perform an unenroll of the users in the course.
See step 15 in the following resource
Hope that helps!
Re: Manager Dashboard
Hello @Keerthana.R.9219, thanks for your question.
Manager Dashboard works in cooperation with the User Attributes tool to assign a manger to individual users.
If you search for User Attributes from the admin menu and select the tab Attribute Definitions, you'll see the definitions that would have been set up during implementation of the tool, one of which could be named manager or supervisor.
Switch over to the Bulk Attribute Upload tab. On this page you'll see a Download template link, which will export a CSV file that includes the Attributes you would have seen in the Attribute Definitions tab.
To assign a manager, you'll insert the username for user being assigned, as well as the username for their manager within the manager/supervisor/etc field.
Make sure that you remove the second row in the file which indicates which fields are required and optional or else the file will return an error.
Once re-uploaded, the user who is now managing other users will be able to select the Manager Dashboard navbar link to see those now assigned users. Any other users who have permission to see Manager Dashboard but don't have anyone assigned to them will continue to see the 'there are no users who report to you' message.
Please also have a look at our documentation for Manager Dashboard. Of interest will be the sub-pages Importing Attributes/Understanding User Attributes:
I know this is a lot of information but hoping that it helps! If you have any questions just let us know and I'll do my best to assist.
~Stephen
Re: Brightspace Data Sets Updates
Keeping on Top of Brightspace Data Sets updates now has upcoming changes for August through October 2026!
Re: Community Feedback🗨️
Hi @Jane.M.801,
Thanks so much for sharing this feedback with the Brightspace Community Team.
We are actively working on this and will share an update with you as soon as we can.
Re: Permissions
Hello @Keerthana.R.9219, thanks for your question, and welcome to the Brightspace Community!
Unfortunately there's no permission combination where you can enroll an admin users into a specific Department and only give them access to create courses under that Department.
It could be possible to use the Create Course Widget, however The use-case I've normally recommended it for is sandboxes or master courses. If you wanted to at least explore that, there's more information available here:
If you have any questions please just let us know!
~Stephen
Re: Late/missed submissions to assignments & discussions
Hello @Ameeta.J.5440 ,
Thank you for sharing your use case, yes as per the learner engagement dashboard, we can see discussion posts/threads for the learner; it doesn't show the count for late/missed posts.
Looking at your use case, I would advise you to leverage the following datasets. This involves combining datasets such as Assignment Summary, Assignment Submissions, Discussion Topics, Discussion Posts, Content User Progress, and Grade Results to identify late/missed work, engagement, and performance metrics.
Late/Missed Assignments
Assignment Summary: containsDueDate,DropboxId,OrgUnitId(the assignment definition with its due date)Assignment Submissions— containsLastSubmissionDate,DropboxId,OrgUnitId,SubmitterId- Logic: Compare
LastSubmissionDateagainstDueDatefrom the Assignment Summary. IfLastSubmissionDate > DueDate→ late. If no submission record exists for an enrolled learner → missed.
Late/Missed Discussion Posts
Discussion Topics— Includes aDueDatecolumn (added in BDS v10.8 / December 2025 release) Data Hub Version 10.x DetailsDiscussion Posts— containsDatePosted,TopicId,OrgUnitId- Logic: Compare
DatePostedagainstDueDatefrom Discussion Topics. IfDatePosted > DueDate→ late. If no post exists for an enrolled learner → missed.
Average Time in Content
Content User Progress— contains time-based fields per learner per content item per course
Average Grade
Grade Results— containsPointsNumerator,PointsDenominatorper learner per grade itemFinal GradesADS — a simpler pre-joined option for final grade values across courses
Course Identification
Organizational Units— join onOrgUnitIdto get course names, codes, and semester info
Do let us know if this finds you useful.
Kind Regards,
Tejas Masavkar





