Repository navigation
[DEPR]: Contentstore and enrollment API versions superseded by FC-0118 #39128
Description
RFC Start Date
N/A -- Already Accepted
Target Plan Accepted Date
N/A -- Already Accepted
Target Transition Unblocked Date
Immediately -- Transition Already Unblocked
Earliest Breaking Changes Unblocked Date
One named release after the release this deprecation ships in
Rationale
As part of FC-0118 (API standardization), a set of Studio contentstore
endpoints and the LMS enrollment API were re-issued at new versions rather than
changed in place. The standardization ADRs mandate changes that are breaking for
existing consumers:
- ADR 0029 replaces the legacy
{"developer_message": ..., "error_code": ...}
error shape with an RFC 7807 envelope (type,title,status,detail,
instance). Any client parsing error responses would break. - ADR 0028 moves from
APIViewtoViewSet+DefaultRouter, changing URL
patterns (trailing slashes, router-managed routing). - ADR 0026 standardizes authentication and removes the deprecated
BearerAuthentication, so Bearer-only consumers lose access. - ADR 0032 standardizes pagination, changing the response envelope on list
endpoints.
Issuing new versions let existing consumers migrate on their own timeline
instead of absorbing a silent breaking change. That migration window is what
this ticket closes: the old versions are now redundant, and keeping both means
every future change to these endpoints has to be made twice.
Description
All replacements are merged and available today via
#38755.
| Deprecated endpoint | Replacement | Standardization issue |
|---|---|---|
GET/POST /api/contentstore/v0/xblock/{course_id} and /{course_id}/{usage_key} |
GET/POST/PATCH/DELETE /api/contentstore/v1/xblock/{usage_key}/ |
#38368 |
/api/enrollment/v1/ — enrollment, enrollments, course/{course_id}, unenroll/, roles/, enrollment_allowed/ |
/api/enrollment/v2/ |
#38369 |
GET/PUT /api/contentstore/v1/course_details/{course_id} |
GET/PUT /api/contentstore/v3/course_details/{course_key}/ |
#38370 |
GET /api/contentstore/v1/home |
GET /api/contentstore/v3/home/ |
#38371 |
GET /api/contentstore/v2/home/courses |
GET /api/contentstore/v4/home/ |
#38372 |
POST /api/contentstore/v0/grading/{course_id} |
PATCH /api/contentstore/v3/authoring_grading/{course_key}/ |
#38373 |
Consumers migrating should expect the RFC 7807 error envelope, router-managed
URLs (note the trailing slash), JWT or session auth in place of Bearer, and on
list endpoints the standardized pagination envelope.
Deprecation Schedule
The old versions are deprecated as of this ticket and will be removed one
named release after the release in which this deprecation ships, giving
operators and plugin authors a full release cycle on a supported version.
- Now — endpoints marked deprecated:
deprecated: truein the OpenAPI
schema, aWarningresponse header, and docs pointing at the replacements. - Next named release — both versions ship; the deprecated ones still work.
- The release after — old versions removed.
Task List
This ticket is the umbrella for API deprecations arising from the FC-0118
standardization work. Further areas will be appended as their replacement
versions merge:
- contentstore xblock, course_details, home (v1 and v2), grading; LMS enrollment v1 — #38755
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDraft
Activity
fix: keep the v0 video upload deprecation out of the superseded code
Abdul-Muqadim-Arbisoft commentedon Sep 27, 2026
Entry for this ticket: contentstore video uploads. The replacement is in review in #39102; please add the lines below when it merges.
Rows for the Description table:
POST /api/contentstore/v0/videos/uploads/{course_id}POST /api/authoring/v1/courses/{course_key}/videos/GET/DELETE /api/contentstore/v0/videos/uploads/{course_id}/{edx_video_id}GET /api/authoring/v1/courses/{course_key}/videos/(the listing the v0 GET returns) andGET/DELETE /api/authoring/v1/courses/{course_key}/videos/{edx_video_id}/Line for the Task List:
How it is marked:
deprecated: truein the published OpenAPI schema. The superseded views are left untouched: no response header and no deprecation notes in code.The timeline is this ticket's: removed one named release after the release this ships in.
Abdul-Muqadim-Arbisoft commentedon Oct 4, 2026
Entry for this ticket: contentstore video management. The replacement is in review in #39186; please add the lines below when it merges.
Rows for the Description table:
GET /api/contentstore/v1/videos/{course_id}/{edx_video_id}/usageGET /api/authoring/v2/courses/{course_key}/video_usages/{edx_video_id}/PUT /api/contentstore/v1/videos/{course_id}/downloadPOST /api/authoring/v2/courses/{course_key}/video_archives/Line for the Task List:
Removal step for this area: move
VideoDownloadThrottleout ofcms/djangoapps/contentstore/rest_api/v1/views/videos.pybefore that module is deleted. The v2 archive view and its tests import it from there, so deleting the module first breaks the import ofcms/urls.py.How it is marked:
deprecated: truein the published OpenAPI schema. The superseded views are left untouched: no response header and no deprecation notes in code.The timeline is this ticket's: removed one named release after the release this ships in.
taimoor-ahmed-1 commentedon Oct 13, 2026
Entry for this ticket: contentstore course grading. The replacement is in review in #39227; please add the lines below when it merges.
Rows for the Description table:
GET/POST /api/contentstore/v1/course_grading/{course_id}GET/PATCH /api/authoring/v3/courses/{course_key}/grading/GET/PATCH /api/contentstore/v3/authoring_grading/{course_key}/GET/PATCH /api/authoring/v3/courses/{course_key}/grading/The existing
POST /api/contentstore/v0/grading/{course_id}row should point at the same replacement,PATCH /api/authoring/v3/courses/{course_key}/grading/. #39227 also marks that v0 route deprecated in the CMS schema, which it was not until now.Line for the Task List:
Migration notes
course_details.?view=fulladdscourse_assignment_lists,default_grade_designations,is_credit_course,show_credit_eligibilityandmfe_proctored_exam_settings_url, under the v1 names.grace_periodalso gainsseconds.How it is marked:
deprecated: truein the CMS schema, plus a docstring note on the v1 and v0 views. No response header.Window: this ticket's own schedule. The marking ships in the next named release after Verawood, and the deprecated addresses are removed one named release after that.
taimoor-ahmed-1 commentedon Oct 14, 2026
Entry for this ticket: contentstore course index. The replacement is in review in #39229; please add the lines below when it merges.
Rows for the Description table:
GET /api/contentstore/v1/course_index/{course_id}GET /api/authoring/v2/courses/{course_key}/outline/?view=full(the screen payload) or the default thin outline treeLine for the Task List:
Migration notes
?view=fullkeeps v1's top-level keys and per-node shape, minusinitial_user_clipboard. Read the clipboard from/api/content-staging/v1/clipboard/.children_url.?format=concisehas no equivalent; v1's concise form also listed the components inside units.How it is marked:
deprecated: truein the CMS schema, plus a docstring note on the v1 view. No response header.Window: this ticket's own schedule. The marking ships in the next named release after Verawood, and the deprecated address is removed one named release after that.
Abdul-Muqadim-Arbisoft commentedon Oct 15, 2026
Entry for this ticket: user API directory listings (users, user preferences, time zones). The replacement is in review in #39237; please add the lines below when it merges.
Rows for the Description table:
GET /api/user/v1/users/GET /api/user/v2/users/GET /api/user/v1/users/{id}/GET /api/user/v2/users/{username}/GET /api/user/v1/user_prefs/GET /api/user/v2/user_preferences/GET /api/user/v1/user_prefs/{id}/GET /api/user/v2/user_preferences/{username},{key}/GET /api/user/v1/preferences/{pref_key}/users/GET /api/user/v2/users/?preference_key={pref_key}GET /api/user/v1/forum_roles/{name}/users/GET /api/user/v2/users/?forum_role={name}&course_key={course_key}GET /api/user/v1/preferences/time_zones/GET /api/user/v2/time_zones/Line for the Task List:
How it is marked:
deprecated: truein the published OpenAPI schema. The superseded views are left untouched: no response header and no deprecation notes in code.The timeline is this ticket's: removed one named release after the release this ships in.
Faraz32123 commentedon Oct 15, 2026
Entry for this ticket: contentstore legacy library list. The replacement is in review in #39238; please add the lines below when it merges.
Rows for the Description table:
GET /api/contentstore/v1/home/librariesGET /api/authoring/v4/legacy_libraries/GET /api/contentstore/v3/home/libraries/GET /api/authoring/v4/legacy_libraries/GET /api/authoring/v3/home/libraries/GET /api/authoring/v4/legacy_libraries/Line for the Task List:
How it is marked:
deprecated: truein the published CMS OpenAPI schema (/api/contentstore/v3/home/libraries/already carried it under the v3 home prefix; the v1 path and/api/authoring/v3/home/libraries/gain it here). The superseded views are left untouched: no response header and no deprecation notes in code.The timeline is this ticket's: removed one named release after the release this ships in.
Before removal: on sites with
ENABLE_CREATOR_GROUP, the v1 and v3 lists create theunrequestedCourseCreatorrecord on GET, andPOST /request_course_creatordepends on that record. The v4 list does not create it; the Studio home and course rerun contexts still do. Removing these addresses is safe for that flow only while one of those remains, and #39068 (Studio home) must provide an explicit write before it drops the other. Details in #39238, "Deprecations".