openedx / openedx/openedx-platform
[API] Course Management
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 8.2k
- Forks
- 4.4k
- Avg merge
- 6d 18h
- Merged PRs (30d)
- 42
Description
Functional Area: Course Management
Endpoints under this functional area. Note: this issue merges two blocks that both use the "Course Management" functional-area label in the source spec — the contentstore/v0 settings/assets/tabs/transcripts group, and the contentstore/v1 rerun/settings/team/waffle-flags/group-configurations group.
| Module | API Version | Resource / Endpoint | HTTP Method | Description |
|---|---|---|---|---|
| Advanced Settings | v0 | /contentstore/v0/advanced_settings/{course_id} |
GET | Retrieves all advanced settings for a specific course, including display names, help text, current values, and deprecation status. Supports optional query parameters filter_fields (comma-separated list of fields to filter) and fetch_all (boolean to fetch all settings or only enabled ones). Returns a dictionary where each key is a setting name and the value contains display_name, help, value, deprecated, and other metadata. Handles authentication and authorization; returns 401 if unauthenticated, 403 if access denied, or 404 if course does not exist. |
| Advanced Settings | v0 | /contentstore/v0/advanced_settings/{course_id} |
PATCH | Updates one or more advanced settings for a specific course. Accepts a JSON object where each key is a setting name and the value field is updated; all other fields in the payload are ignored. Multiple settings can be updated in a single request. Returns the updated course settings in the same format as the GET endpoint. Handles authentication and authorization; returns 401 if unauthenticated, 403 if access denied, or 404 if course does not exist. |
| File Assets | v0 | /contentstore/v0/file_assets/{course_id} |
GET | Retrieves a list of all file assets associated with a specific course. Each asset object includes file (URI), title, and locked status. Handles authentication and authorization; returns 401 if unauthenticated, 403 if access denied, or 404 if course does not exist. Supports integration for AI or external tools that need to list course assets for analysis, auditing, or automated processing. |
| File Assets | v0 | /contentstore/v0/file_assets/{course_id} |
POST | Creates a new file asset for a specific course. Accepts a JSON body with locked status; the response returns the created asset with file URI, title, and locked status. Useful for programmatically adding assets to courses. |
| File Assets | v0 | /contentstore/v0/file_assets/{course_id}/{asset_key_string} |
PUT | Updates an existing file asset completely for a given course and asset key. Accepts a JSON body (e.g., locked) and returns the full updated asset object. |
| File Assets | v0 | /contentstore/v0/file_assets/{course_id}/{asset_key_string} |
PATCH | Partially updates an existing file asset for a given course and asset key. Only the fields provided in the body (e.g., locked) are updated; other fields remain unchanged. Returns the updated asset. |
| File Assets | v0 | /contentstore/v0/file_assets/{course_id}/{asset_key_string} |
DELETE | Deletes a specific file asset from a course based on asset_key_string. Returns HTTP 204 on success. |
| Heartbeat | v0 | /contentstore/v0/heartbeat |
GET | Returns the current status of the Authoring API. Response contains authoring_api_enabled boolean. Useful for monitoring service availability. |
| Link Checking | v0 | /contentstore/v0/link_check/{course_id} |
POST | Queues a Celery task to scan a course for broken links. Returns LinkCheckStatus: "Pending". Handles authentication; 401 if unauthenticated, 403 if access denied, 404 if course not found. |
| Link Checking | v0 | /contentstore/v0/link_check_status/{course_id} |
GET | Retrieves the current status of a link check task for a course. Returns LinkCheckStatus (Uninitiated, Pending, In-Progress, Succeeded, Failed, Canceled, Retrying), LinkCheckCreatedAt, and optionally detailed output including sections, units, blocks, and previous run links. Useful for AI/external systems to monitor progress and gather detailed link integrity information. |
| Rerun Link Update | v0 | /contentstore/v0/rerun_link_update/{course_id} |
POST | Queues a Celery task to update course links to the latest course rerun. Accepts action (all to update all links or single for specific links) and optional data array with URLs, types, and block IDs. Returns status: "pending". Handles 400 for invalid payloads, 401/403/404 for auth/course errors. |
| Rerun Link Update | v0 | /contentstore/v0/rerun_link_update_status/{course_id} |
GET | Retrieves the status of a course rerun link update task. Returns status (pending, in_progress, completed, failed, uninitiated) and optionally results for completed tasks, including updated URLs and success flags. |
| Course Tabs | v0 | /contentstore/v0/tabs/{course_id} |
GET | Retrieves all tabs for a course, including hidden tabs. Each tab object includes tab_id, title, type, name, visibility flags (is_hidden, is_hideable, course_staff_only), movability, and custom settings. Useful for AI/external tools analyzing course structure. |
| Course Tabs | v0 | /contentstore/v0/tabs/{course_id}/reorder |
POST | Reorders tabs in a course. Accepts an array of objects with tab_locator identifying each tab's Usage Key. Returns HTTP 204 on success. Handles auth and course access errors (401/403/404). |
| Course Tabs | v0 | /contentstore/v0/tabs/{course_id}/settings |
POST | Changes the visibility of a course tab. Accepts is_hidden boolean in the body and identifies the tab either by tab_id or tab_location (Usage Key). Returns HTTP 204 on success. Useful for programmatically hiding or showing tabs for students or staff. |
| Video Transcripts | v0 | /contentstore/v0/video_transcripts/{course_id} |
GET | Retrieves all video transcripts for a course. Each transcript includes file URI, edx_video_id, language_code, and optional new_language_code. Useful for AI tools analyzing content accessibility or generating localized versions. |
| Video Transcripts | v0 | /contentstore/v0/video_transcripts/{course_id} |
POST | Uploads a new transcript for a course video. Accepts file (formData), edx_video_id, optional language_code, and optional new_language_code. Returns the uploaded transcript object with URI and metadata. |
| Video Transcripts | v0 | /contentstore/v0/video_transcripts/{course_id} |
DELETE | Deletes all video transcripts for a course. Returns HTTP 204 on success. |
| Video Images | v0 | /contentstore/v0/videos/images/{course_id}/{edx_video_id} |
POST | Uploads an image for a specific course video. Accepts file (formData) and returns the uploaded file URI. |
| Course Rerun | v1 | /contentstore/v1/course_rerun/{course_id} |
GET | Retrieves detailed information about a specific course rerun. Returns keys including allow_unicode_course_id, course_creator_status, number, display_name, org, and run. Requires course_id as path parameter. Handles 401, 403, 404 errors for authentication, permissions, or non-existent courses. Useful for AI tools to understand course versioning and plan content updates. |
| Course Settings | v1 | /contentstore/v1/course_settings/{course_id} |
GET | Retrieves all configurable settings for a course, including display name, credit eligibility, language options, marketing settings, LMS links, possible prerequisites, sidebar HTML, upgrade deadlines, and flags for entrance exams and extended details. Supports complex nested structures such as possible_pre_requisite_courses. Requires course_id path param. Returns 401/403/404 as per auth and access. Essential for AI systems that analyze course attributes, adapt content, or recommend courses based on eligibility and metadata. |
| Course Team | v1 | /contentstore/v1/course_team/{course_id} |
GET | Returns the list of CMS users assigned as editors or instructors for a specific course. Includes flags show_transfer_ownership_hint and allow_actions. Each user object contains id, username, email, and role. Requires course_id. Returns 401/403/404 for auth or access issues. Important for AI tools coordinating workflow automation for course management, notifications, or instructor assignments. |
| Waffle Flags | v1 | /contentstore/v1/course_waffle_flags |
GET | Retrieves the list of waffle feature flags for courses. No parameters required. Returns JSON with flag configurations to control experimental or feature-specific behavior for a course. Can be used by AI systems to adapt workflows based on active flags, e.g., enabling/disabling certain features dynamically. |
| Group Configurations | v1 | /contentstore/v1/group_configurations/{course_id} |
GET | Retrieves course group configuration data including all_group_configurations and experiment_group_configurations. Each group includes id, name, usage, version, and description. Flags include should_show_enrollment_track and should_show_experiment_groups. Supports path param course_id. Handles 401/403/404 errors. Useful for AI or external systems managing cohort assignments, experiment tracking, and monitoring user segmentation. |
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
The issue lists Course Management endpoints under contentstore/v0 and contentstore/v1, but names no implementation files, tests, or specific change. Start by locating the existing contentstore API entry points and compare them with the listed routes and responses. The issue needs a defined scope and completion criteria before a newcomer can determine that the work is done.
Written by the indexing model from the issue text.
Assessment
- Domain
- api, backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100