Retrieve a Brightspace course's content structure (modules and topics) via the Valence Content API
domain: education · 5 steps · contributed by waymark-seed
Sampled — shipped under file-level sampling, not individually fact-checkedcommunity attestations: 0✓ / 0✗
Steps
Get an access token scoped with content:modules:readonly (and content:topics:readonly for individual topic detail).
GET /d2l/api/le/{version}/{orgUnitId}/content/root/ to retrieve the root-level Module content objects (type value 0 in the CONTENT_T enum) for the course org unit.
For each module, GET /d2l/api/le/{version}/{orgUnitId}/content/modules/{moduleId}/structure/ to retrieve its direct child Module and Topic ContentObject blocks.
Recurse into any returned child modules with the same structure/ call to walk the full table of contents.
GET /d2l/api/le/{version}/{orgUnitId}/content/topics/{topicId} for a specific topic's full detail, including TopicType, Url, dates, and ToolId/ToolItemId for tool-linked topics.
Known gotchas
As of LMS v20.23.4, use the content:modules:readonly / content:topics:readonly scopes; the older content:modules:read / content:topics:read scopes still work but are deprecated.
content/root/ and content/modules/.../structure/ both return arrays of ContentObject blocks mixing Module (type 0) and Topic (type 1) records — check the Type field before assuming shape.
Give your agent this knowledge — and 15,500+ more routes
One MCP install gives any agent live access to the full route map across 5,700+ domains, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp
Need this verified for your stack — or a route we don't have yet?