Doc tooling for static API docs

This commit is contained in:
Ned Batchelder
2019-09-17 16:11:46 -04:00
parent d16bf75777
commit cdac1f4abb
13 changed files with 6181 additions and 5 deletions

View File

@@ -1,5 +1,6 @@
# Do things in edx-platform
.PHONY: clean docs extract_translations help pull pull_translations push_translations requirements shell upgrade
.PHONY: clean extract_translations help pull pull_translations push_translations requirements shell upgrade
.PHONY: api-docs docs guides swagger
# Careful with mktemp syntax: it has to work on Mac and Ubuntu, which have differences.
PRIVATE_FILES := $(shell mktemp -u /tmp/private_files.XXXXXX)
@@ -18,7 +19,19 @@ clean: ## archive and delete most git-ignored files
tar xf $(PRIVATE_FILES)
rm $(PRIVATE_FILES)
docs: ## build the developer documentation for this repository
SWAGGER = docs/swagger.yaml
docs: api-docs guides ## build all the developer documentation for this repository
swagger: ## generate the swagger.yaml file
DJANGO_SETTINGS_MODULE=docs.docs_settings python manage.py lms generate_swagger --generator-class=openedx.core.openapi.ApiSchemaGenerator -o $(SWAGGER)
api-docs: swagger ## build the REST api docs
rm -f docs/api/gen/*
python docs/sw2md.py $(SWAGGER) docs/api/gen
cd docs/api; make html
guides: ## build the developer guide docs
cd docs/guides; make clean html
extract_translations: ## extract localizable strings from sources

0
docs/__init__.py Normal file
View File

2
docs/api/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
_build
gen

19
docs/api/Makefile Normal file
View File

@@ -0,0 +1,19 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
SOURCEDIR = .
BUILDDIR = _build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

0
docs/api/__init__.py Normal file
View File

190
docs/api/conf.py Normal file
View File

@@ -0,0 +1,190 @@
# -*- coding: utf-8 -*-
#
# Configuration file for the Sphinx documentation builder.
#
# This file does only contain a selection of the most common options. For a
# full list see the documentation:
# http://www.sphinx-doc.org/en/master/config
from __future__ import absolute_import, unicode_literals
import os
import edx_theme
# -- Path setup --------------------------------------------------------------
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
# import os
# import sys
# sys.path.insert(0, os.path.abspath('.'))
# -- Project information -----------------------------------------------------
project = u'Open edX REST APIs'
copyright = edx_theme.COPYRIGHT
author = edx_theme.AUTHOR
# The short X.Y version
version = u''
# The full version, including alpha/beta/rc tags
release = u''
# -- General configuration ---------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#
# needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'recommonmark',
'sphinx.ext.autosectionlabel',
]
# Prefix document path to section labels, otherwise autogenerated labels would look like 'heading'
# rather than 'path/to/file:heading'
autosectionlabel_prefix_document = True
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
source_suffix = ['.rst', '.md']
# The master toctree document.
master_doc = 'index'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = [u'_build', 'Thumbs.db', '.DS_Store']
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = None
# -- Options for HTML output -------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'edx_theme'
html_theme_path = [edx_theme.get_html_theme_path()]
html_theme_options = {'navigation_depth': 3}
html_favicon = os.path.join(edx_theme.get_html_theme_path(), 'edx_theme', 'static', 'css', 'favicon.ico')
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#
# html_theme_options = {}
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# Custom sidebar templates, must be a dictionary that maps document names
# to template names.
#
# The default sidebars (for documents that don't match any pattern) are
# defined by theme itself. Builtin themes are using these templates by
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
# 'searchbox.html']``.
#
# html_sidebars = {}
# -- Options for HTMLHelp output ---------------------------------------------
# Output file base name for HTML help builder.
htmlhelp_basename = 'api-docsdoc'
# -- Options for LaTeX output ------------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#
# 'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#
# 'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#
# 'preamble': '',
# Latex figure (float) alignment
#
# 'figure_align': 'htbp',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'api-docs.tex', u'api-docs Documentation',
u'Nobody', 'manual'),
]
# -- Options for manual page output ------------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'api-docs', u'api-docs Documentation',
[author], 1)
]
# -- Options for Texinfo output ----------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'api-docs', u'api-docs Documentation',
author, 'api-docs', 'One line description of project.',
'Miscellaneous'),
]
# -- Options for Epub output -------------------------------------------------
# Bibliographic Dublin Core info.
epub_title = project
# The unique identifier of the text. This can be a ISBN number
# or the project homepage.
#
# epub_identifier = ''
# A unique identification for the text.
#
# epub_uid = ''
# A list of files that should not be packed into the epub file.
epub_exclude_files = ['search.html']

14
docs/api/index.rst Normal file
View File

@@ -0,0 +1,14 @@
##################
Open edX REST APIs
##################
TODO: What should go here?
See all the endpoints at :doc:`The Endpoints <gen/index>`.
.. toctree::
:glob:
:maxdepth: 1
gen/index
gen/*

View File

@@ -3,6 +3,7 @@ Django settings for use when generating API documentation.
Basically the LMS devstack settings plus a few items needed to successfully
import all the Studio code.
"""
from __future__ import absolute_import, unicode_literals
import os
@@ -24,7 +25,14 @@ else:
VIDEO_TRANSCRIPT_MIGRATIONS_JOB_QUEUE,
)
FEATURES['ENABLE_LTI_PROVIDER'] = True
# Turn on all the boolean feature flags, so that conditionally included
# API endpoints will be found.
for key, value in FEATURES.items():
if value is False:
FEATURES[key] = True
# Settings that will fail if we enable them, and we don't need them for docs anyway.
FEATURES['RUN_AS_ANALYTICS_SERVER_ENABLED'] = False
INSTALLED_APPS.extend([
'contentstore.apps.ContentstoreConfig',

View File

@@ -19,4 +19,4 @@ clean:
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

View File

@@ -39,7 +39,7 @@ sys.path.append(root / "openedx/features")
# without errors. If running sphinx-apidoc, we already set a different
# settings module to use in the on_init() hook of the parent process
if 'DJANGO_SETTINGS_MODULE' not in os.environ:
os.environ['DJANGO_SETTINGS_MODULE'] = 'docs_settings'
os.environ['DJANGO_SETTINGS_MODULE'] = 'docs.docs_settings'
django.setup()

333
docs/sw2md.py Normal file
View File

@@ -0,0 +1,333 @@
"""Generate Markdown documents from an OpenAPI swagger file."""
from __future__ import print_function
import contextlib
import functools
import os
import os.path
import re
import sys
import yaml
# JSON Reference helpers
class JRefable(object):
"""An object that can be indexed with JSON Pointers, and supports $ref."""
def __init__(self, data, doc=None, ref=None):
self.data = data
self.doc = doc or data
self.ref = ref or '/'
self.name = None
def __repr__(self):
return repr(self.data)
def wrap(self, data, ref):
if isinstance(data, dict):
if '$ref' in data:
ref = data['$ref']
ret = JRefableObject(self.doc)[ref]
ret.name = ref.split('/')[-1]
return ret
return JRefableObject(data, self.doc, ref)
if isinstance(data, list):
return JRefableArray(data, self.doc, ref)
return data
class JRefableObject(JRefable):
"""Make a dictionary into a JSON Reference-capable object."""
def __getitem__(self, jref):
if jref.startswith('#/'):
parts = jref[2:]
data = self.doc
ref = '/'
else:
parts = jref
data = self.data
ref = self.ref
for part in parts.split('/'):
try:
data = data[part]
except KeyError:
raise KeyError("{!r} not in {!r} then {!r}".format(part, self.ref, jref))
ref = ref + part + '/'
return self.wrap(data, ref=ref)
def get(self, key, default=None):
if key in self.data:
return self.wrap(self.data[key], self.ref + key + '/')
return default
def keys(self):
return self.data.keys()
def items(self):
for k, v in self.data.items():
yield k, self.wrap(v, self.ref + k.replace('/', ':') + '/')
def __contains__(self, val):
return val in self.data
class JRefableArray(JRefable):
"""Make a list into a JSON Reference-capable array."""
def __getitem__(self, index):
try:
data = self.data[index]
except IndexError:
raise IndexError("{!r} not in {!r}".format(index, self.ref))
return self.wrap(data, self.ref + str(index) + '/')
def __iter__(self):
for i, elt in enumerate(self.data):
yield self.wrap(elt, self.ref + str(i) + '/')
class OutputFiles(object):
"""A context manager to manage a series of files.
Use like this::
with OutputFiles() as outfiles:
...
if some_condition():
f = outfiles.open("filename.txt", "w")
Each open will close the previously opened file, and the end of the with
statement will close the last one.
"""
def __init__(self):
self.file = None
def __enter__(self):
return self
def __exit__(self, *args, **kwargs):
if self.file:
self.file.close()
return False
def open(self, *args, **kwargs):
if self.file:
self.file.close()
self.file = open(*args, **kwargs)
return self.file
sluggers = [
r"^.*?/v\d+/[\w_-]+",
r"^(/[\w_-]+){,3}",
]
method_order = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options']
def method_ordered_items(method_data):
keys = [k for k in method_order if k in method_data]
for key in keys:
yield key, method_data[key]
class MarkdownWriter(object):
"""Help write markdown, managing indentation and header nesting."""
def __init__(self, outfile):
self.outfile = outfile
self.cur_indent = 0
def print(self, text='', increase_headers=0):
if increase_headers:
text = re.sub(r"^#", "#" * (increase_headers + 1), text, flags=re.MULTILINE)
if self.cur_indent:
text = re.sub(r"^", " " * self.cur_indent, text, flags=re.MULTILINE)
print(text, file=self.outfile)
@contextlib.contextmanager
def indent(self, spaces):
old_indent = self.cur_indent
self.cur_indent += spaces
try:
yield
finally:
self.cur_indent = old_indent
def convert_swagger_to_markdown(swagger_data, output_dir):
"""Convert a swagger.yaml file to a series of markdown documents."""
sw = JRefableObject(swagger_data)
if not os.path.exists(output_dir):
os.makedirs(output_dir)
with open(os.path.join(output_dir, 'index.md'), 'w') as index:
indexmd = MarkdownWriter(index)
indexmd.print("# {}\n".format(sw['info/title']))
indexmd.print(sw['info/description'])
indexmd.print()
with OutputFiles() as outfiles:
slug = None
for uri, methods in sorted(sw['paths'].items()):
for slugger in sluggers:
m = re.search(slugger, uri)
if m:
new_slug = m.group()
if new_slug != slug:
slug = new_slug
outfile = slug.strip('/').replace('/', '_') + '.md'
outf = outfiles.open(os.path.join(output_dir, outfile), 'w')
outmd = MarkdownWriter(outf)
outmd.print("# {}\n".format(slug))
indexmd.print("## {}\n".format(slug))
break
common_params = methods.get('parameters', [])
for method, op_data in method_ordered_items(methods):
summary = ''
if 'summary' in op_data:
summary = " --- {}".format(op_data['summary'])
indexmd.print("[{} {}]({}){}\n".format(method.upper(), uri, outfile, summary))
write_one_method(outmd, method, uri, op_data, common_params)
def write_one_method(outmd, method, uri, op_data, common_params):
"""Write one entry (uri and method) to the markdown output."""
outmd.print("\n## {} {}\n".format(method.upper(), uri))
if 'summary' in op_data:
outmd.print(op_data['summary'])
outmd.print()
outmd.print(op_data['description'], increase_headers=2)
params = list(op_data.get('parameters', []))
params.extend(common_params)
if params:
outmd.print("\n### Parameters\n")
for param in params:
description = param.get('description', '').strip()
if description:
description = ": " + description
where = param['in']
required = param.get('required', False)
required = "required" if required else "optional"
if where == 'body':
schema = param['schema']
outmd.print("- **{}** (body, {}){}".format(
param['name'],
schema.name or schema['type'],
description,
))
with outmd.indent(2):
write_schema(outmd, schema)
else:
outmd.print("- **{}** ({}, {}, {}){}".format(
param['name'],
where,
param['type'],
required,
description,
))
responses = op_data.get('responses', [])
if responses:
outmd.print("\n### Responses\n")
for status, response in sorted(responses.items()):
description = response.get('description', '').strip()
if description:
description = ": " + description
schema = response.get('schema')
if schema:
type_note = " ({})".format(type_name(schema))
else:
type_note = ""
outmd.print("- **{}**{}{}".format(
status,
type_note,
description,
))
if schema:
with outmd.indent(2):
write_schema(outmd, schema)
def type_name(schema):
"""What is the short type name for `schema`?"""
if schema['type'] == 'object':
return schema.name or schema.get('type') or "object"
elif schema['type'] == 'array':
item_type = type_name(schema['items'])
return "array of " + item_type
else:
return schema['type']
def write_schema(outmd, schema):
"""Write a schema to the markdown output."""
if schema['type'] == 'object':
required = set(schema.get('required', ()))
for prop_name, prop in sorted(schema['properties'].items()):
attrs = []
type = type_name(prop)
if prop['type'] == 'array':
item_type = prop['items']
else:
item_type = None
attrs.append(type)
if prop_name in required:
attrs.append("required")
else:
attrs.append("optional")
if 'format' in prop:
attrs.append("format {}".format(prop["format"]))
if 'pattern' in prop:
attrs.append("pattern `{}`".format(prop["pattern"]))
if 'minLength' in prop:
attrs.append("min length {}".format(prop["minLength"]))
if 'maxLength' in prop:
attrs.append("max length {}".format(prop["maxLength"]))
if 'minimum' in prop:
attrs.append("minimum {}".format(prop["minimum"]))
if 'maximum' in prop:
attrs.append("maximum {}".format(prop["maximum"]))
if prop.get('readOnly', False):
attrs.append("read only")
# TODO: enum
# TODO: x-nullable
title = prop.get('title', '').strip()
if title:
title = ": " + title
description = prop.get('description', '').strip()
if description:
if title:
title = title + ". " + description
else:
title = ": " + description
outmd.print("- **{name}** ({attrs}){title}".format(
name=prop_name,
attrs=", ".join(attrs),
title=title,
))
if item_type and item_type['type'] in ['object', 'array']:
with outmd.indent(2):
write_schema(outmd, item_type)
elif schema['type'] == 'array':
write_schema(outmd, schema['items'])
else:
raise ValueError("Don't understand schema type {!r} at {}".format(schema['type'], schema.ref))
def main(args):
with open(args[0]) as swyaml:
swagger_data = yaml.safe_load(swyaml)
convert_swagger_to_markdown(swagger_data, output_dir=args[1])
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))

5596
docs/swagger.yaml Executable file
View File

@@ -0,0 +1,5596 @@
swagger: '2.0'
info:
title: Open edX API
description: APIs for access to Open edX information
contact:
email: oscm@edx.org
version: v1
basePath: /api
consumes:
- application/json
produces:
- application/json
securityDefinitions:
Basic:
type: basic
security:
- Basic: []
paths:
/badges/v1/assertions/user/{username}/:
get:
operationId: badges_v1_assertions_user_read
summary: '** Use cases **'
description: "Request a list of assertions for a user, optionally constrained\
\ to a course.\n\n** Example Requests **\n\n GET /api/badges/v1/assertions/user/{username}/\n\
\n** Response Values **\n\n Body comprised of a list of objects with the\
\ following fields:\n\n * badge_class: The badge class the assertion was\
\ awarded for. Represented as an object\n with the following fields:\n\
\ * slug: The identifier for the badge class\n * issuing_component:\
\ The software component responsible for issuing this badge.\n * display_name:\
\ The display name of the badge.\n * course_id: The course key of the\
\ course this badge is scoped to, or null if it isn't scoped to a course.\n\
\ * description: A description of the award and its significance.\n\
\ * criteria: A description of what is needed to obtain this award.\n\
\ * image_url: A URL to the icon image used to represent this award.\n\
\ * image_url: The baked assertion image derived from the badge_class icon--\
\ contains metadata about the award\n in its headers.\n * assertion_url:\
\ The URL to the OpenBadges BadgeAssertion object, for verification by compatible\
\ tools\n and software.\n\n** Params **\n\n * slug (optional): The\
\ identifier for a particular badge class to filter by.\n * issuing_component\
\ (optional): The issuing component for a particular badge class to filter\
\ by\n (requires slug to have been specified, or this will be ignored.)\
\ If slug is provided and this is not,\n assumes the issuing_component\
\ should be empty.\n * course_id (optional): Returns assertions that were\
\ awarded as part of a particular course. If slug is\n provided, and\
\ this field is not specified, assumes that the target badge has an empty\
\ course_id field.\n '*' may be used to get all badges with the specified\
\ slug, issuing_component combination across all courses.\n\n** Returns **\n\
\n * 200 on success, with a list of Badge Assertion objects.\n * 403\
\ if a user who does not have permission to masquerade as\n another user\
\ specifies a username other than their own.\n * 404 if the specified user\
\ does not exist\n\n {\n \"count\": 7,\n \"previous\": null,\n\
\ \"num_pages\": 1,\n \"results\": [\n {\n \
\ \"badge_class\": {\n \"slug\": \"special_award\"\
,\n \"issuing_component\": \"openedx__course\",\n \
\ \"display_name\": \"Very Special Award\",\n \
\ \"course_id\": \"course-v1:edX+DemoX+Demo_Course\",\n \
\ \"description\": \"Awarded for people who did something incredibly\
\ special\",\n \"criteria\": \"Do something incredibly\
\ special.\",\n \"image\": \"http://example.com/media/badge_classes/badges/special_xdpqpBv_9FYOZwN.png\"\
\n },\n \"image_url\": \"http://badges.example.com/media/issued/cd75b69fc1c979fcc1697c8403da2bdf.png\"\
,\n \"assertion_url\": \"http://badges.example.com/public/assertions/07020647-e772-44dd-98b7-d13d34335ca6\"\
\n },\n ...\n ]\n }"
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
schema:
required:
- count
- results
type: object
properties:
count:
type: integer
next:
type: string
format: uri
x-nullable: true
previous:
type: string
format: uri
x-nullable: true
results:
type: array
items:
$ref: '#/definitions/BadgeAssertion'
tags:
- badges
parameters:
- name: username
in: path
required: true
type: string
/bookmarks/v1/bookmarks/:
get:
operationId: bookmarks_v1_bookmarks_list
summary: Get a paginated list of bookmarks for a user.
description: "The list can be filtered by passing parameter \"course_id=<course_id>\"\
\nto only include bookmarks from a particular course.\n\nThe bookmarks are\
\ always sorted in descending order by creation date.\n\nEach page in the\
\ list contains 10 bookmarks by default. The page\nsize can be altered by\
\ passing parameter \"page_size=<page_size>\".\n\nTo include the optional\
\ fields pass the values in \"fields\" parameter\nas a comma separated list.\
\ Possible values are:\n\n* \"display_name\"\n* \"path\"\n\n# Example Requests\n\
\nGET /api/bookmarks/v1/bookmarks/?course_id={course_id1}&fields=display_name,path\n\
\n# Response Values\n\n* count: The number of bookmarks in a course.\n\n*\
\ next: The URI to the next page of bookmarks.\n\n* previous: The URI to the\
\ previous page of bookmarks.\n\n* num_pages: The number of pages listing\
\ bookmarks.\n\n* results: A list of bookmarks returned. Each collection\
\ in the list\n contains these fields.\n\n * id: String. The identifier\
\ string for the bookmark: {user_id},{usage_id}.\n\n * course_id: String.\
\ The identifier string of the bookmark's course.\n\n * usage_id: String.\
\ The identifier string of the bookmark's XBlock.\n\n * display_name: String.\
\ (optional) Display name of the XBlock.\n\n * path: List. (optional) List\
\ of dicts containing {\"usage_id\": <usage-id>, display_name:<display-name>}\n\
\ for the XBlocks from the top of the course tree till the parent of\
\ the bookmarked XBlock.\n\n * created: ISO 8601 String. The timestamp\
\ of bookmark's creation.\n\n"
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
- name: course_id
in: query
description: The id of the course, of course
type: string
- name: fields
in: query
description: "The fields to return: display_name, path.\n"
type: string
responses:
'200':
description: ''
tags:
- bookmarks
post:
operationId: bookmarks_v1_bookmarks_create
summary: Create a new bookmark for a user.
description: "The POST request only needs to contain one parameter \"usage_id\"\
.\n\nHttp400 is returned if the format of the request is not correct,\nthe\
\ usage_id is invalid or a block corresponding to the usage_id\ncould not\
\ be found.\n\n# Example Requests\n\nPOST /api/bookmarks/v1/bookmarks/\nRequest\
\ data: {\"usage_id\": <usage-id>}\n\n"
parameters: []
responses:
'201':
description: ''
tags:
- bookmarks
parameters: []
/bookmarks/v1/bookmarks/{username},{usage_id}/:
get:
operationId: bookmarks_v1_bookmarks_read
summary: Get a specific bookmark for a user.
description: "# Example Requests\n\nGET /api/bookmarks/v1/bookmarks/{username},{usage_id}/?fields=display_name,path\n\
\n"
parameters: []
responses:
'200':
description: ''
tags:
- bookmarks
delete:
operationId: bookmarks_v1_bookmarks_delete
description: DELETE /api/bookmarks/v1/bookmarks/{username},{usage_id}
parameters: []
responses:
'204':
description: ''
tags:
- bookmarks
parameters:
- name: usage_id
in: path
required: true
type: string
- name: username
in: path
required: true
type: string
/bulk_enroll/v1/bulk_enroll:
post:
operationId: bulk_enroll_v1_bulk_enroll_create
summary: '**Use Case**'
description: "Enroll multiple users in one or more courses.\n\n**Example Request**\n\
\n POST /api/bulk_enroll/v1/bulk_enroll/ {\n \"auto_enroll\": true,\n\
\ \"email_students\": true,\n \"action\": \"enroll\",\n \
\ \"courses\": \"course-v1:edX+Demo+123,course-v1:edX+Demo2+456\",\n \
\ \"cohorts\": \"cohortA,cohortA\",\n \"identifiers\": \"brandon@example.com,yamilah@example.com\"\
\n }\n\n **POST Parameters**\n\n A POST request can include the\
\ following parameters.\n\n * auto_enroll: When set to `true`, students\
\ will be enrolled as soon\n as they register.\n * email_students:\
\ When set to `true`, students will be sent email\n notifications upon\
\ enrollment.\n * action: Can either be set to \"enroll\" or \"unenroll\"\
. This determines the behavior\n * cohorts: Optional. If provided, the\
\ number of items in the list should be equal to\n the number of courses.\
\ first cohort coressponds with the first course and so on.\n The learners\
\ will be added to the corresponding cohort.\n\n**Response Values**\n\n \
\ If the supplied course data is valid and the enrollments were\n successful,\
\ an HTTP 200 \"OK\" response is returned.\n\n The HTTP 200 response body\
\ contains a list of response data for each\n enrollment. (See the `instructor.views.api.students_update_enrollment`\n\
\ docstring for the specifics of the response data available for each\n\
\ enrollment)\n\n If a cohorts list is provided, additional 'cohort'\
\ keys will be added\n to the 'before' and 'after' states."
parameters: []
responses:
'201':
description: ''
tags:
- bulk_enroll
parameters: []
/ccx/v0/ccx/:
get:
operationId: ccx_v0_ccx_list
summary: Gets a list of CCX Courses for a given Master Course.
description: "Additional parameters are allowed for pagination purposes.\n\n\
Args:\n request (Request): Django request object.\n\nReturn:\n A JSON\
\ serialized representation of a list of CCX courses."
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
schema:
required:
- count
- results
type: object
properties:
count:
type: integer
next:
type: string
format: uri
x-nullable: true
previous:
type: string
format: uri
x-nullable: true
results:
type: array
items:
$ref: '#/definitions/CCXCourse'
tags:
- ccx
post:
operationId: ccx_v0_ccx_create
summary: Creates a new CCX course for a given Master Course.
description: "Args:\n request (Request): Django request object.\n\nReturn:\n\
\ A JSON serialized representation a newly created CCX course."
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/CCXCourse'
responses:
'201':
description: ''
schema:
$ref: '#/definitions/CCXCourse'
tags:
- ccx
parameters: []
/ccx/v0/ccx/{ccx_course_id}/:
get:
operationId: ccx_v0_ccx_read
summary: Gets a CCX Course information.
description: "Args:\n request (Request): Django request object.\n ccx_course_id\
\ (string): URI element specifying the CCX course location.\n\nReturn:\n \
\ A JSON serialized representation of the CCX course."
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/CCXCourse'
tags:
- ccx
patch:
operationId: ccx_v0_ccx_partial_update
summary: Modifies a CCX course.
description: "Args:\n request (Request): Django request object.\n ccx_course_id\
\ (string): URI element specifying the CCX course location."
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/CCXCourse'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/CCXCourse'
tags:
- ccx
delete:
operationId: ccx_v0_ccx_delete
summary: Deletes a CCX course.
description: "Args:\n request (Request): Django request object.\n ccx_course_id\
\ (string): URI element specifying the CCX course location."
parameters: []
responses:
'204':
description: ''
tags:
- ccx
parameters:
- name: ccx_course_id
in: path
required: true
type: string
/certificates/v0/certificates/{username}/:
get:
operationId: certificates_v0_certificates_read
summary: Get a paginated list of bookmarks for a user.
description: "**Use Case**\n\n * Get the list of viewable course certificates\
\ for a specific user.\n\n**Example Request**\n\n GET /api/certificates/v0/certificates/{username}\n\
\n**GET Parameters**\n\n A GET request must include the following parameters.\n\
\n * username: A string representation of an user's username.\n\n**GET\
\ Response Values**\n\n If the request for information about the user's\
\ certificates is successful,\n an HTTP 200 \"OK\" response is returned.\n\
\n The HTTP 200 response contains a list of dicts with the following keys/values.\n\
\n * username: A string representation of an user's username passed in\
\ the request.\n\n * course_id: A string representation of a Course ID.\n\
\n * course_display_name: A string representation of the Course name.\n\
\n * course_organization: A string representation of the organization associated\
\ with the Course.\n\n * certificate_type: A string representation of the\
\ certificate type.\n Can be honor|verified|professional\n\n * created_date:\
\ Date/time the certificate was created, in ISO-8661 format.\n\n * status:\
\ A string representation of the certificate status.\n\n * is_passing:\
\ True if the certificate has a passing status, False if not.\n\n * download_url:\
\ A string representation of the certificate url.\n\n * grade: A string\
\ representation of a float for the user's course grade.\n\n**Example GET\
\ Response**\n\n [{\n \"username\": \"bob\",\n \"course_id\"\
: \"edX/DemoX/Demo_Course\",\n \"certificate_type\": \"verified\",\n\
\ \"created_date\": \"2015-12-03T13:14:28+0000\",\n \"status\"\
: \"downloadable\",\n \"is_passing\": true,\n \"download_url\"\
: \"http://www.example.com/cert.pdf\",\n \"grade\": \"0.98\"\n }]\n"
parameters: []
responses:
'200':
description: ''
tags:
- certificates
parameters:
- name: username
in: path
required: true
type: string
/certificates/v0/certificates/{username}/courses/{course_id}/:
get:
operationId: certificates_v0_certificates_courses_read
summary: Gets a certificate information.
description: "Args:\n request (Request): Django request object.\n username\
\ (string): URI element specifying the user's username.\n course_id (string):\
\ URI element specifying the course location.\n\nReturn:\n A JSON serialized\
\ representation of the certificate."
parameters: []
responses:
'200':
description: ''
tags:
- certificates
parameters:
- name: course_id
in: path
required: true
type: string
- name: username
in: path
required: true
type: string
/cohorts/v1/courses/{course_key_string}/cohorts/{cohort_id}:
get:
operationId: cohorts_v1_courses_cohorts_read
description: Endpoint to get either one or all cohorts.
parameters: []
responses:
'200':
description: ''
schema:
type: object
properties: {}
tags:
- cohorts
post:
operationId: cohorts_v1_courses_cohorts_create
description: Endpoint to create a new cohort, must not include cohort_id.
parameters:
- name: data
in: body
required: true
schema:
type: object
properties: {}
responses:
'201':
description: ''
schema:
type: object
properties: {}
tags:
- cohorts
patch:
operationId: cohorts_v1_courses_cohorts_partial_update
description: Endpoint to update a cohort name and/or assignment type.
parameters:
- name: data
in: body
required: true
schema:
type: object
properties: {}
responses:
'200':
description: ''
schema:
type: object
properties: {}
tags:
- cohorts
parameters:
- name: cohort_id
in: path
required: true
type: string
- name: course_key_string
in: path
required: true
type: string
/cohorts/v1/courses/{course_key_string}/cohorts/{cohort_id}/users/{username}:
get:
operationId: cohorts_v1_courses_cohorts_users_read
description: Lists the users in a specific cohort.
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/CohortUsersAPI'
tags:
- cohorts
post:
operationId: cohorts_v1_courses_cohorts_users_create
description: Add given users to the cohort.
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/CohortUsersAPI'
responses:
'201':
description: ''
schema:
$ref: '#/definitions/CohortUsersAPI'
tags:
- cohorts
delete:
operationId: cohorts_v1_courses_cohorts_users_delete
summary: Removes and user from a specific cohort.
description: "Note: It's better to use the post method to move users between\
\ cohorts."
parameters: []
responses:
'204':
description: ''
tags:
- cohorts
parameters:
- name: cohort_id
in: path
required: true
type: string
- name: course_key_string
in: path
required: true
type: string
- name: username
in: path
required: true
type: string
/cohorts/v1/courses/{course_key_string}/users:
post:
operationId: cohorts_v1_courses_users_create
description: "View method that accepts an uploaded file (using key \"uploaded-file\"\
)\ncontaining cohort assignments for users. This method spawns a celery task\n\
to do the assignments, and a CSV file with results is provided via data downloads."
parameters: []
responses:
'201':
description: ''
tags:
- cohorts
parameters:
- name: course_key_string
in: path
required: true
type: string
/cohorts/v1/settings/{course_key_string}:
get:
operationId: cohorts_v1_settings_read
description: Endpoint to fetch the course cohort settings.
parameters: []
responses:
'200':
description: ''
schema:
type: object
properties: {}
tags:
- cohorts
put:
operationId: cohorts_v1_settings_update
description: Endpoint to set the course cohort settings.
parameters:
- name: data
in: body
required: true
schema:
type: object
properties: {}
responses:
'200':
description: ''
schema:
type: object
properties: {}
tags:
- cohorts
parameters:
- name: course_key_string
in: path
required: true
type: string
/commerce/v0/baskets/:
post:
operationId: commerce_v0_baskets_create
description: Attempt to enroll the user.
parameters: []
responses:
'201':
description: ''
tags:
- commerce
parameters: []
/commerce/v0/baskets/{basket_id}/order/:
get:
operationId: commerce_v0_baskets_order_list
description: HTTP handler.
parameters: []
responses:
'200':
description: ''
tags:
- commerce
parameters:
- name: basket_id
in: path
required: true
type: string
/commerce/v1/courses/:
get:
operationId: commerce_v1_courses_list
description: List courses and modes.
parameters: []
responses:
'200':
description: ''
schema:
type: array
items:
$ref: '#/definitions/commerce.Course'
tags:
- commerce
parameters: []
/commerce/v1/courses/{course_id}/:
get:
operationId: commerce_v1_courses_read
description: Retrieve, update, or create courses/modes.
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/commerce.Course'
tags:
- commerce
put:
operationId: commerce_v1_courses_update
description: Retrieve, update, or create courses/modes.
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/commerce.Course'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/commerce.Course'
tags:
- commerce
patch:
operationId: commerce_v1_courses_partial_update
description: Retrieve, update, or create courses/modes.
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/commerce.Course'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/commerce.Course'
tags:
- commerce
parameters:
- name: course_id
in: path
required: true
type: string
/commerce/v1/orders/{number}/:
get:
operationId: commerce_v1_orders_read
description: HTTP handler.
parameters: []
responses:
'200':
description: ''
tags:
- commerce
parameters:
- name: number
in: path
required: true
type: string
/completion/v1/completion-batch:
post:
operationId: completion_v1_completion-batch_create
summary: Inserts a batch of completions.
description: "REST Endpoint Format:\n{\n \"username\": \"username\",\n \"\
course_key\": \"course-key\",\n \"blocks\": {\n \"block_key1\": 0.0,\n\
\ \"block_key2\": 1.0,\n \"block_key3\": 1.0,\n }\n}\n\n**Returns**\n\
\nA Response object, with an appropriate status code.\n\nIf successful, status\
\ code is 200.\n{\n \"detail\" : _(\"ok\")\n}\n\nOtherwise, a 400 or 404\
\ may be returned, and the \"detail\" content will explain the error."
parameters: []
responses:
'201':
description: ''
tags:
- completion
parameters: []
/completion/v1/subsection-completion/{username}/{course_key}/(P{subsection_id}[/]*):
get:
operationId: completion_v1_subsection-completion_]*)_list
description: Returns completion for a (user, subsection, course).
parameters: []
responses:
'200':
description: ''
tags:
- completion
parameters:
- name: course_key
in: path
required: true
type: string
- name: subsection_id
in: path
required: true
type: string
- name: username
in: path
required: true
type: string
/course_goals/v0/course_goals/:
get:
operationId: course_goals_v0_course_goals_list
description: description from swagger_auto_schema via method_decorator
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
schema:
required:
- count
- results
type: object
properties:
count:
type: integer
next:
type: string
format: uri
x-nullable: true
previous:
type: string
format: uri
x-nullable: true
results:
type: array
items:
$ref: '#/definitions/CourseGoal'
tags:
- course_goals
post:
operationId: course_goals_v0_course_goals_create
description: Create a new goal if one does not exist, otherwise update the existing
goal.
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/CourseGoal'
responses:
'201':
description: ''
schema:
$ref: '#/definitions/CourseGoal'
tags:
- course_goals
parameters: []
/course_goals/v0/course_goals/{id}/:
get:
operationId: course_goals_v0_course_goals_read
summary: API calls to create and update a course goal.
description: "Validates incoming data to ensure that course_key maps to an actual\n\
course and that the goal_key is a valid option.\n\n**Use Case**\n * Create\
\ a new goal for a user.\n * Update an existing goal for a user\n\n**Example\
\ Requests**\n POST /api/course_goals/v0/course_goals/\n Request\
\ data: {\"course_key\": <course-key>, \"goal_key\": \"<goal-key>\", \"user\"\
: \"<username>\"}\n\nReturns Http400 response if the course_key does not map\
\ to a known\ncourse or if the goal_key does not map to a valid goal key."
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/CourseGoal'
tags:
- course_goals
put:
operationId: course_goals_v0_course_goals_update
summary: API calls to create and update a course goal.
description: "Validates incoming data to ensure that course_key maps to an actual\n\
course and that the goal_key is a valid option.\n\n**Use Case**\n * Create\
\ a new goal for a user.\n * Update an existing goal for a user\n\n**Example\
\ Requests**\n POST /api/course_goals/v0/course_goals/\n Request\
\ data: {\"course_key\": <course-key>, \"goal_key\": \"<goal-key>\", \"user\"\
: \"<username>\"}\n\nReturns Http400 response if the course_key does not map\
\ to a known\ncourse or if the goal_key does not map to a valid goal key."
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/CourseGoal'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/CourseGoal'
tags:
- course_goals
patch:
operationId: course_goals_v0_course_goals_partial_update
summary: API calls to create and update a course goal.
description: "Validates incoming data to ensure that course_key maps to an actual\n\
course and that the goal_key is a valid option.\n\n**Use Case**\n * Create\
\ a new goal for a user.\n * Update an existing goal for a user\n\n**Example\
\ Requests**\n POST /api/course_goals/v0/course_goals/\n Request\
\ data: {\"course_key\": <course-key>, \"goal_key\": \"<goal-key>\", \"user\"\
: \"<username>\"}\n\nReturns Http400 response if the course_key does not map\
\ to a known\ncourse or if the goal_key does not map to a valid goal key."
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/CourseGoal'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/CourseGoal'
tags:
- course_goals
delete:
operationId: course_goals_v0_course_goals_delete
summary: API calls to create and update a course goal.
description: "Validates incoming data to ensure that course_key maps to an actual\n\
course and that the goal_key is a valid option.\n\n**Use Case**\n * Create\
\ a new goal for a user.\n * Update an existing goal for a user\n\n**Example\
\ Requests**\n POST /api/course_goals/v0/course_goals/\n Request\
\ data: {\"course_key\": <course-key>, \"goal_key\": \"<goal-key>\", \"user\"\
: \"<username>\"}\n\nReturns Http400 response if the course_key does not map\
\ to a known\ncourse or if the goal_key does not map to a valid goal key."
parameters: []
responses:
'204':
description: ''
tags:
- course_goals
parameters:
- name: id
in: path
description: A unique integer value identifying this course goal.
required: true
type: integer
/course_modes/v1/courses/{course_id}/:
get:
operationId: course_modes_v1_courses_read
summary: View to list or create course modes for a course.
description: "**Use Case**\n\n List all course modes for a course, or create\
\ a new\n course mode.\n\n**Example Requests**\n\n GET /api/course_modes/v1/courses/{course_id}/\n\
\n Returns a list of all existing course modes for a course.\n\n \
\ POST /api/course_modes/v1/courses/{course_id}/\n\n Creates a new\
\ course mode in a course.\n\n**Response Values**\n\n For each HTTP verb\
\ below, an HTTP 404 \"Not Found\" response is returned if the\n requested\
\ course id does not exist.\n\n GET: If the request is successful, an HTTP\
\ 200 \"OK\" response is returned\n along with a list of course mode dictionaries\
\ within a course.\n The details are contained in a JSON dictionary as\
\ follows:\n\n * course_id: The course identifier.\n * mode_slug:\
\ The short name for the course mode.\n * mode_display_name: The verbose\
\ name for the course mode.\n * min_price: The minimum price for which\
\ a user can\n enroll in this mode.\n * currency: The currency\
\ of the listed prices.\n * expiration_datetime: The date and time after\
\ which\n users cannot enroll in the course in this mode (not required\
\ for POST).\n * expiration_datetime_is_explicit: Whether the expiration_datetime\
\ field was\n explicitly set (not required for POST).\n * description:\
\ A description of this mode (not required for POST).\n * sku: The SKU\
\ for this mode (for ecommerce purposes, not required for POST).\n *\
\ bulk_sku: The bulk SKU for this mode (for ecommerce purposes, not required\
\ for POST).\n\n POST: If the request is successful, an HTTP 201 \"Created\"\
\ response is returned."
parameters: []
responses:
'200':
description: ''
schema:
type: array
items:
$ref: '#/definitions/course_modes.CourseMode'
tags:
- course_modes
post:
operationId: course_modes_v1_courses_create
summary: View to list or create course modes for a course.
description: "**Use Case**\n\n List all course modes for a course, or create\
\ a new\n course mode.\n\n**Example Requests**\n\n GET /api/course_modes/v1/courses/{course_id}/\n\
\n Returns a list of all existing course modes for a course.\n\n \
\ POST /api/course_modes/v1/courses/{course_id}/\n\n Creates a new\
\ course mode in a course.\n\n**Response Values**\n\n For each HTTP verb\
\ below, an HTTP 404 \"Not Found\" response is returned if the\n requested\
\ course id does not exist.\n\n GET: If the request is successful, an HTTP\
\ 200 \"OK\" response is returned\n along with a list of course mode dictionaries\
\ within a course.\n The details are contained in a JSON dictionary as\
\ follows:\n\n * course_id: The course identifier.\n * mode_slug:\
\ The short name for the course mode.\n * mode_display_name: The verbose\
\ name for the course mode.\n * min_price: The minimum price for which\
\ a user can\n enroll in this mode.\n * currency: The currency\
\ of the listed prices.\n * expiration_datetime: The date and time after\
\ which\n users cannot enroll in the course in this mode (not required\
\ for POST).\n * expiration_datetime_is_explicit: Whether the expiration_datetime\
\ field was\n explicitly set (not required for POST).\n * description:\
\ A description of this mode (not required for POST).\n * sku: The SKU\
\ for this mode (for ecommerce purposes, not required for POST).\n *\
\ bulk_sku: The bulk SKU for this mode (for ecommerce purposes, not required\
\ for POST).\n\n POST: If the request is successful, an HTTP 201 \"Created\"\
\ response is returned."
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/course_modes.CourseMode'
responses:
'201':
description: ''
schema:
$ref: '#/definitions/course_modes.CourseMode'
tags:
- course_modes
parameters:
- name: course_id
in: path
required: true
type: string
/course_modes/v1/courses/{course_id}/{mode_slug}:
get:
operationId: course_modes_v1_courses_read
summary: View to retrieve, update, or delete a specific course mode for a course.
description: "**Use Case**\n\n Get or update course mode details for a specific\
\ course mode on a course.\n Or you may delete a specific course mode from\
\ a course.\n\n**Example Requests**\n\n GET /api/course_modes/v1/courses/{course_id}/{mode_slug}\n\
\n Returns details on an existing course mode for a course.\n\n \
\ PATCH /api/course_modes/v1/courses/{course_id}/{mode_slug}\n\n Updates\
\ (via merge) details of an existing course mode for a course.\n\n DELETE\
\ /api/course_modes/v1/courses/{course_id}/{mode_slug}\n\n Deletes\
\ an existing course mode for a course.\n\n**Response Values**\n\n For\
\ each HTTP verb below, an HTTP 404 \"Not Found\" response is returned if\
\ the\n requested course id does not exist, or the mode slug does not exist\
\ within the course.\n\n GET: If the request is successful, an HTTP 200\
\ \"OK\" response is returned\n along with a details for a single course\
\ mode within a course. The details are contained\n in a JSON dictionary\
\ as follows:\n\n * course_id: The course identifier.\n * mode_slug:\
\ The short name for the course mode.\n * mode_display_name: The verbose\
\ name for the course mode.\n * min_price: The minimum price for which\
\ a user can\n enroll in this mode.\n * currency: The currency\
\ of the listed prices.\n * expiration_datetime: The date and time after\
\ which\n users cannot enroll in the course in this mode (not required\
\ for PATCH).\n * expiration_datetime_is_explicit: Whether the expiration_datetime\
\ field was\n explicitly set (not required for PATCH).\n * description:\
\ A description of this mode (not required for PATCH).\n * sku: The SKU\
\ for this mode (for ecommerce purposes, not required for PATCH).\n *\
\ bulk_sku: The bulk SKU for this mode (for ecommerce purposes, not required\
\ for PATCH).\n\n PATCH: If the request is successful, an HTTP 204 \"No\
\ Content\" response is returned.\n If \"application/merge-patch+json\"\
\ is not the specified content type,\n a 415 \"Unsupported Media Type\"\
\ response is returned.\n\n DELETE: If the request is successful, an HTTP\
\ 204 \"No Content\" response is returned."
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/course_modes.CourseMode'
consumes:
- application/merge-patch+json
tags:
- course_modes
patch:
operationId: course_modes_v1_courses_partial_update
description: Performs a partial update of a CourseMode instance.
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/course_modes.CourseMode'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/course_modes.CourseMode'
consumes:
- application/merge-patch+json
tags:
- course_modes
delete:
operationId: course_modes_v1_courses_delete
summary: View to retrieve, update, or delete a specific course mode for a course.
description: "**Use Case**\n\n Get or update course mode details for a specific\
\ course mode on a course.\n Or you may delete a specific course mode from\
\ a course.\n\n**Example Requests**\n\n GET /api/course_modes/v1/courses/{course_id}/{mode_slug}\n\
\n Returns details on an existing course mode for a course.\n\n \
\ PATCH /api/course_modes/v1/courses/{course_id}/{mode_slug}\n\n Updates\
\ (via merge) details of an existing course mode for a course.\n\n DELETE\
\ /api/course_modes/v1/courses/{course_id}/{mode_slug}\n\n Deletes\
\ an existing course mode for a course.\n\n**Response Values**\n\n For\
\ each HTTP verb below, an HTTP 404 \"Not Found\" response is returned if\
\ the\n requested course id does not exist, or the mode slug does not exist\
\ within the course.\n\n GET: If the request is successful, an HTTP 200\
\ \"OK\" response is returned\n along with a details for a single course\
\ mode within a course. The details are contained\n in a JSON dictionary\
\ as follows:\n\n * course_id: The course identifier.\n * mode_slug:\
\ The short name for the course mode.\n * mode_display_name: The verbose\
\ name for the course mode.\n * min_price: The minimum price for which\
\ a user can\n enroll in this mode.\n * currency: The currency\
\ of the listed prices.\n * expiration_datetime: The date and time after\
\ which\n users cannot enroll in the course in this mode (not required\
\ for PATCH).\n * expiration_datetime_is_explicit: Whether the expiration_datetime\
\ field was\n explicitly set (not required for PATCH).\n * description:\
\ A description of this mode (not required for PATCH).\n * sku: The SKU\
\ for this mode (for ecommerce purposes, not required for PATCH).\n *\
\ bulk_sku: The bulk SKU for this mode (for ecommerce purposes, not required\
\ for PATCH).\n\n PATCH: If the request is successful, an HTTP 204 \"No\
\ Content\" response is returned.\n If \"application/merge-patch+json\"\
\ is not the specified content type,\n a 415 \"Unsupported Media Type\"\
\ response is returned.\n\n DELETE: If the request is successful, an HTTP\
\ 204 \"No Content\" response is returned."
parameters: []
responses:
'204':
description: ''
consumes:
- application/merge-patch+json
tags:
- course_modes
parameters:
- name: course_id
in: path
required: true
type: string
- name: mode_slug
in: path
required: true
type: string
/courses/v1/blocks/:
get:
operationId: courses_v1_blocks_list
summary: '**Use Case**'
description: "Returns the blocks in the course according to the requesting user's\n\
\ access level.\n\n**Example requests**:\n\n GET /api/courses/v1/blocks/?course_id=<course_id>\n\
\ GET /api/courses/v1/blocks/?course_id=<course_id>\n &username=anjali\n\
\ &depth=all\n &requested_fields=graded,format,student_view_multi_device,lti_url\n\
\ &block_counts=video\n &student_view_data=video\n &block_types_filter=problem,html\n\
\n**Parameters**:\n\n This view redirects to /api/courses/v1/blocks/<root_usage_key>/\
\ for the\n root usage key of the course specified by course_id. The view\
\ accepts\n all parameters accepted by :class:`BlocksView`, plus the following\n\
\ required parameter\n\n * course_id: (string, required) The ID of the\
\ course whose block data\n we want to return\n\n**Response Values**\n\
\n Responses are identical to those returned by :class:`BlocksView` when\n\
\ passed the root_usage_key of the requested course.\n\n If the course_id\
\ is not supplied, a 400: Bad Request is returned, with\n a message indicating\
\ that course_id is required.\n\n If an invalid course_id is supplied,\
\ a 400: Bad Request is returned,\n with a message indicating that the\
\ course_id is not valid."
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- courses
parameters: []
? /courses/v1/blocks/(P{usage_key_string}{var}|api/courses/v1/blocks/(P{usage_key_string}(:i4x://[/]+/[/]+/[/]+/[@]+(:@[/]+))|{var})
: get:
operationId: courses_v1_blocks_courses_v1_blocks__[_]+_[_]+_[_]+_[@]+(:@[_read
summary: '**Use Case**'
description: "Returns the blocks within the requested block tree according to\
\ the\n requesting user's access level.\n\n**Example requests**:\n\n \
\ GET /api/courses/v1/blocks/<root_block_usage_id>/?depth=all\n GET /api/courses/v1/blocks/<usage_id>/?\n\
\ username=anjali\n &depth=all\n &requested_fields=graded,format,student_view_multi_device,lti_url,due\n\
\ &block_counts=video\n &student_view_data=video\n &block_types_filter=problem,html\n\
\n**Parameters**:\n\n * all_blocks: (boolean) Provide a value of \"true\"\
\ to return all\n blocks. Returns all blocks only if the requesting user\
\ has course\n staff permissions. Blocks that are visible only to specific\
\ learners\n (for example, based on group membership or randomized content)\
\ are\n all included. If all_blocks is not specified, you must specify\
\ the\n username for the user whose course blocks are requested.\n\n\
\ * username: (string) Required, unless ``all_blocks`` is specified.\n\
\ Specify the username for the user whose course blocks are requested.\n\
\ Only users with course staff permissions can specify other users'\n\
\ usernames. If a username is specified, results include blocks that\n\
\ are visible to that user, including those based on group or cohort\n\
\ membership or randomized content assigned to that user.\n\n Example:\
\ username=anjali\n\n * student_view_data: (list) Indicates for which block\
\ types to return\n student_view_data.\n\n Example: student_view_data=video\n\
\n * block_counts: (list) Indicates for which block types to return the\n\
\ aggregate count of the blocks.\n\n Example: block_counts=video,problem\n\
\n * requested_fields: (list) Indicates which additional fields to return\n\
\ for each block. For a list of available fields see under `Response\n\
\ Values -> blocks`, below.\n\n The following fields are always\
\ returned: id, type, display_name\n\n Example: requested_fields=graded,format,student_view_multi_device\n\
\n * depth: (integer or all) Indicates how deep to traverse into the blocks\n\
\ hierarchy. A value of all means the entire hierarchy.\n\n Default\
\ is 0\n\n Example: depth=all\n\n * nav_depth: (integer)\n\n \
\ WARNING: nav_depth is not supported, and may be removed at any time.\n\n\
\ Indicates how far deep to traverse into the\n course hierarchy\
\ before bundling all the descendants.\n\n Default is 3 since typical\
\ navigational views of the course show a\n maximum of chapter->sequential->vertical.\n\
\n Example: nav_depth=3\n\n * return_type (string) Indicates in what\
\ data type to return the\n blocks.\n\n Default is dict. Supported\
\ values are: dict, list\n\n Example: return_type=dict\n\n * block_types_filter:\
\ (list) Requested types of blocks used to filter the final result\n \
\ of returned blocks. Possible values include sequential, vertical, html,\
\ problem,\n video, and discussion.\n\n Example: block_types_filter=vertical,html\n\
\n**Response Values**\n\n The following fields are returned with a successful\
\ response.\n\n * root: The ID of the root node of the requested course\
\ block\n structure.\n\n * blocks: A dictionary or list, based on\
\ the value of the\n \"return_type\" parameter. Maps block usage IDs\
\ to a collection of\n information about each block. Each block contains\
\ the following\n fields.\n\n * id: (string) The usage ID of the\
\ block.\n\n * type: (string) The type of block. Possible values the\
\ names of any\n XBlock type in the system, including custom blocks.\
\ Examples are\n course, chapter, sequential, vertical, html, problem,\
\ video, and\n discussion.\n\n * display_name: (string) The display\
\ name of the block.\n\n * children: (list) If the block has child blocks,\
\ a list of IDs of\n the child blocks. Returned only if \"children\"\
\ is included in the\n \"requested_fields\" parameter.\n\n * completion:\
\ (float or None) The level of completion of the block.\n Its value\
\ can vary between 0.0 and 1.0 or be equal to None\n if block is not\
\ completable. Returned only if \"completion\"\n is included in the\
\ \"requested_fields\" parameter.\n\n * block_counts: (dict) For each\
\ block type specified in the\n block_counts parameter to the endpoint,\
\ the aggregate number of\n blocks of that type for this block and\
\ all of its descendants.\n\n * graded (boolean) Whether or not the block\
\ or any of its descendants\n is graded. Returned only if \"graded\"\
\ is included in the\n \"requested_fields\" parameter.\n\n * format:\
\ (string) The assignment type of the block. Possible values\n can\
\ be \"Homework\", \"Lab\", \"Midterm Exam\", and \"Final Exam\".\n \
\ Returned only if \"format\" is included in the \"requested_fields\"\n \
\ parameter.\n\n * student_view_data: (dict) The JSON data for\
\ this block.\n Returned only if the \"student_view_data\" input parameter\
\ contains\n this block's type.\n\n * student_view_url: (string)\
\ The URL to retrieve the HTML rendering\n of this block's student\
\ view. The HTML could include CSS and\n Javascript code. This field\
\ can be used in combination with the\n student_view_multi_device field\
\ to decide whether to display this\n content to the user.\n\n \
\ This URL can be used as a fallback if the student_view_data for\n \
\ this block type is not supported by the client or the block.\n\n \
\ * student_view_multi_device: (boolean) Whether or not the HTML of\n \
\ the student view that is rendered at \"student_view_url\" supports\n\
\ responsive web layouts, touch-based inputs, and interactive state\n\
\ management for a variety of device sizes and types, including\n \
\ mobile and touch devices. Returned only if\n \"student_view_multi_device\"\
\ is included in the \"requested_fields\"\n parameter.\n\n * lms_web_url:\
\ (string) The URL to the navigational container of the\n xBlock on\
\ the web LMS. This URL can be used as a further fallback\n if the\
\ student_view_url and the student_view_data fields are not\n supported.\n\
\n * lti_url: The block URL for an LTI consumer. Returned only if the\n\
\ \"ENABLE_LTI_PROVIDER\" Django settign is set to \"True\".\n\n \
\ * due: The due date of the block. Returned only if \"due\" is included\n\
\ in the \"requested_fields\" parameter.\n\n * show_correctness:\
\ Whether to show scores/correctness to learners for the current sequence\
\ or problem.\n Returned only if \"show_correctness\" is included in\
\ the \"requested_fields\" parameter."
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- courses
parameters:
- name: usage_key_string
in: path
required: true
type: string
- name: var
in: path
required: true
type: string
/courses/v1/courses/:
get:
operationId: courses_v1_courses_list
summary: '**Use Cases**'
description: "Request information on all courses visible to the specified user.\n\
\n**Example Requests**\n\n GET /api/courses/v1/courses/\n\n**Response Values**\n\
\n Body comprises a list of objects as returned by `CourseDetailView`.\n\
\n**Parameters**\n search_term (optional):\n Search term to filter\
\ courses (used by ElasticSearch).\n\n username (optional):\n The\
\ username of the specified user whose visible courses we\n want to\
\ see. The username is not required only if the API is\n requested\
\ by an Anonymous user.\n\n org (optional):\n If specified, visible\
\ `CourseOverview` objects are filtered\n such that only those belonging\
\ to the organization with the\n provided org code (e.g., \"HarvardX\"\
) are returned.\n Case-insensitive.\n\n role (optional):\n \
\ If specified, visible `CourseOverview` objects are filtered\n such\
\ that only those for which the user has the specified role\n are returned.\
\ Multiple role parameters can be specified.\n Case-insensitive.\n\n\
**Returns**\n\n * 200 on success, with a list of course discovery objects\
\ as returned\n by `CourseDetailView`.\n * 400 if an invalid parameter\
\ was sent or the username was not provided\n for an authenticated request.\n\
\ * 403 if a user who does not have permission to masquerade as\n \
\ another user specifies a username other than their own.\n * 404 if the\
\ specified user does not exist, or the requesting user does\n not have\
\ permission to view their courses.\n\n Example response:\n\n [\n\
\ {\n \"blocks_url\": \"/api/courses/v1/blocks/?course_id=edX%2Fexample%2F2012_Fall\"\
,\n \"media\": {\n \"course_image\": {\n \
\ \"uri\": \"/c4x/edX/example/asset/just_a_test.jpg\",\n \
\ \"name\": \"Course Image\"\n }\n },\n \
\ \"description\": \"An example course.\",\n \"end\": \"2015-09-19T18:00:00Z\"\
,\n \"enrollment_end\": \"2015-07-15T00:00:00Z\",\n \
\ \"enrollment_start\": \"2015-06-15T00:00:00Z\",\n \"course_id\"\
: \"edX/example/2012_Fall\",\n \"name\": \"Example Course\",\n\
\ \"number\": \"example\",\n \"org\": \"edX\",\n \
\ \"start\": \"2015-07-17T12:00:00Z\",\n \"start_display\"\
: \"July 17, 2015\",\n \"start_type\": \"timestamp\"\n \
\ }\n ]"
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
schema:
required:
- count
- results
type: object
properties:
count:
type: integer
next:
type: string
format: uri
x-nullable: true
previous:
type: string
format: uri
x-nullable: true
results:
type: array
items:
$ref: '#/definitions/Course'
tags:
- courses
parameters: []
? /courses/v1/courses/(P{course_key_string}[/+]+{var}[/+]+api/courses/v1/courses/(P{course_key_string}[/+]+(/|+)[/+]+{var}[/]+)
: get:
operationId: courses_v1_courses_+]+api_courses_v1_courses_+]+(_|+)[_]+)_read
summary: '**Use Cases**'
description: "Request details for a course\n\n**Example Requests**\n\n GET\
\ /api/courses/v1/courses/{course_key}/\n\n**Response Values**\n\n Body\
\ consists of the following fields:\n\n * effort: A textual description\
\ of the weekly hours of effort expected\n in the course.\n * end:\
\ Date the course ends, in ISO 8601 notation\n * enrollment_end: Date enrollment\
\ ends, in ISO 8601 notation\n * enrollment_start: Date enrollment begins,\
\ in ISO 8601 notation\n * id: A unique identifier of the course; a serialized\
\ representation\n of the opaque key identifying the course.\n *\
\ media: An object that contains named media items. Included here:\n \
\ * course_image: An image to show for the course. Represented\n \
\ as an object with the following fields:\n * uri: The location\
\ of the image\n * name: Name of the course\n * number: Catalog number\
\ of the course\n * org: Name of the organization that owns the course\n\
\ * overview: A possibly verbose HTML textual description of the course.\n\
\ Note: this field is only included in the Course Detail view, not\n\
\ the Course List view.\n * short_description: A textual description\
\ of the course\n * start: Date the course begins, in ISO 8601 notation\n\
\ * start_display: Readably formatted start of the course\n * start_type:\
\ Hint describing how `start_display` is set. One of:\n * `\"string\"\
`: manually set by the course author\n * `\"timestamp\"`: generated\
\ from the `start` timestamp\n * `\"empty\"`: no start date is specified\n\
\ * pacing: Course pacing. Possible values: instructor, self\n\n Deprecated\
\ fields:\n\n * blocks_url: Used to fetch the course blocks\n * course_id:\
\ Course key (use 'id' instead)\n\n**Parameters:**\n\n username (optional):\n\
\ The username of the specified user for whom the course data\n \
\ is being accessed. The username is not only required if the API is\n\
\ requested by an Anonymous user.\n\n**Returns**\n\n * 200 on success\
\ with above fields.\n * 400 if an invalid parameter was sent or the username\
\ was not provided\n for an authenticated request.\n * 403 if a user\
\ who does not have permission to masquerade as\n another user specifies\
\ a username other than their own.\n * 404 if the course is not available\
\ or cannot be seen.\n\n Example response:\n\n {\n \"\
blocks_url\": \"/api/courses/v1/blocks/?course_id=edX%2Fexample%2F2012_Fall\"\
,\n \"media\": {\n \"course_image\": {\n \
\ \"uri\": \"/c4x/edX/example/asset/just_a_test.jpg\",\n \
\ \"name\": \"Course Image\"\n }\n \
\ },\n \"description\": \"An example course.\",\n \"\
end\": \"2015-09-19T18:00:00Z\",\n \"enrollment_end\": \"2015-07-15T00:00:00Z\"\
,\n \"enrollment_start\": \"2015-06-15T00:00:00Z\",\n \
\ \"course_id\": \"edX/example/2012_Fall\",\n \"name\": \"Example\
\ Course\",\n \"number\": \"example\",\n \"org\": \"\
edX\",\n \"overview: \"<p>A verbose description of the course.</p>\"\
\n \"start\": \"2015-07-17T12:00:00Z\",\n \"start_display\"\
: \"July 17, 2015\",\n \"start_type\": \"timestamp\",\n \
\ \"pacing\": \"instructor\"\n }"
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/CourseDetail'
tags:
- courses
parameters:
- name: course_key_string
in: path
required: true
type: string
- name: var
in: path
required: true
type: string
/courses/v2/blocks/:
get:
operationId: courses_v2_blocks_list
summary: '**Use Case**'
description: "Returns the blocks in the course according to the requesting user's\n\
\ access level.\n\n**Example requests**:\n\n GET /api/courses/v1/blocks/?course_id=<course_id>\n\
\ GET /api/courses/v1/blocks/?course_id=<course_id>\n &username=anjali\n\
\ &depth=all\n &requested_fields=graded,format,student_view_multi_device,lti_url\n\
\ &block_counts=video\n &student_view_data=video\n &block_types_filter=problem,html\n\
\n**Parameters**:\n\n This view redirects to /api/courses/v1/blocks/<root_usage_key>/\
\ for the\n root usage key of the course specified by course_id. The view\
\ accepts\n all parameters accepted by :class:`BlocksView`, plus the following\n\
\ required parameter\n\n * course_id: (string, required) The ID of the\
\ course whose block data\n we want to return\n\n**Response Values**\n\
\n Responses are identical to those returned by :class:`BlocksView` when\n\
\ passed the root_usage_key of the requested course.\n\n If the course_id\
\ is not supplied, a 400: Bad Request is returned, with\n a message indicating\
\ that course_id is required.\n\n If an invalid course_id is supplied,\
\ a 400: Bad Request is returned,\n with a message indicating that the\
\ course_id is not valid."
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- courses
parameters: []
? /courses/v2/blocks/(P{usage_key_string}{var}|api/courses/v2/blocks/(P{usage_key_string}(:i4x://[/]+/[/]+/[/]+/[@]+(:@[/]+))|{var})
: get:
operationId: courses_v2_blocks_courses_v2_blocks__[_]+_[_]+_[_]+_[@]+(:@[_read
summary: '**Use Case**'
description: "Returns the blocks within the requested block tree according to\
\ the\n requesting user's access level.\n\n**Example requests**:\n\n \
\ GET /api/courses/v1/blocks/<root_block_usage_id>/?depth=all\n GET /api/courses/v1/blocks/<usage_id>/?\n\
\ username=anjali\n &depth=all\n &requested_fields=graded,format,student_view_multi_device,lti_url,due\n\
\ &block_counts=video\n &student_view_data=video\n &block_types_filter=problem,html\n\
\n**Parameters**:\n\n * all_blocks: (boolean) Provide a value of \"true\"\
\ to return all\n blocks. Returns all blocks only if the requesting user\
\ has course\n staff permissions. Blocks that are visible only to specific\
\ learners\n (for example, based on group membership or randomized content)\
\ are\n all included. If all_blocks is not specified, you must specify\
\ the\n username for the user whose course blocks are requested.\n\n\
\ * username: (string) Required, unless ``all_blocks`` is specified.\n\
\ Specify the username for the user whose course blocks are requested.\n\
\ Only users with course staff permissions can specify other users'\n\
\ usernames. If a username is specified, results include blocks that\n\
\ are visible to that user, including those based on group or cohort\n\
\ membership or randomized content assigned to that user.\n\n Example:\
\ username=anjali\n\n * student_view_data: (list) Indicates for which block\
\ types to return\n student_view_data.\n\n Example: student_view_data=video\n\
\n * block_counts: (list) Indicates for which block types to return the\n\
\ aggregate count of the blocks.\n\n Example: block_counts=video,problem\n\
\n * requested_fields: (list) Indicates which additional fields to return\n\
\ for each block. For a list of available fields see under `Response\n\
\ Values -> blocks`, below.\n\n The following fields are always\
\ returned: id, type, display_name\n\n Example: requested_fields=graded,format,student_view_multi_device\n\
\n * depth: (integer or all) Indicates how deep to traverse into the blocks\n\
\ hierarchy. A value of all means the entire hierarchy.\n\n Default\
\ is 0\n\n Example: depth=all\n\n * nav_depth: (integer)\n\n \
\ WARNING: nav_depth is not supported, and may be removed at any time.\n\n\
\ Indicates how far deep to traverse into the\n course hierarchy\
\ before bundling all the descendants.\n\n Default is 3 since typical\
\ navigational views of the course show a\n maximum of chapter->sequential->vertical.\n\
\n Example: nav_depth=3\n\n * return_type (string) Indicates in what\
\ data type to return the\n blocks.\n\n Default is dict. Supported\
\ values are: dict, list\n\n Example: return_type=dict\n\n * block_types_filter:\
\ (list) Requested types of blocks used to filter the final result\n \
\ of returned blocks. Possible values include sequential, vertical, html,\
\ problem,\n video, and discussion.\n\n Example: block_types_filter=vertical,html\n\
\n**Response Values**\n\n The following fields are returned with a successful\
\ response.\n\n * root: The ID of the root node of the requested course\
\ block\n structure.\n\n * blocks: A dictionary or list, based on\
\ the value of the\n \"return_type\" parameter. Maps block usage IDs\
\ to a collection of\n information about each block. Each block contains\
\ the following\n fields.\n\n * id: (string) The usage ID of the\
\ block.\n\n * type: (string) The type of block. Possible values the\
\ names of any\n XBlock type in the system, including custom blocks.\
\ Examples are\n course, chapter, sequential, vertical, html, problem,\
\ video, and\n discussion.\n\n * display_name: (string) The display\
\ name of the block.\n\n * children: (list) If the block has child blocks,\
\ a list of IDs of\n the child blocks. Returned only if \"children\"\
\ is included in the\n \"requested_fields\" parameter.\n\n * completion:\
\ (float or None) The level of completion of the block.\n Its value\
\ can vary between 0.0 and 1.0 or be equal to None\n if block is not\
\ completable. Returned only if \"completion\"\n is included in the\
\ \"requested_fields\" parameter.\n\n * block_counts: (dict) For each\
\ block type specified in the\n block_counts parameter to the endpoint,\
\ the aggregate number of\n blocks of that type for this block and\
\ all of its descendants.\n\n * graded (boolean) Whether or not the block\
\ or any of its descendants\n is graded. Returned only if \"graded\"\
\ is included in the\n \"requested_fields\" parameter.\n\n * format:\
\ (string) The assignment type of the block. Possible values\n can\
\ be \"Homework\", \"Lab\", \"Midterm Exam\", and \"Final Exam\".\n \
\ Returned only if \"format\" is included in the \"requested_fields\"\n \
\ parameter.\n\n * student_view_data: (dict) The JSON data for\
\ this block.\n Returned only if the \"student_view_data\" input parameter\
\ contains\n this block's type.\n\n * student_view_url: (string)\
\ The URL to retrieve the HTML rendering\n of this block's student\
\ view. The HTML could include CSS and\n Javascript code. This field\
\ can be used in combination with the\n student_view_multi_device field\
\ to decide whether to display this\n content to the user.\n\n \
\ This URL can be used as a fallback if the student_view_data for\n \
\ this block type is not supported by the client or the block.\n\n \
\ * student_view_multi_device: (boolean) Whether or not the HTML of\n \
\ the student view that is rendered at \"student_view_url\" supports\n\
\ responsive web layouts, touch-based inputs, and interactive state\n\
\ management for a variety of device sizes and types, including\n \
\ mobile and touch devices. Returned only if\n \"student_view_multi_device\"\
\ is included in the \"requested_fields\"\n parameter.\n\n * lms_web_url:\
\ (string) The URL to the navigational container of the\n xBlock on\
\ the web LMS. This URL can be used as a further fallback\n if the\
\ student_view_url and the student_view_data fields are not\n supported.\n\
\n * lti_url: The block URL for an LTI consumer. Returned only if the\n\
\ \"ENABLE_LTI_PROVIDER\" Django settign is set to \"True\".\n\n \
\ * due: The due date of the block. Returned only if \"due\" is included\n\
\ in the \"requested_fields\" parameter.\n\n * show_correctness:\
\ Whether to show scores/correctness to learners for the current sequence\
\ or problem.\n Returned only if \"show_correctness\" is included in\
\ the \"requested_fields\" parameter."
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- courses
parameters:
- name: usage_key_string
in: path
required: true
type: string
- name: var
in: path
required: true
type: string
/credit/v1/courses/:
get:
operationId: credit_v1_courses_list
description: CreditCourse endpoints.
parameters: []
responses:
'200':
description: ''
schema:
type: array
items:
$ref: '#/definitions/CreditCourse'
tags:
- credit
post:
operationId: credit_v1_courses_create
description: CreditCourse endpoints.
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/CreditCourse'
responses:
'201':
description: ''
schema:
$ref: '#/definitions/CreditCourse'
tags:
- credit
parameters: []
/credit/v1/courses/{course_key}/:
get:
operationId: credit_v1_courses_read
description: CreditCourse endpoints.
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/CreditCourse'
tags:
- credit
put:
operationId: credit_v1_courses_update
description: Create/update course modes for a course.
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/CreditCourse'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/CreditCourse'
tags:
- credit
patch:
operationId: credit_v1_courses_partial_update
description: CreditCourse endpoints.
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/CreditCourse'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/CreditCourse'
tags:
- credit
parameters:
- name: course_key
in: path
required: true
type: string
pattern: (?:[^/+]+(/|\+)[^/+]+(/|\+)[^/?]+)
/credit/v1/eligibility/:
get:
operationId: credit_v1_eligibility_list
description: Returns eligibility for a user-course combination.
parameters: []
responses:
'200':
description: ''
schema:
type: array
items:
$ref: '#/definitions/CreditEligibility'
tags:
- credit
parameters: []
/credit/v1/providers/:
get:
operationId: credit_v1_providers_list
description: Credit provider endpoints.
parameters: []
responses:
'200':
description: ''
schema:
type: array
items:
$ref: '#/definitions/CreditProvider'
tags:
- credit
parameters: []
/credit/v1/providers/{provider_id}/:
get:
operationId: credit_v1_providers_read
description: Credit provider endpoints.
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/CreditProvider'
tags:
- credit
parameters:
- name: provider_id
in: path
description: Unique identifier for this credit provider. Only alphanumeric
characters and hyphens (-) are allowed. The identifier is case-sensitive.
required: true
type: string
pattern: '[a-z,A-Z,0-9,\-]+'
/credit/v1/providers/{provider_id}/callback/:
post:
operationId: credit_v1_providers_callback_create
description: POST handler.
parameters: []
responses:
'201':
description: ''
tags:
- credit
parameters:
- name: provider_id
in: path
required: true
type: string
/credit/v1/providers/{provider_id}/request/:
post:
operationId: credit_v1_providers_request_create
description: POST handler.
parameters: []
responses:
'201':
description: ''
tags:
- credit
parameters:
- name: provider_id
in: path
required: true
type: string
/discounts/course/(P{course_key_string}[/+]+{var}[/+]+api/discounts/course/(P{course_key_string}[/+]+(/|+)[/+]+{var}[/]+):
get:
operationId: discounts_course_+]+api_discounts_course_+]+(_|+)[_]+)_list
description: Return the discount percent, if the user has appropriate permissions.
parameters: []
responses:
'200':
description: ''
tags:
- discounts
parameters:
- name: course_key_string
in: path
required: true
type: string
- name: var
in: path
required: true
type: string
? /discounts/user/{user_id}/course/(P{course_key_string}[/+]+{var}[/+]+api/discounts/user/{user_id}/course/(P{course_key_string}[/+]+(/|+)[/+]+{var}[/]+)
: get:
operationId: discounts_user_course_+]+api_discounts_user_course_+]+(_|+)[_]+)_list
description: Return the discount percent, if the user has appropriate permissions.
parameters: []
responses:
'200':
description: ''
tags:
- discounts
parameters:
- name: course_key_string
in: path
required: true
type: string
- name: user_id
in: path
required: true
type: string
- name: var
in: path
required: true
type: string
/discussion/v1/accounts/replace_username:
post:
operationId: discussion_v1_accounts_replace_username_create
description: Implements the username replacement endpoint
parameters: []
responses:
'201':
description: ''
tags:
- discussion
parameters: []
/discussion/v1/accounts/retire_forum:
post:
operationId: discussion_v1_accounts_retire_forum_create
description: Implements the retirement endpoint.
parameters: []
responses:
'201':
description: ''
tags:
- discussion
parameters: []
/discussion/v1/comments/:
get:
operationId: discussion_v1_comments_list
description: "Implements the GET method for the list endpoint as described in\
\ the\nclass docstring."
parameters: []
responses:
'200':
description: ''
consumes:
- application/json
- application/merge-patch+json
tags:
- discussion
post:
operationId: discussion_v1_comments_create
description: "Implements the POST method for the list endpoint as described\
\ in the\nclass docstring."
parameters: []
responses:
'201':
description: ''
consumes:
- application/json
- application/merge-patch+json
tags:
- discussion
parameters: []
/discussion/v1/comments/{comment_id}/:
get:
operationId: discussion_v1_comments_read
description: Implements the GET method for comments against response ID
parameters: []
responses:
'200':
description: ''
consumes:
- application/json
- application/merge-patch+json
tags:
- discussion
patch:
operationId: discussion_v1_comments_partial_update
description: "Implements the PATCH method for the instance endpoint as described\
\ in\nthe class docstring."
parameters: []
responses:
'200':
description: ''
consumes:
- application/json
- application/merge-patch+json
tags:
- discussion
delete:
operationId: discussion_v1_comments_delete
description: "Implements the DELETE method for the instance endpoint as described\
\ in\nthe class docstring"
parameters: []
responses:
'204':
description: ''
consumes:
- application/json
- application/merge-patch+json
tags:
- discussion
parameters:
- name: comment_id
in: path
required: true
type: string
? /discussion/v1/course_topics/(P{course_id}[/+]+{var}[/+]+api/discussion/v1/course_topics/(P{course_id}[/+]+(/|+)[/+]+{var}[/]+)
: get:
operationId: discussion_v1_course_topics_+]+api_discussion_v1_course_topics_+]+(_|+)[_]+)_list
description: Implements the GET method as described in the class docstring.
parameters: []
responses:
'200':
description: ''
tags:
- discussion
parameters:
- name: course_id
in: path
required: true
type: string
- name: var
in: path
required: true
type: string
/discussion/v1/courses/(P{course_id}[/+]+{var}[/+]+api/discussion/v1/courses/(P{course_id}[/+]+(/|+)[/+]+{var}[/]+):
get:
operationId: discussion_v1_courses_+]+api_discussion_v1_courses_+]+(_|+)[_]+)_list
description: Implements the GET method as described in the class docstring.
parameters: []
responses:
'200':
description: ''
tags:
- discussion
parameters:
- name: course_id
in: path
required: true
type: string
- name: var
in: path
required: true
type: string
/discussion/v1/courses/{course_id}/roles/{rolename}/:
get:
operationId: discussion_v1_courses_roles_read
description: Implement a handler for the GET method.
parameters: []
responses:
'200':
description: ''
tags:
- discussion
post:
operationId: discussion_v1_courses_roles_create
description: Implement a handler for the POST method.
parameters: []
responses:
'201':
description: ''
tags:
- discussion
parameters:
- name: course_id
in: path
required: true
type: string
- name: rolename
in: path
required: true
type: string
/discussion/v1/courses/{course_id}/settings:
get:
operationId: discussion_v1_courses_settings_list
description: Implement a handler for the GET method.
parameters: []
responses:
'200':
description: ''
consumes:
- application/json
- application/merge-patch+json
tags:
- discussion
patch:
operationId: discussion_v1_courses_settings_partial_update
description: Implement a handler for the PATCH method.
parameters: []
responses:
'200':
description: ''
consumes:
- application/json
- application/merge-patch+json
tags:
- discussion
parameters:
- name: course_id
in: path
required: true
type: string
/discussion/v1/threads/:
get:
operationId: discussion_v1_threads_list
description: "Implements the GET method for the list endpoint as described in\
\ the\nclass docstring."
parameters: []
responses:
'200':
description: ''
consumes:
- application/json
- application/merge-patch+json
tags:
- discussion
post:
operationId: discussion_v1_threads_create
description: "Implements the POST method for the list endpoint as described\
\ in the\nclass docstring."
parameters: []
responses:
'201':
description: ''
consumes:
- application/json
- application/merge-patch+json
tags:
- discussion
parameters: []
/discussion/v1/threads/{thread_id}/:
get:
operationId: discussion_v1_threads_read
description: Implements the GET method for thread ID
parameters: []
responses:
'200':
description: ''
consumes:
- application/json
- application/merge-patch+json
tags:
- discussion
patch:
operationId: discussion_v1_threads_partial_update
description: "Implements the PATCH method for the instance endpoint as described\
\ in\nthe class docstring."
parameters: []
responses:
'200':
description: ''
consumes:
- application/json
- application/merge-patch+json
tags:
- discussion
delete:
operationId: discussion_v1_threads_delete
description: "Implements the DELETE method for the instance endpoint as described\
\ in\nthe class docstring"
parameters: []
responses:
'204':
description: ''
consumes:
- application/json
- application/merge-patch+json
tags:
- discussion
parameters:
- name: thread_id
in: path
required: true
type: string
/edx_proctoring/proctoring_review_callback/:
post:
operationId: edx_proctoring_proctoring_review_callback_create
description: Post callback handler
parameters: []
responses:
'201':
description: ''
tags:
- edx_proctoring
parameters: []
/edx_proctoring/v1/instructor/{course_id}:
get:
operationId: edx_proctoring_v1_instructor_read
description: Redirect to dashboard for a given course and optional exam_id
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
parameters:
- name: course_id
in: path
required: true
type: string
/edx_proctoring/v1/instructor/{course_id}/{exam_id}:
get:
operationId: edx_proctoring_v1_instructor_read
description: Redirect to dashboard for a given course and optional exam_id
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
parameters:
- name: course_id
in: path
required: true
type: string
- name: exam_id
in: path
required: true
type: string
/edx_proctoring/v1/proctored_exam/active_exams_for_user:
get:
operationId: edx_proctoring_v1_proctored_exam_active_exams_for_user_list
description: returns the get_active_exams_for_user
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
parameters: []
/edx_proctoring/v1/proctored_exam/allowance:
get:
operationId: edx_proctoring_v1_proctored_exam_allowance_list
description: "HTTP GET handler. Get all allowances for a course.\nCourse and\
\ Global staff can view both timed and proctored exam allowances."
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
put:
operationId: edx_proctoring_v1_proctored_exam_allowance_update
description: HTTP GET handler. Adds or updates Allowance
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
delete:
operationId: edx_proctoring_v1_proctored_exam_allowance_delete
description: HTTP DELETE handler. Removes Allowance.
parameters: []
responses:
'204':
description: ''
tags:
- edx_proctoring
parameters: []
/edx_proctoring/v1/proctored_exam/attempt:
get:
operationId: edx_proctoring_v1_proctored_exam_attempt_list
description: HTTP GET Handler. Returns the status of the exam attempt.
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
post:
operationId: edx_proctoring_v1_proctored_exam_attempt_create
description: HTTP POST handler. To create an exam attempt.
parameters: []
responses:
'201':
description: ''
tags:
- edx_proctoring
parameters: []
/edx_proctoring/v1/proctored_exam/attempt/course_id/{course_id}:
get:
operationId: edx_proctoring_v1_proctored_exam_attempt_course_id_read
description: "HTTP GET Handler. Returns the status of the exam attempt.\nCourse\
\ and Global staff can view both timed and proctored exam attempts."
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
parameters:
- name: course_id
in: path
required: true
type: string
/edx_proctoring/v1/proctored_exam/attempt/course_id/{course_id}/search/{search_by}:
get:
operationId: edx_proctoring_v1_proctored_exam_attempt_course_id_search_read
description: "HTTP GET Handler. Returns the status of the exam attempt.\nCourse\
\ and Global staff can view both timed and proctored exam attempts."
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
parameters:
- name: course_id
in: path
required: true
type: string
- name: search_by
in: path
required: true
type: string
/edx_proctoring/v1/proctored_exam/attempt/{attempt_id}:
get:
operationId: edx_proctoring_v1_proctored_exam_attempt_read
description: HTTP GET Handler. Returns the status of the exam attempt.
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
put:
operationId: edx_proctoring_v1_proctored_exam_attempt_update
description: HTTP POST handler. To stop an exam.
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
delete:
operationId: edx_proctoring_v1_proctored_exam_attempt_delete
description: HTTP DELETE handler. Removes an exam attempt.
parameters: []
responses:
'204':
description: ''
tags:
- edx_proctoring
parameters:
- name: attempt_id
in: path
required: true
type: string
/edx_proctoring/v1/proctored_exam/attempt/{attempt_id}/review_status:
put:
operationId: edx_proctoring_v1_proctored_exam_attempt_review_status_update
description: Update the is_status_acknowledge flag for the specific attempt
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
parameters:
- name: attempt_id
in: path
required: true
type: string
/edx_proctoring/v1/proctored_exam/attempt/{external_id}/ready:
post:
operationId: edx_proctoring_v1_proctored_exam_attempt_ready_create
description: Post callback handler
parameters: []
responses:
'201':
description: ''
tags:
- edx_proctoring
parameters:
- name: external_id
in: path
required: true
type: string
/edx_proctoring/v1/proctored_exam/attempt/{external_id}/reviewed:
post:
operationId: edx_proctoring_v1_proctored_exam_attempt_reviewed_create
description: "Called when 3rd party proctoring service has finished its review\
\ of\nan attempt."
parameters: []
responses:
'201':
description: ''
tags:
- edx_proctoring
parameters:
- name: external_id
in: path
required: true
type: string
/edx_proctoring/v1/proctored_exam/exam:
get:
operationId: edx_proctoring_v1_proctored_exam_exam_list
description: "HTTP GET handler.\n Scenarios:\n by exam_id: calls get_exam_by_id()\n\
\ by course_id, content_id: get_exam_by_content_id()"
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
post:
operationId: edx_proctoring_v1_proctored_exam_exam_create
description: Http POST handler. Creates an exam.
parameters: []
responses:
'201':
description: ''
tags:
- edx_proctoring
put:
operationId: edx_proctoring_v1_proctored_exam_exam_update
description: "HTTP PUT handler. To update an exam.\ncalls the update_exam"
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
parameters: []
/edx_proctoring/v1/proctored_exam/exam/course_id/{course_id}:
get:
operationId: edx_proctoring_v1_proctored_exam_exam_course_id_read
description: "HTTP GET handler.\n Scenarios:\n by exam_id: calls get_exam_by_id()\n\
\ by course_id, content_id: get_exam_by_content_id()"
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
post:
operationId: edx_proctoring_v1_proctored_exam_exam_course_id_create
description: Http POST handler. Creates an exam.
parameters: []
responses:
'201':
description: ''
tags:
- edx_proctoring
put:
operationId: edx_proctoring_v1_proctored_exam_exam_course_id_update
description: "HTTP PUT handler. To update an exam.\ncalls the update_exam"
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
parameters:
- name: course_id
in: path
required: true
type: string
/edx_proctoring/v1/proctored_exam/exam/course_id/{course_id}/content_id/{content_id}:
get:
operationId: edx_proctoring_v1_proctored_exam_exam_course_id_content_id_read
description: "HTTP GET handler.\n Scenarios:\n by exam_id: calls get_exam_by_id()\n\
\ by course_id, content_id: get_exam_by_content_id()"
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
post:
operationId: edx_proctoring_v1_proctored_exam_exam_course_id_content_id_create
description: Http POST handler. Creates an exam.
parameters: []
responses:
'201':
description: ''
tags:
- edx_proctoring
put:
operationId: edx_proctoring_v1_proctored_exam_exam_course_id_content_id_update
description: "HTTP PUT handler. To update an exam.\ncalls the update_exam"
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
parameters:
- name: content_id
in: path
required: true
type: string
- name: course_id
in: path
required: true
type: string
/edx_proctoring/v1/proctored_exam/exam/exam_id/{exam_id}:
get:
operationId: edx_proctoring_v1_proctored_exam_exam_exam_id_read
description: "HTTP GET handler.\n Scenarios:\n by exam_id: calls get_exam_by_id()\n\
\ by course_id, content_id: get_exam_by_content_id()"
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
post:
operationId: edx_proctoring_v1_proctored_exam_exam_exam_id_create
description: Http POST handler. Creates an exam.
parameters: []
responses:
'201':
description: ''
tags:
- edx_proctoring
put:
operationId: edx_proctoring_v1_proctored_exam_exam_exam_id_update
description: "HTTP PUT handler. To update an exam.\ncalls the update_exam"
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
parameters:
- name: exam_id
in: path
required: true
type: string
/edx_proctoring/v1/proctored_exam/{course_id}/allowance:
get:
operationId: edx_proctoring_v1_proctored_exam_allowance_list
description: "HTTP GET handler. Get all allowances for a course.\nCourse and\
\ Global staff can view both timed and proctored exam allowances."
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
put:
operationId: edx_proctoring_v1_proctored_exam_allowance_update
description: HTTP GET handler. Adds or updates Allowance
parameters: []
responses:
'200':
description: ''
tags:
- edx_proctoring
delete:
operationId: edx_proctoring_v1_proctored_exam_allowance_delete
description: HTTP DELETE handler. Removes Allowance.
parameters: []
responses:
'204':
description: ''
tags:
- edx_proctoring
parameters:
- name: course_id
in: path
required: true
type: string
/edx_proctoring/v1/retire_backend_user/{user_id}/:
post:
operationId: edx_proctoring_v1_retire_backend_user_create
description: "Deletes all user data for the particular user_id\nfrom all configured\
\ backends"
parameters: []
responses:
'201':
description: ''
tags:
- edx_proctoring
parameters:
- name: user_id
in: path
required: true
type: string
/edxnotes/v1/retire_user/:
post:
operationId: edxnotes_v1_retire_user_create
description: Implements the retirement endpoint.
parameters: []
responses:
'201':
description: ''
tags:
- edxnotes
parameters: []
/embargo/v1/course_access/:
get:
operationId: embargo_v1_course_access_list
summary: GET /api/embargo/v1/course_access/
description: "Arguments:\n request (HttpRequest)\n\nReturn:\n Response:\
\ True or False depending on the check."
parameters: []
responses:
'200':
description: ''
tags:
- embargo
parameters: []
/enrollment/v1/course/{course_id}:
get:
operationId: enrollment_v1_course_read
summary: Read enrollment information for a particular course.
description: "HTTP Endpoint for retrieving course level enrollment information.\n\
\nArgs:\n request (Request): To get current course enrollment information,\
\ a GET request will return\n information for the specified course.\n\
\ course_id (str): URI element specifying the course location. Enrollment\
\ information will be\n returned.\n\nReturn:\n A JSON serialized\
\ representation of the course enrollment details."
parameters: []
responses:
'200':
description: ''
tags:
- enrollment
parameters:
- name: course_id
in: path
required: true
type: string
/enrollment/v1/enrollment:
get:
operationId: enrollment_v1_enrollment_list
summary: Gets a list of all course enrollments for a user.
description: "Returns a list for the currently logged in user, or for the user\
\ named by the 'user' GET\nparameter. If the username does not match that\
\ of the currently logged in user, only\ncourses for which the currently logged\
\ in user has the Staff or Admin role are listed.\nAs a result, a course team\
\ member can find out which of his or her own courses a particular\nlearner\
\ is enrolled in.\n\nOnly the Staff or Admin role (granted on the Django administrative\
\ console as the staff\nor instructor permission) in individual courses gives\
\ the requesting user access to\nenrollment data. Permissions granted at the\
\ organizational level do not give a user\naccess to enrollment data for all\
\ of that organization's courses.\n\nUsers who have the global staff permission\
\ can access all enrollment data for all\ncourses."
parameters: []
responses:
'200':
description: ''
tags:
- enrollment
post:
operationId: enrollment_v1_enrollment_create
summary: Enrolls the currently logged-in user in a course.
description: "Server-to-server calls may deactivate or modify the mode of existing\
\ enrollments. All other requests\ngo through `add_enrollment()`, which allows\
\ creation of new and reactivation of old enrollments."
parameters: []
responses:
'201':
description: ''
tags:
- enrollment
parameters: []
/enrollment/v1/enrollment/{course_id}:
get:
operationId: enrollment_v1_enrollment_read
summary: Create, read, or update enrollment information for a user.
description: "HTTP Endpoint for all CRUD operations for a user course enrollment.\
\ Allows creation, reading, and\nupdates of the current enrollment for a particular\
\ course.\n\nArgs:\n request (Request): To get current course enrollment\
\ information, a GET request will return\n information for the current\
\ user and the specified course.\n course_id (str): URI element specifying\
\ the course location. Enrollment information will be\n returned, created,\
\ or updated for this particular course.\n username (str): The username\
\ associated with this enrollment request.\n\nReturn:\n A JSON serialized\
\ representation of the course enrollment."
parameters: []
responses:
'200':
description: ''
tags:
- enrollment
parameters:
- name: course_id
in: path
required: true
type: string
/enrollment/v1/enrollment/{username},{course_id}:
get:
operationId: enrollment_v1_enrollment_read
summary: Create, read, or update enrollment information for a user.
description: "HTTP Endpoint for all CRUD operations for a user course enrollment.\
\ Allows creation, reading, and\nupdates of the current enrollment for a particular\
\ course.\n\nArgs:\n request (Request): To get current course enrollment\
\ information, a GET request will return\n information for the current\
\ user and the specified course.\n course_id (str): URI element specifying\
\ the course location. Enrollment information will be\n returned, created,\
\ or updated for this particular course.\n username (str): The username\
\ associated with this enrollment request.\n\nReturn:\n A JSON serialized\
\ representation of the course enrollment."
parameters: []
responses:
'200':
description: ''
tags:
- enrollment
parameters:
- name: course_id
in: path
required: true
type: string
- name: username
in: path
required: true
type: string
/enrollment/v1/enrollments/:
get:
operationId: enrollment_v1_enrollments_list
summary: '**Use Cases**'
description: "Get a list of all course enrollments, optionally filtered by a\
\ course ID or list of usernames.\n\n**Example Requests**\n\n GET /api/enrollment/v1/enrollments\n\
\n GET /api/enrollment/v1/enrollments?course_id={course_id}\n\n GET\
\ /api/enrollment/v1/enrollments?username={username},{username},{username}\n\
\n GET /api/enrollment/v1/enrollments?course_id={course_id}&username={username}\n\
\n**Query Parameters for GET**\n\n * course_id: Filters the result to course\
\ enrollments for the course corresponding to the\n given course ID.\
\ The value must be URL encoded. Optional.\n\n * username: List of comma-separated\
\ usernames. Filters the result to the course enrollments\n of the given\
\ users. Optional.\n\n * page_size: Number of results to return per page.\
\ Optional.\n\n * page: Page number to retrieve. Optional.\n\n**Response\
\ Values**\n\n If the request for information about the course enrollments\
\ is successful, an HTTP 200 \"OK\" response\n is returned.\n\n The\
\ HTTP 200 response has the following values.\n\n * results: A list of\
\ the course enrollments matching the request.\n\n * created: Date\
\ and time when the course enrollment was created.\n\n * mode: Mode\
\ for the course enrollment.\n\n * is_active: Whether the course enrollment\
\ is active or not.\n\n * user: Username of the user in the course\
\ enrollment.\n\n * course_id: Course ID of the course in the course\
\ enrollment.\n\n * next: The URL to the next page of results, or null\
\ if this is the\n last page.\n\n * previous: The URL to the next\
\ page of results, or null if this\n is the first page.\n\n If the\
\ user is not logged in, a 401 error is returned.\n\n If the user is not\
\ global staff, a 403 error is returned.\n\n If the specified course_id\
\ is not valid or any of the specified usernames\n are not valid, a 400\
\ error is returned.\n\n If the specified course_id does not correspond\
\ to a valid course or if all the specified\n usernames do not correspond\
\ to valid users, an HTTP 200 \"OK\" response is returned with an\n empty\
\ 'results' field."
parameters:
- name: cursor
in: query
description: The pagination cursor value.
required: false
type: string
responses:
'200':
description: ''
schema:
required:
- results
type: object
properties:
next:
type: string
format: uri
x-nullable: true
previous:
type: string
format: uri
x-nullable: true
results:
type: array
items:
$ref: '#/definitions/CourseEnrollmentsApiList'
tags:
- enrollment
parameters: []
/enrollment/v1/roles/:
get:
operationId: enrollment_v1_roles_list
description: Gets a list of all roles for the currently logged-in user, filtered
by course_id if supplied
parameters: []
responses:
'200':
description: ''
tags:
- enrollment
parameters: []
/enrollment/v1/unenroll/:
post:
operationId: enrollment_v1_unenroll_create
description: Unenrolls the specified user from all courses.
parameters: []
responses:
'201':
description: ''
tags:
- enrollment
parameters: []
/entitlements/v1/entitlements/:
get:
operationId: entitlements_v1_entitlements_list
description: "Override the list method to expire records that are past the\n\
policy and requested via the API before returning those records."
parameters:
- name: uuid
in: query
description: ''
required: false
type: string
- name: user
in: query
description: ''
required: false
type: string
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
schema:
required:
- count
- results
type: object
properties:
count:
type: integer
next:
type: string
format: uri
x-nullable: true
previous:
type: string
format: uri
x-nullable: true
results:
type: array
items:
$ref: '#/definitions/CourseEntitlement'
tags:
- entitlements
post:
operationId: entitlements_v1_entitlements_create
description: ''
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/CourseEntitlement'
responses:
'201':
description: ''
schema:
$ref: '#/definitions/CourseEntitlement'
tags:
- entitlements
parameters: []
/entitlements/v1/entitlements/{uuid}/:
get:
operationId: entitlements_v1_entitlements_read
description: "Override the retrieve method to expire a record that is past the\n\
policy and is requested via the API before returning that record."
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/CourseEntitlement'
tags:
- entitlements
put:
operationId: entitlements_v1_entitlements_update
description: ''
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/CourseEntitlement'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/CourseEntitlement'
tags:
- entitlements
patch:
operationId: entitlements_v1_entitlements_partial_update
description: ''
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/CourseEntitlement'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/CourseEntitlement'
tags:
- entitlements
delete:
operationId: entitlements_v1_entitlements_delete
description: ''
parameters: []
responses:
'204':
description: ''
tags:
- entitlements
parameters:
- name: uuid
in: path
required: true
type: string
pattern: '[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}'
/experiments/v0/data/:
get:
operationId: experiments_v0_data_list
description: ''
parameters:
- name: experiment_id
in: query
description: ''
required: false
type: number
- name: key
in: query
description: ''
required: false
type: string
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
schema:
required:
- count
- results
type: object
properties:
count:
type: integer
next:
type: string
format: uri
x-nullable: true
previous:
type: string
format: uri
x-nullable: true
results:
type: array
items:
$ref: '#/definitions/ExperimentData'
tags:
- experiments
post:
operationId: experiments_v0_data_create
description: ''
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/ExperimentDataCreate'
responses:
'201':
description: ''
schema:
$ref: '#/definitions/ExperimentDataCreate'
tags:
- experiments
put:
operationId: experiments_v0_data_update
description: ''
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/ExperimentData'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/ExperimentData'
tags:
- experiments
parameters: []
/experiments/v0/data/bulk_upsert/:
put:
operationId: experiments_v0_data_bulk_upsert
description: ''
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/ExperimentData'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/ExperimentData'
tags:
- experiments
parameters: []
/experiments/v0/data/{id}/:
get:
operationId: experiments_v0_data_read
description: ''
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/ExperimentData'
tags:
- experiments
put:
operationId: experiments_v0_data_update
description: ''
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/ExperimentData'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/ExperimentData'
tags:
- experiments
patch:
operationId: experiments_v0_data_partial_update
description: ''
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/ExperimentData'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/ExperimentData'
tags:
- experiments
delete:
operationId: experiments_v0_data_delete
description: ''
parameters: []
responses:
'204':
description: ''
tags:
- experiments
parameters:
- name: id
in: path
description: A unique integer value identifying this Experiment Data.
required: true
type: integer
/experiments/v0/key-value/:
get:
operationId: experiments_v0_key-value_list
description: ''
parameters:
- name: experiment_id
in: query
description: ''
required: false
type: number
- name: key
in: query
description: ''
required: false
type: string
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
schema:
required:
- count
- results
type: object
properties:
count:
type: integer
next:
type: string
format: uri
x-nullable: true
previous:
type: string
format: uri
x-nullable: true
results:
type: array
items:
$ref: '#/definitions/ExperimentKeyValue'
tags:
- experiments
post:
operationId: experiments_v0_key-value_create
description: ''
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/ExperimentKeyValue'
responses:
'201':
description: ''
schema:
$ref: '#/definitions/ExperimentKeyValue'
tags:
- experiments
parameters: []
/experiments/v0/key-value/bulk_upsert/:
put:
operationId: experiments_v0_key-value_bulk_upsert
description: ''
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/ExperimentKeyValue'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/ExperimentKeyValue'
tags:
- experiments
parameters: []
/experiments/v0/key-value/{id}/:
get:
operationId: experiments_v0_key-value_read
description: ''
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/ExperimentKeyValue'
tags:
- experiments
put:
operationId: experiments_v0_key-value_update
description: ''
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/ExperimentKeyValue'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/ExperimentKeyValue'
tags:
- experiments
patch:
operationId: experiments_v0_key-value_partial_update
description: ''
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/ExperimentKeyValue'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/ExperimentKeyValue'
tags:
- experiments
delete:
operationId: experiments_v0_key-value_delete
description: ''
parameters: []
responses:
'204':
description: ''
tags:
- experiments
parameters:
- name: id
in: path
description: A unique integer value identifying this Experiment Key-Value
Pair.
required: true
type: integer
/grades/v1/courses/:
get:
operationId: grades_v1_courses_list
description: "Gets a course progress status.\nArgs:\n request (Request):\
\ Django request object.\n course_id (string): URI element specifying the\
\ course location.\n Can also be passed as a GET parameter\
\ instead.\nReturn:\n A JSON serialized representation of the requesting\
\ user's current grade status."
parameters:
- name: cursor
in: query
description: The pagination cursor value.
required: false
type: string
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- grades
parameters: []
/grades/v1/courses/{course_id}/:
get:
operationId: grades_v1_courses_read
description: "Gets a course progress status.\nArgs:\n request (Request):\
\ Django request object.\n course_id (string): URI element specifying the\
\ course location.\n Can also be passed as a GET parameter\
\ instead.\nReturn:\n A JSON serialized representation of the requesting\
\ user's current grade status."
parameters: []
responses:
'200':
description: ''
tags:
- grades
parameters:
- name: course_id
in: path
required: true
type: string
/grades/v1/gradebook/{course_id}/:
get:
operationId: grades_v1_gradebook_read
description: "Checks for course author access for the given course by the requesting\
\ user.\nCalls the view function if has access, otherwise raises a 403."
parameters: []
responses:
'200':
description: ''
tags:
- grades
parameters:
- name: course_id
in: path
required: true
type: string
/grades/v1/gradebook/{course_id}/bulk-update:
post:
operationId: grades_v1_gradebook_bulk-update_create
description: "Checks for course author access for the given course by the requesting\
\ user.\nCalls the view function if has access, otherwise raises a 403."
parameters: []
responses:
'201':
description: ''
tags:
- grades
parameters:
- name: course_id
in: path
required: true
type: string
/grades/v1/gradebook/{course_id}/grading-info:
get:
operationId: grades_v1_gradebook_grading-info_list
description: "Checks for course author access for the given course by the requesting\
\ user.\nCalls the view function if has access, otherwise raises a 403."
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- grades
parameters:
- name: course_id
in: path
required: true
type: string
/grades/v1/policy/courses/{course_id}/:
get:
operationId: grades_v1_policy_courses_read
summary: '**Use Case**'
description: "Get the course grading policy.\n\n**Example requests**:\n\n \
\ GET /api/grades/v1/policy/courses/{course_id}/\n\n**Response Values**\n\
\n * assignment_type: The type of the assignment, as configured by course\n\
\ staff. For example, course staff might make the assignment types Homework,\n\
\ Quiz, and Exam.\n\n * count: The number of assignments of the type.\n\
\n * dropped: Number of assignments of the type that are dropped.\n\n \
\ * weight: The weight, or effect, of the assignment type on the learner's\n\
\ final grade."
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- grades
parameters:
- name: course_id
in: path
required: true
type: string
/grades/v1/subsection/{subsection_id}/:
get:
operationId: grades_v1_subsection_read
description: "Returns subection grade data, override grade data and a history\
\ of changes made to\na specific users specific subsection grade.\n\nArgs:\n\
\ subsection_id: String representation of a usage_key, which is an opaque\
\ key of\n a persistant subection grade.\n user_id: An integer represenation\
\ of a user"
parameters: []
responses:
'200':
description: ''
tags:
- grades
parameters:
- name: subsection_id
in: path
required: true
type: string
/mobile/{api_version}/course_info/{course_id}/handouts:
get:
operationId: mobile_course_info_handouts_list
summary: '**Use Case**'
description: "Get the HTML for course handouts.\n\n**Example Request**\n\n \
\ GET /api/mobile/v0.5/course_info/{course_id}/handouts\n\n**Response Values**\n\
\n If the request is successful, the request returns an HTTP 200 \"OK\"\
\n response along with the following value.\n\n * handouts_html: The\
\ HTML for course handouts."
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- mobile
parameters:
- name: api_version
in: path
required: true
type: string
- name: course_id
in: path
required: true
type: string
/mobile/{api_version}/course_info/{course_id}/updates:
get:
operationId: mobile_course_info_updates_list
summary: '**Use Case**'
description: "Get the content for course updates.\n\n**Example Request**\n\n\
\ GET /api/mobile/v0.5/course_info/{course_id}/updates\n\n**Response Values**\n\
\n If the request is successful, the request returns an HTTP 200 \"OK\"\
\n response along with an array of course updates. Each course update\n\
\ contains the following values.\n\n * content: The content, as\
\ an HTML string, of the course update.\n * date: The date of the course\
\ update.\n * id: The unique identifier of the update.\n * status:\
\ Whether the update is visible or not."
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- mobile
parameters:
- name: api_version
in: path
required: true
type: string
- name: course_id
in: path
required: true
type: string
/mobile/{api_version}/my_user_info:
get:
operationId: mobile_my_user_info_list
description: Redirect to the currently-logged-in user's info page
parameters: []
responses:
'200':
description: ''
tags:
- mobile
parameters:
- name: api_version
in: path
required: true
type: string
/mobile/{api_version}/users/{username}:
get:
operationId: mobile_users_read
summary: '**Use Case**'
description: "Get information about the specified user and access other resources\n\
\ the user has permissions for.\n\n Users are redirected to this endpoint\
\ after they sign in.\n\n You can use the **course_enrollments** value\
\ in the response to get a\n list of courses the user is enrolled in.\n\
\n**Example Request**\n\n GET /api/mobile/{version}/users/{username}\n\n\
**Response Values**\n\n If the request is successful, the request returns\
\ an HTTP 200 \"OK\" response.\n\n The HTTP 200 response has the following\
\ values.\n\n * course_enrollments: The URI to list the courses the currently\
\ signed\n in user is enrolled in.\n * email: The email address of\
\ the currently signed in user.\n * id: The ID of the user.\n * name:\
\ The full name of the currently signed in user.\n * username: The username\
\ of the currently signed in user."
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/mobile_api.User'
tags:
- mobile
parameters:
- name: api_version
in: path
required: true
type: string
- name: username
in: path
description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
only.
required: true
type: string
pattern: ^[\w.@+-]+$
/mobile/{api_version}/users/{username}/course_enrollments/:
get:
operationId: mobile_users_course_enrollments_list
summary: '**Use Case**'
description: "Get information about the courses that the currently signed in\
\ user is\n enrolled in.\n\n v1 differs from v0.5 version by returning\
\ ALL enrollments for\n a user rather than only the enrollments the user\
\ has access to (that haven't expired).\n An additional attribute \"expiration\"\
\ has been added to the response, which lists the date\n when access to\
\ the course will expire or null if it doesn't expire.\n\n**Example Request**\n\
\n GET /api/mobile/v1/users/{username}/course_enrollments/\n\n**Response\
\ Values**\n\n If the request for information about the user is successful,\
\ the\n request returns an HTTP 200 \"OK\" response.\n\n The HTTP 200\
\ response has the following values.\n\n * expiration: The course expiration\
\ date for given user course pair\n or null if the course does not expire.\n\
\ * certificate: Information about the user's earned certificate in the\n\
\ course.\n * course: A collection of the following data about the\
\ course.\n\n * courseware_access: A JSON representation with access information\
\ for the course,\n including any access errors.\n\n * course_about:\
\ The URL to the course about page.\n * course_sharing_utm_parameters:\
\ Encoded UTM parameters to be included in course sharing url\n * course_handouts:\
\ The URI to get data for course handouts.\n * course_image: The path\
\ to the course image.\n * course_updates: The URI to get data for course\
\ updates.\n * discussion_url: The URI to access data for course discussions\
\ if\n it is enabled, otherwise null.\n * end: The end date of\
\ the course.\n * id: The unique ID of the course.\n * name: The\
\ name of the course.\n * number: The course number.\n * org: The\
\ organization that created the course.\n * start: The date and time\
\ when the course starts.\n * start_display:\n If start_type is\
\ a string, then the advertised_start date for the course.\n If start_type\
\ is a timestamp, then a formatted date for the start of the course.\n \
\ If start_type is empty, then the value is None and it indicates that\
\ the course has not yet started.\n * start_type: One of either \"string\"\
, \"timestamp\", or \"empty\"\n * subscription_id: A unique \"clean\"\
\ (alphanumeric with '_') ID of\n the course.\n * video_outline:\
\ The URI to get the list of all videos that the user\n can access\
\ in the course.\n\n * created: The date the course was created.\n *\
\ is_active: Whether the course is currently active. Possible values\n \
\ are true or false.\n * mode: The type of certificate registration for\
\ this course (honor or\n certified).\n * url: URL to the downloadable\
\ version of the certificate, if exists."
parameters: []
responses:
'200':
description: ''
schema:
type: array
items:
$ref: '#/definitions/CourseEnrollment'
tags:
- mobile
parameters:
- name: api_version
in: path
required: true
type: string
- name: username
in: path
required: true
type: string
? /mobile/{api_version}/users/{username}/course_status_info/(P{course_id}[/+]+{var}[/+]+api/mobile/{api_version}/users/{username}/course_status_info/(P{course_id}[/+]+(/|+)[/+]+{var}[/]+)
: get:
operationId: mobile_users_course_status_info_+]+api_mobile_users_course_status_info_+]+(_|+)[_]+)_list
description: Get the ID of the module that the specified user last visited in
the specified course.
parameters: []
responses:
'200':
description: ''
tags:
- mobile
patch:
operationId: mobile_users_course_status_info_+]+api_mobile_users_course_status_info_+]+(_|+)[_]+)_partial_update
description: Update the ID of the module that the specified user last visited
in the specified course.
parameters: []
responses:
'200':
description: ''
tags:
- mobile
parameters:
- name: api_version
in: path
required: true
type: string
- name: course_id
in: path
required: true
type: string
- name: username
in: path
required: true
type: string
- name: var
in: path
required: true
type: string
/notifier/v1/users/:
get:
operationId: notifier_v1_users_list
description: "An endpoint that the notifier can use to retrieve users who have\
\ enabled\ndaily forum digests, including all information that the notifier\
\ needs about\nsuch users."
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
schema:
required:
- count
- results
type: object
properties:
count:
type: integer
next:
type: string
format: uri
x-nullable: true
previous:
type: string
format: uri
x-nullable: true
results:
type: array
items:
$ref: '#/definitions/NotifierUser'
tags:
- notifier
parameters: []
/notifier/v1/users/{id}/:
get:
operationId: notifier_v1_users_read
description: "An endpoint that the notifier can use to retrieve users who have\
\ enabled\ndaily forum digests, including all information that the notifier\
\ needs about\nsuch users."
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/NotifierUser'
tags:
- notifier
parameters:
- name: id
in: path
description: A unique integer value identifying this user.
required: true
type: integer
/organizations/v0/organizations/:
get:
operationId: organizations_v0_organizations_list
description: "Organization view to fetch list organization data or single organization\n\
using organization short name."
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
schema:
required:
- count
- results
type: object
properties:
count:
type: integer
next:
type: string
format: uri
x-nullable: true
previous:
type: string
format: uri
x-nullable: true
results:
type: array
items:
$ref: '#/definitions/Organization'
tags:
- organizations
parameters: []
/organizations/v0/organizations/{short_name}/:
get:
operationId: organizations_v0_organizations_read
description: "Organization view to fetch list organization data or single organization\n\
using organization short name."
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/Organization'
tags:
- organizations
parameters:
- name: short_name
in: path
description: Please do not use spaces or special characters. Only allowed
special characters are period (.), hyphen (-) and underscore (_).
required: true
type: string
/profile_images/v1/{username}/remove:
post:
operationId: profile_images_v1_remove_create
description: POST /api/profile_images/v1/{username}/remove
parameters: []
responses:
'201':
description: ''
tags:
- profile_images
parameters:
- name: username
in: path
required: true
type: string
/profile_images/v1/{username}/upload:
post:
operationId: profile_images_v1_upload_create
description: POST /api/profile_images/v1/{username}/upload
parameters: []
responses:
'201':
description: ''
consumes:
- multipart/form-data
- application/x-www-form-urlencoded
tags:
- profile_images
parameters:
- name: username
in: path
required: true
type: string
/program_enrollments/v1/integration-reset:
post:
operationId: program_enrollments_v1_integration-reset_create
description: Reset enrollment and user data for organization
parameters: []
responses:
'201':
description: ''
tags:
- program_enrollments
parameters: []
/program_enrollments/v1/programs/enrollments/:
get:
operationId: program_enrollments_v1_programs_enrollments_list
description: How to respond to a GET request to this endpoint
parameters: []
responses:
'200':
description: ''
tags:
- program_enrollments
parameters: []
/program_enrollments/v1/programs/readonly_access/:
get:
operationId: program_enrollments_v1_programs_readonly_access_list
description: How to respond to a GET request to this endpoint
parameters: []
responses:
'200':
description: ''
tags:
- program_enrollments
parameters: []
/program_enrollments/v1/programs/{program_uuid}/courses/{course_id}/enrollments/:
get:
operationId: program_enrollments_v1_programs_courses_enrollments_list
description: Defines the GET list endpoint for ProgramCourseEnrollment objects.
parameters:
- name: cursor
in: query
description: The pagination cursor value.
required: false
type: string
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- program_enrollments
post:
operationId: program_enrollments_v1_programs_courses_enrollments_create
description: Enroll a list of students in a course in a program
parameters: []
responses:
'201':
description: ''
tags:
- program_enrollments
put:
operationId: program_enrollments_v1_programs_courses_enrollments_update
description: Create or Update the program course enrollments of a list of learners
parameters: []
responses:
'200':
description: ''
tags:
- program_enrollments
patch:
operationId: program_enrollments_v1_programs_courses_enrollments_partial_update
description: Modify the program course enrollments of a list of learners
parameters: []
responses:
'200':
description: ''
tags:
- program_enrollments
parameters:
- name: course_id
in: path
required: true
type: string
- name: program_uuid
in: path
required: true
type: string
/program_enrollments/v1/programs/{program_uuid}/courses/{course_id}/grades/:
get:
operationId: program_enrollments_v1_programs_courses_grades_list
description: Defines the GET list endpoint for ProgramCourseGrade objects.
parameters:
- name: cursor
in: query
description: The pagination cursor value.
required: false
type: string
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- program_enrollments
parameters:
- name: course_id
in: path
required: true
type: string
- name: program_uuid
in: path
required: true
type: string
/program_enrollments/v1/programs/{program_uuid}/enrollments/:
get:
operationId: program_enrollments_v1_programs_enrollments_list
description: Defines the GET list endpoint for ProgramEnrollment objects.
parameters:
- name: cursor
in: query
description: The pagination cursor value.
required: false
type: string
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- program_enrollments
post:
operationId: program_enrollments_v1_programs_enrollments_create
description: Create program enrollments for a list of learners
parameters: []
responses:
'201':
description: ''
tags:
- program_enrollments
put:
operationId: program_enrollments_v1_programs_enrollments_update
description: Create/modify program enrollments for a list of learners
parameters: []
responses:
'200':
description: ''
tags:
- program_enrollments
patch:
operationId: program_enrollments_v1_programs_enrollments_partial_update
description: Modify program enrollments for a list of learners
parameters: []
responses:
'200':
description: ''
tags:
- program_enrollments
parameters:
- name: program_uuid
in: path
required: true
type: string
/program_enrollments/v1/programs/{program_uuid}/overview/:
get:
operationId: program_enrollments_v1_programs_overview_list
description: "Defines the GET endpoint for overviews of course enrollments\n\
for a user as part of a program."
parameters: []
responses:
'200':
description: ''
tags:
- program_enrollments
parameters:
- name: program_uuid
in: path
required: true
type: string
/team/v0/team_membership/:
get:
operationId: team_v0_team_membership_list
description: GET /api/team/v0/team_membership
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- team
post:
operationId: team_v0_team_membership_create
description: POST /api/team/v0/team_membership
parameters: []
responses:
'201':
description: ''
tags:
- team
parameters: []
/team/v0/team_membership/{team_id},{username}:
get:
operationId: team_v0_team_membership_read
description: GET /api/team/v0/team_membership/{team_id},{username}
parameters: []
responses:
'200':
description: ''
tags:
- team
delete:
operationId: team_v0_team_membership_delete
description: DELETE /api/team/v0/team_membership/{team_id},{username}
parameters: []
responses:
'204':
description: ''
tags:
- team
parameters:
- name: team_id
in: path
required: true
type: string
- name: username
in: path
required: true
type: string
/team/v0/teams/:
get:
operationId: team_v0_teams_list
description: GET /api/team/v0/teams/
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- team
post:
operationId: team_v0_teams_create
description: POST /api/team/v0/teams/
parameters: []
responses:
'201':
description: ''
tags:
- team
parameters: []
/team/v0/teams/{team_id}:
get:
operationId: team_v0_teams_read
description: Retrieves the specified resource using the RetrieveModelMixin.
parameters: []
responses:
'200':
description: ''
consumes:
- application/merge-patch+json
tags:
- team
patch:
operationId: team_v0_teams_partial_update
description: Checks for validation errors, then updates the model using the
UpdateModelMixin.
parameters: []
responses:
'200':
description: ''
consumes:
- application/merge-patch+json
tags:
- team
delete:
operationId: team_v0_teams_delete
description: DELETE /api/team/v0/teams/{team_id}
parameters: []
responses:
'204':
description: ''
consumes:
- application/merge-patch+json
tags:
- team
parameters:
- name: team_id
in: path
required: true
type: string
/team/v0/topics/:
get:
operationId: team_v0_topics_list
description: GET /api/team/v0/topics/?course_id={course_id}
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
tags:
- team
parameters: []
/team/v0/topics/{topic_id},{course_id}:
get:
operationId: team_v0_topics_read
description: GET /api/team/v0/topics/{topic_id},{course_id}/
parameters: []
responses:
'200':
description: ''
tags:
- team
parameters:
- name: course_id
in: path
required: true
type: string
- name: topic_id
in: path
required: true
type: string
/third_party_auth/v0/providers/user_status:
get:
operationId: third_party_auth_v0_providers_user_status_list
summary: GET /api/third_party_auth/v0/providers/user_status/
description: "**GET Response Values**\n{\n \"accepts_logins\": true,\n \
\ \"name\": \"Google\",\n \"disconnect_url\": \"/auth/disconnect/google-oauth2/?\"\
,\n \"connect_url\": \"/auth/login/google-oauth2/?auth_entry=account_settings&next=%2Faccount%2Fsettings\"\
,\n \"connected\": false,\n \"id\": \"oa2-google-oauth2\"\n}"
parameters: []
responses:
'200':
description: ''
tags:
- third_party_auth
parameters: []
/third_party_auth/v0/providers/{provider_id}{var}/users:
get:
operationId: third_party_auth_v0_providers_users_list
summary: Map between the third party auth account IDs (remote_id) and EdX username.
description: "This API is intended to be a server-to-server endpoint. An on-campus\
\ middleware or system should consume this.\n\n**Use Case**\n\n Get a paginated\
\ list of mappings between edX users and remote user IDs for all users currently\n\
\ linked to the given backend.\n\n The list can be filtered by edx username\
\ or third party ids. The filter is limited by the max length of URL.\n \
\ It is suggested to query no more than 50 usernames or remote_ids in each\
\ request to stay within above\n limitation\n\n The page size can be\
\ changed by specifying `page_size` parameter in the request.\n\n**Example\
\ Requests**\n\n GET /api/third_party_auth/v0/providers/{provider_id}/users\n\
\n GET /api/third_party_auth/v0/providers/{provider_id}/users?username={username1},{username2}\n\
\n GET /api/third_party_auth/v0/providers/{provider_id}/users?username={username1}&usernames={username2}\n\
\n GET /api/third_party_auth/v0/providers/{provider_id}/users?remote_id={remote_id1},{remote_id2}\n\
\n GET /api/third_party_auth/v0/providers/{provider_id}/users?remote_id={remote_id1}&remote_id={remote_id2}\n\
\n GET /api/third_party_auth/v0/providers/{provider_id}/users?username={username1}&remote_id={remote_id1}\n\
\n**URL Parameters**\n\n * provider_id: The unique identifier of third_party_auth\
\ provider (e.g. \"saml-ubc\", \"oa2-google\", etc.\n This is not the\
\ same thing as the backend_name.). (Optional/future: We may also want to\
\ allow\n this to be an 'external domain' like 'ssl:MIT' so that this\
\ API can also search the legacy\n ExternalAuthMap table used by Standford/MIT)\n\
\n**Query Parameters**\n\n * remote_ids: Optional. List of comma separated\
\ remote (third party) user IDs to filter the result set.\n e.g. ?remote_ids=8721384623\n\
\n * usernames: Optional. List of comma separated edX usernames to filter\
\ the result set.\n e.g. ?usernames=bob123,jane456\n\n * page, page_size:\
\ Optional. Used for paging the result set, especially when getting\n \
\ an unfiltered list.\n\n**Response Values**\n\n If the request for information\
\ about the user is successful, an HTTP 200 \"OK\" response\n is returned.\n\
\n The HTTP 200 response has the following values:\n\n * count: The\
\ number of mappings for the backend.\n\n * next: The URI to the next page\
\ of the mappings.\n\n * previous: The URI to the previous page of the\
\ mappings.\n\n * num_pages: The number of pages listing the mappings.\n\
\n * results: A list of mappings returned. Each collection in the list\n\
\ contains these fields.\n\n * username: The edx username\n\n\
\ * remote_id: The Id from third party auth provider"
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
schema:
required:
- count
- results
type: object
properties:
count:
type: integer
next:
type: string
format: uri
x-nullable: true
previous:
type: string
format: uri
x-nullable: true
results:
type: array
items:
$ref: '#/definitions/UserMapping'
tags:
- third_party_auth
parameters:
- name: provider_id
in: path
required: true
type: string
- name: var
in: path
required: true
type: string
/third_party_auth/v0/users/:
get:
operationId: third_party_auth_v0_users_list
summary: Read provider information for a user.
description: "Allows reading the list of providers for a specified user.\n\n\
Args:\n request (Request): The HTTP GET request\n\nRequest Parameters:\n\
\ Must provide one of 'email' or 'username'. If both are provided,\n \
\ the username will be ignored.\n\nReturn:\n JSON serialized list of\
\ the providers linked to this user."
parameters: []
responses:
'200':
description: ''
tags:
- third_party_auth
parameters: []
/third_party_auth/v0/users/{username}:
get:
operationId: third_party_auth_v0_users_read
summary: Read provider information for a user.
description: "Allows reading the list of providers for a specified user.\n\n\
Args:\n request (Request): The HTTP GET request\n username (str): Fetch\
\ the list of providers linked to this user\n\nReturn:\n JSON serialized\
\ list of the providers linked to this user."
parameters: []
responses:
'200':
description: ''
tags:
- third_party_auth
parameters:
- name: username
in: path
required: true
type: string
/user/v1/accounts:
get:
operationId: user_v1_accounts_list
description: GET /api/user/v1/accounts?username={username1,username2}
parameters: []
responses:
'200':
description: ''
consumes:
- application/merge-patch+json
tags:
- user
parameters: []
/user/v1/accounts/deactivate_logout/:
post:
operationId: user_v1_accounts_deactivate_logout_create
summary: POST /api/user/v1/accounts/deactivate_logout/
description: "Marks the user as having no password set for deactivation purposes,\n\
and logs the user out."
parameters: []
responses:
'201':
description: ''
tags:
- user
parameters: []
/user/v1/accounts/replace_usernames/:
post:
operationId: user_v1_accounts_replace_usernames_create
description: "POST /api/user/v1/accounts/replace_usernames/\n{\n \"username_mappings\"\
: [\n {\"current_username_1\": \"desired_username_1\"},\n {\"\
current_username_2\": \"desired_username_2\"}\n ]\n}\n\n**POST Parameters**\n\
\nA POST request must include the following parameter.\n\n* username_mappings:\
\ Required. A list of objects that map the current username (key)\n to the\
\ desired username (value)\n\n**POST Response Values**\n\nAs long as data\
\ validation passes, the request will return a 200 with a new mapping\nof\
\ old usernames (key) to new username (value)\n\n{\n \"successful_replacements\"\
: [\n {\"old_username_1\": \"new_username_1\"}\n ],\n \"failed_replacements\"\
: [\n {\"old_username_2\": \"new_username_2\"}\n ]\n}"
parameters: []
responses:
'201':
description: ''
tags:
- user
parameters: []
/user/v1/accounts/retire/:
post:
operationId: user_v1_accounts_post
summary: POST /api/user/v1/accounts/retire/
description: "{\n 'username': 'user_to_retire'\n}\n\nRetires the user with\
\ the given username. This includes\nretiring this username, the associated\
\ email address, and\nany other PII associated with this user."
parameters: []
responses:
'201':
description: ''
tags:
- user
parameters: []
/user/v1/accounts/retire_misc/:
post:
operationId: user_v1_accounts_post
summary: POST /api/user/v1/accounts/retire_misc/
description: "{\n 'username': 'user_to_retire'\n}\n\nRetires the user with\
\ the given username in the LMS."
parameters: []
responses:
'201':
description: ''
tags:
- user
parameters: []
/user/v1/accounts/retirement_cleanup/:
post:
operationId: user_v1_accounts_cleanup
summary: POST /api/user/v1/accounts/retirement_cleanup/
description: "{\n 'usernames': ['user1', 'user2', ...]\n}\n\nDeletes a batch\
\ of retirement requests by username."
parameters: []
responses:
'201':
description: ''
tags:
- user
parameters: []
/user/v1/accounts/retirement_partner_report/:
post:
operationId: user_v1_accounts_retirement_partner_report_create
summary: POST /api/user/v1/accounts/retirement_partner_report/
description: "Returns the list of UserRetirementPartnerReportingStatus users\n\
that are not already being processed and updates their status\nto indicate\
\ they are currently being processed."
parameters: []
responses:
'201':
description: ''
tags:
- user
put:
operationId: user_v1_accounts_retirement_partner_report_update
summary: PUT /api/user/v1/accounts/retirement_partner_report/
description: "{\n 'username': 'user_to_retire'\n}\n\nCreates a UserRetirementPartnerReportingStatus\
\ object for the given user\nas part of the retirement pipeline."
parameters: []
responses:
'200':
description: ''
tags:
- user
parameters: []
/user/v1/accounts/retirement_partner_report_cleanup/:
post:
operationId: user_v1_accounts_retirement_partner_cleanup
summary: POST /api/user/v1/accounts/retirement_partner_report_cleanup/
description: "[{'original_username': 'user1'}, {'original_username': 'user2'},\
\ ...]\n\nDeletes UserRetirementPartnerReportingStatus objects for a list\
\ of users\nthat have been reported on."
parameters: []
responses:
'201':
description: ''
tags:
- user
parameters: []
/user/v1/accounts/retirement_queue/:
get:
operationId: user_v1_accounts_retirement_queue
summary: "GET /api/user/v1/accounts/retirement_queue/\n{'cool_off_days': 7,\
\ 'states': ['PENDING', 'COMPLETE']}"
description: "Returns the list of RetirementStatus users in the given states\
\ that were\ncreated in the retirement queue at least `cool_off_days` ago."
parameters: []
responses:
'200':
description: ''
tags:
- user
parameters: []
/user/v1/accounts/retirements_by_status_and_date/:
get:
operationId: user_v1_accounts_retirements_by_status_and_date
summary: "GET /api/user/v1/accounts/retirements_by_status_and_date/\n?start_date=2018-09-05&end_date=2018-09-07&state=COMPLETE"
description: "Returns a list of UserRetirementStatusSerializer serialized\n\
RetirementStatus rows in the given state that were created in the\nretirement\
\ queue between the dates given. Date range is inclusive,\nso to get one day\
\ you would set both dates to that day."
parameters: []
responses:
'200':
description: ''
tags:
- user
parameters: []
/user/v1/accounts/update_retirement_status/:
patch:
operationId: user_v1_accounts_update_retirement_status_partial_update
summary: PATCH /api/user/v1/accounts/update_retirement_status/
description: "{\n 'username': 'user_to_retire',\n 'new_state': 'LOCKING_COMPLETE',\n\
\ 'response': 'User account locked and logged out.'\n}\n\nUpdates the RetirementStatus\
\ row for the given user to the new\nstatus, and append any messages to the\
\ message log.\n\nNote that this implementation DOES NOT use the \"merge patch\"\
\nimplementation seen in AccountViewSet. Slumber, the project\nwe use to power\
\ edx-rest-api-client, does not currently support\nit. The content type for\
\ this request is 'application/json'."
parameters: []
responses:
'200':
description: ''
tags:
- user
parameters: []
/user/v1/accounts/{username}:
get:
operationId: user_v1_accounts_read
description: GET /api/user/v1/accounts/{username}/
parameters: []
responses:
'200':
description: ''
consumes:
- application/merge-patch+json
tags:
- user
patch:
operationId: user_v1_accounts_partial_update
summary: PATCH /api/user/v1/accounts/{username}/
description: "Note that this implementation is the \"merge patch\" implementation\
\ proposed in\nhttps://tools.ietf.org/html/rfc7396. The content_type must\
\ be \"application/merge-patch+json\" or\nelse an error response with status\
\ code 415 will be returned."
parameters: []
responses:
'200':
description: ''
consumes:
- application/merge-patch+json
tags:
- user
parameters:
- name: username
in: path
required: true
type: string
/user/v1/accounts/{username}/deactivate/:
post:
operationId: user_v1_accounts_deactivate_create
summary: POST /api/user/v1/accounts/{username}/deactivate/
description: Marks the user as having no password set for deactivation purposes.
parameters: []
responses:
'201':
description: ''
tags:
- user
parameters:
- name: username
in: path
required: true
type: string
/user/v1/accounts/{username}/image:
post:
operationId: user_v1_accounts_image_create
description: POST /api/user/v1/accounts/{username}/image
parameters: []
responses:
'201':
description: ''
consumes:
- multipart/form-data
- application/x-www-form-urlencoded
tags:
- user
delete:
operationId: user_v1_accounts_image_delete
description: DELETE /api/user/v1/accounts/{username}/image
parameters: []
responses:
'204':
description: ''
consumes:
- multipart/form-data
- application/x-www-form-urlencoded
tags:
- user
parameters:
- name: username
in: path
required: true
type: string
/user/v1/accounts/{username}/retirement_status/:
get:
operationId: user_v1_accounts_retirement_status_read
description: "GET /api/user/v1/accounts/{username}/retirement_status/\nReturns\
\ the RetirementStatus of a given user, or 404 if that row\ndoesn't exist."
parameters: []
responses:
'200':
description: ''
tags:
- user
parameters:
- name: username
in: path
required: true
type: string
/user/v1/accounts/{username}/verification_status/:
get:
operationId: user_v1_accounts_verification_status_read
description: IDVerificationStatus detail endpoint.
parameters: []
responses:
'200':
description: ''
tags:
- user
parameters:
- name: username
in: path
required: true
type: string
/user/v1/me:
get:
operationId: user_v1_get
description: GET /api/user/v1/me
parameters: []
responses:
'200':
description: ''
consumes:
- application/merge-patch+json
tags:
- user
parameters: []
/user/v1/preferences/{username}:
get:
operationId: user_v1_preferences_read
description: GET /api/user/v1/preferences/{username}/
parameters: []
responses:
'200':
description: ''
consumes:
- application/merge-patch+json
tags:
- user
patch:
operationId: user_v1_preferences_partial_update
description: PATCH /api/user/v1/preferences/{username}/
parameters: []
responses:
'200':
description: ''
consumes:
- application/merge-patch+json
tags:
- user
parameters:
- name: username
in: path
required: true
type: string
/user/v1/preferences/{username}/{preference_key}:
get:
operationId: user_v1_preferences_read
description: GET /api/user/v1/preferences/{username}/{preference_key}
parameters: []
responses:
'200':
description: ''
tags:
- user
put:
operationId: user_v1_preferences_update
description: PUT /api/user/v1/preferences/{username}/{preference_key}
parameters: []
responses:
'200':
description: ''
tags:
- user
delete:
operationId: user_v1_preferences_delete
description: DELETE /api/user/v1/preferences/{username}/{preference_key}
parameters: []
responses:
'204':
description: ''
tags:
- user
parameters:
- name: preference_key
in: path
required: true
type: string
- name: username
in: path
required: true
type: string
/user/v1/validation/registration:
post:
operationId: user_v1_validation_registration_create
summary: POST /api/user/v1/validation/registration/
description: "Expects request of the form\n>>> {\n>>> \"name\": \"Dan the\
\ Validator\",\n>>> \"username\": \"mslm\",\n>>> \"email\": \"mslm@gmail.com\"\
,\n>>> \"confirm_email\": \"mslm@gmail.com\",\n>>> \"password\": \"\
password123\",\n>>> \"country\": \"PK\"\n>>> }\nwhere each key is the\
\ appropriate form field name and the value is\nuser input. One may enter\
\ individual inputs if needed. Some inputs\ncan get extra verification checks\
\ if entered along with others,\nlike when the password may not equal the\
\ username."
parameters: []
responses:
'201':
description: ''
tags:
- user
parameters: []
/val/v0/videos/:
get:
operationId: val_v0_videos_list
description: GETs or POST video objects
parameters:
- name: page
in: query
description: A page number within the paginated result set.
required: false
type: integer
- name: page_size
in: query
description: Number of results to return per page.
required: false
type: integer
responses:
'200':
description: ''
schema:
required:
- count
- results
type: object
properties:
count:
type: integer
next:
type: string
format: uri
x-nullable: true
previous:
type: string
format: uri
x-nullable: true
results:
type: array
items:
$ref: '#/definitions/Video'
tags:
- val
post:
operationId: val_v0_videos_create
description: GETs or POST video objects
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/Video'
responses:
'201':
description: ''
schema:
$ref: '#/definitions/Video'
tags:
- val
parameters: []
/val/v0/videos/missing-hls/:
post:
operationId: val_v0_videos_missing-hls_create
summary: 'Retrieve video IDs that are missing HLS profiles. This endpoint supports
2 types of input data:'
description: "1. If we want a batch of video ids which are missing HLS profile\
\ irrespective of their courses, the request\n data should be in following\
\ format:\n {\n 'batch_size': 50,\n 'offset':\
\ 0\n }\n And response will be in following format:\n {\n\
\ 'videos': ['video_id1', 'video_id2', 'video_id3', ... , video_id50],\n\
\ 'total': 300,\n 'offset': 50,\n 'batch_size':\
\ 50\n }\n\n2. If we want all the videos which are missing HLS profiles\
\ in a set of specific courses, the request data\n should be in following\
\ format:\n {\n 'courses': [\n 'course_id1',\n\
\ 'course_id2',\n ...\n ]\n \
\ }\n And response will be in following format:\n {\n \
\ 'videos': ['video_id1', 'video_id2', 'video_id3', ...]\n }"
parameters: []
responses:
'201':
description: ''
tags:
- val
put:
operationId: val_v0_videos_missing-hls_update
summary: Update a single profile for a given video.
description: "Example request data:\n {\n 'edx_video_id': '1234'\n\
\ 'profile': 'hls',\n 'encode_data': {\n 'url': 'foo.com/qwe.m3u8'\n\
\ 'file_size': 34\n 'bitrate': 12\n }\n }"
parameters: []
responses:
'200':
description: ''
tags:
- val
parameters: []
/val/v0/videos/status/:
patch:
operationId: val_v0_videos_status_partial_update
description: Update the status of a video.
parameters: []
responses:
'200':
description: ''
tags:
- val
parameters: []
/val/v0/videos/video-images/update/:
post:
operationId: val_v0_videos_video-images_update_create
description: Update a course video image instance with auto generated image
names.
parameters: []
responses:
'201':
description: ''
tags:
- val
parameters: []
/val/v0/videos/video-transcripts/create/:
post:
operationId: val_v0_videos_video-transcripts_create_create
summary: Creates a video transcript instance with the given information.
description: "Arguments:\n request: A WSGI request."
parameters: []
responses:
'201':
description: ''
tags:
- val
parameters: []
/val/v0/videos/{edx_video_id}:
get:
operationId: val_v0_videos_read
description: Gets a video instance given its edx_video_id
parameters: []
responses:
'200':
description: ''
schema:
$ref: '#/definitions/Video'
tags:
- val
put:
operationId: val_v0_videos_update
description: Gets a video instance given its edx_video_id
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/Video'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/Video'
tags:
- val
patch:
operationId: val_v0_videos_partial_update
description: Gets a video instance given its edx_video_id
parameters:
- name: data
in: body
required: true
schema:
$ref: '#/definitions/Video'
responses:
'200':
description: ''
schema:
$ref: '#/definitions/Video'
tags:
- val
delete:
operationId: val_v0_videos_delete
description: Gets a video instance given its edx_video_id
parameters: []
responses:
'204':
description: ''
tags:
- val
parameters:
- name: edx_video_id
in: path
required: true
type: string
pattern: ^[a-zA-Z0-9\-_]*$
definitions:
BadgeClass:
title: Badge class
required:
- slug
- display_name
- description
- criteria
type: object
properties:
slug:
title: Slug
type: string
format: slug
pattern: ^[-a-zA-Z0-9_]+$
maxLength: 255
minLength: 1
issuing_component:
title: Issuing component
type: string
format: slug
pattern: ^[-a-zA-Z0-9_]+$
default: ''
maxLength: 50
display_name:
title: Display name
type: string
maxLength: 255
minLength: 1
course_id:
title: Course id
type: string
maxLength: 255
description:
title: Description
type: string
minLength: 1
criteria:
title: Criteria
type: string
minLength: 1
image_url:
title: Image url
type: string
readOnly: true
format: uri
BadgeAssertion:
required:
- image_url
- assertion_url
type: object
properties:
badge_class:
$ref: '#/definitions/BadgeClass'
image_url:
title: Image url
type: string
format: uri
maxLength: 200
minLength: 1
assertion_url:
title: Assertion url
type: string
format: uri
maxLength: 200
minLength: 1
created:
title: Created
type: string
format: date-time
readOnly: true
CCXCourse:
required:
- master_course_id
- display_name
- coach_email
- start
- due
- max_students_allowed
type: object
properties:
ccx_course_id:
title: Ccx course id
type: string
readOnly: true
master_course_id:
title: Master course id
type: string
minLength: 1
display_name:
title: Display name
type: string
minLength: 1
coach_email:
title: Coach email
type: string
format: email
minLength: 1
start:
title: Start
type: string
due:
title: Due
type: string
max_students_allowed:
title: Max students allowed
type: integer
course_modules:
title: Course modules
type: string
readOnly: true
CohortUsersAPI:
required:
- username
type: object
properties:
username:
title: Username
description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
only.
type: string
pattern: ^[\w.@+-]+$
maxLength: 150
minLength: 1
email:
title: Email address
type: string
format: email
maxLength: 254
name:
title: Name
type: string
readOnly: true
commerce.CourseMode:
required:
- name
- price
type: object
properties:
name:
title: Name
type: string
minLength: 1
currency:
title: Currency
type: string
maxLength: 8
minLength: 1
price:
title: Price
type: integer
sku:
title: SKU
description: 'OPTIONAL: This is the SKU (stock keeping unit) of this mode
in the external ecommerce service. Leave this blank if the course has not
yet been migrated to the ecommerce service.'
type: string
maxLength: 255
x-nullable: true
bulk_sku:
title: Bulk SKU
description: This is the bulk SKU (stock keeping unit) of this mode in the
external ecommerce service.
type: string
maxLength: 255
x-nullable: true
expires:
title: Expires
type: string
format: date-time
x-nullable: true
commerce.Course:
required:
- id
- modes
type: object
properties:
id:
title: Id
type: string
minLength: 1
name:
title: Name
type: string
readOnly: true
minLength: 1
verification_deadline:
title: Verification deadline
type: string
format: date-time
x-nullable: true
modes:
type: array
items:
$ref: '#/definitions/commerce.CourseMode'
CourseGoal:
required:
- user
- course_key
type: object
properties:
user:
title: User
type: string
pattern: ^[\w.@+-]+$
course_key:
title: Course key
type: string
maxLength: 255
minLength: 1
goal_key:
title: Goal key
type: string
enum:
- certify
- complete
- explore
- unsure
course_modes.CourseMode:
required:
- course_id
- mode_slug
- mode_display_name
- currency
type: object
properties:
course_id:
title: Course id
type: string
minLength: 1
mode_slug:
title: Mode slug
type: string
minLength: 1
mode_display_name:
title: Mode display name
type: string
minLength: 1
min_price:
title: Min price
type: integer
currency:
title: Currency
type: string
minLength: 1
expiration_datetime:
title: Expiration datetime
type: string
format: date-time
expiration_datetime_is_explicit:
title: Expiration datetime is explicit
type: boolean
description:
title: Description
type: string
minLength: 1
sku:
title: Sku
type: string
minLength: 1
bulk_sku:
title: Bulk sku
type: string
minLength: 1
_Media:
title: Course image
type: object
properties:
uri:
title: Uri
type: string
readOnly: true
Image:
title: Image
required:
- raw
- small
- large
type: object
properties:
raw:
title: Raw
type: string
format: uri
minLength: 1
small:
title: Small
type: string
format: uri
minLength: 1
large:
title: Large
type: string
format: uri
minLength: 1
_CourseApiMediaCollection:
title: Media
required:
- course_image
- course_video
- image
type: object
properties:
course_image:
$ref: '#/definitions/_Media'
course_video:
$ref: '#/definitions/_Media'
image:
$ref: '#/definitions/Image'
Course:
required:
- effort
- end
- enrollment_start
- enrollment_end
- id
- media
- name
- number
- org
- short_description
- start
- start_display
- start_type
- pacing
- mobile_available
- invitation_only
type: object
properties:
blocks_url:
title: Blocks url
type: string
readOnly: true
effort:
title: Effort
type: string
minLength: 1
end:
title: End
type: string
format: date-time
enrollment_start:
title: Enrollment start
type: string
format: date-time
enrollment_end:
title: Enrollment end
type: string
format: date-time
id:
title: Id
type: string
minLength: 1
media:
$ref: '#/definitions/_CourseApiMediaCollection'
name:
title: Name
type: string
minLength: 1
number:
title: Number
type: string
minLength: 1
org:
title: Org
type: string
minLength: 1
short_description:
title: Short description
type: string
minLength: 1
start:
title: Start
type: string
format: date-time
start_display:
title: Start display
type: string
minLength: 1
start_type:
title: Start type
type: string
minLength: 1
pacing:
title: Pacing
type: string
minLength: 1
mobile_available:
title: Mobile available
type: boolean
hidden:
title: Hidden
type: string
readOnly: true
invitation_only:
title: Invitation only
type: boolean
course_id:
title: Course id
type: string
readOnly: true
minLength: 1
CourseDetail:
required:
- effort
- end
- enrollment_start
- enrollment_end
- id
- media
- name
- number
- org
- short_description
- start
- start_display
- start_type
- pacing
- mobile_available
- invitation_only
type: object
properties:
blocks_url:
title: Blocks url
type: string
readOnly: true
effort:
title: Effort
type: string
minLength: 1
end:
title: End
type: string
format: date-time
enrollment_start:
title: Enrollment start
type: string
format: date-time
enrollment_end:
title: Enrollment end
type: string
format: date-time
id:
title: Id
type: string
minLength: 1
media:
$ref: '#/definitions/_CourseApiMediaCollection'
name:
title: Name
type: string
minLength: 1
number:
title: Number
type: string
minLength: 1
org:
title: Org
type: string
minLength: 1
short_description:
title: Short description
type: string
minLength: 1
start:
title: Start
type: string
format: date-time
start_display:
title: Start display
type: string
minLength: 1
start_type:
title: Start type
type: string
minLength: 1
pacing:
title: Pacing
type: string
minLength: 1
mobile_available:
title: Mobile available
type: boolean
hidden:
title: Hidden
type: string
readOnly: true
invitation_only:
title: Invitation only
type: boolean
course_id:
title: Course id
type: string
readOnly: true
minLength: 1
overview:
title: Overview
type: string
readOnly: true
CreditCourse:
required:
- course_key
type: object
properties:
course_key:
title: Course key
type: string
enabled:
title: Enabled
type: boolean
CreditEligibility:
required:
- username
type: object
properties:
username:
title: Username
type: string
maxLength: 255
minLength: 1
course_key:
title: Course key
type: string
readOnly: true
deadline:
title: Deadline
description: Deadline for purchasing and requesting credit.
type: string
format: date-time
CreditProvider:
required:
- id
- display_name
- url
- status_url
- description
type: object
properties:
id:
title: Id
type: string
minLength: 1
display_name:
title: Display name
description: Name of the credit provider displayed to users
type: string
maxLength: 255
minLength: 1
url:
title: Url
type: string
format: uri
minLength: 1
status_url:
title: Status url
type: string
format: uri
minLength: 1
description:
title: Description
type: string
minLength: 1
enable_integration:
title: Enable integration
description: When true, automatically notify the credit provider when a user
requests credit. In order for this to work, a shared secret key MUST be
configured for the credit provider in secure auth settings.
type: boolean
fulfillment_instructions:
title: Fulfillment instructions
description: Plain text or html content for displaying further steps on receipt
page *after* paying for the credit to get credit for a credit course against
a credit provider.
type: string
x-nullable: true
thumbnail_url:
title: Thumbnail url
description: Thumbnail image url of the credit provider.
type: string
format: uri
maxLength: 255
minLength: 1
CourseEnrollmentsApiList:
required:
- course_id
type: object
properties:
created:
title: Created
type: string
format: date-time
readOnly: true
mode:
title: Mode
type: string
maxLength: 100
minLength: 1
is_active:
title: Is active
type: boolean
user:
title: User
type: string
readOnly: true
course_id:
title: Course id
type: string
minLength: 1
CourseEntitlement:
required:
- user
- course_uuid
- mode
type: object
properties:
user:
title: User
type: string
pattern: ^[\w.@+-]+$
uuid:
title: Uuid
type: string
format: uuid
readOnly: true
course_uuid:
title: Course uuid
description: UUID for the Course, not the Course Run
type: string
format: uuid
enrollment_course_run:
title: Enrollment course run
type: string
readOnly: true
minLength: 1
expired_at:
title: Expired at
description: The date that an entitlement expired, if NULL the entitlement
has not expired.
type: string
format: date-time
x-nullable: true
created:
title: Created
type: string
format: date-time
readOnly: true
modified:
title: Modified
type: string
format: date-time
readOnly: true
mode:
title: Mode
description: The mode of the Course that will be applied on enroll.
type: string
maxLength: 100
minLength: 1
refund_locked:
title: Refund locked
type: boolean
order_number:
title: Order number
type: string
maxLength: 128
minLength: 1
x-nullable: true
support_details:
title: Support details
type: string
readOnly: true
ExperimentData:
required:
- experiment_id
- key
- value
type: object
properties:
id:
title: ID
type: integer
readOnly: true
experiment_id:
title: Experiment ID
type: integer
maximum: 65535
minimum: 0
user:
title: User
type: string
pattern: ^[\w.@+-]+$
readOnly: true
key:
title: Key
type: string
maxLength: 255
minLength: 1
value:
title: Value
type: string
minLength: 1
created:
title: Created
type: string
format: date-time
readOnly: true
modified:
title: Modified
type: string
format: date-time
readOnly: true
ExperimentDataCreate:
required:
- experiment_id
- key
- value
type: object
properties:
id:
title: ID
type: integer
readOnly: true
experiment_id:
title: Experiment ID
type: integer
maximum: 65535
minimum: 0
user:
title: User
type: string
pattern: ^[\w.@+-]+$
key:
title: Key
type: string
maxLength: 255
minLength: 1
value:
title: Value
type: string
minLength: 1
created:
title: Created
type: string
format: date-time
readOnly: true
modified:
title: Modified
type: string
format: date-time
readOnly: true
ExperimentKeyValue:
required:
- experiment_id
- key
- value
type: object
properties:
id:
title: ID
type: integer
readOnly: true
experiment_id:
title: Experiment ID
type: integer
maximum: 65535
minimum: 0
key:
title: Key
type: string
maxLength: 255
minLength: 1
value:
title: Value
type: string
minLength: 1
created:
title: Created
type: string
format: date-time
readOnly: true
modified:
title: Modified
type: string
format: date-time
readOnly: true
mobile_api.User:
required:
- username
type: object
properties:
id:
title: ID
type: integer
readOnly: true
username:
title: Username
description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
only.
type: string
pattern: ^[\w.@+-]+$
maxLength: 150
minLength: 1
email:
title: Email address
type: string
format: email
maxLength: 254
name:
title: Name
type: string
readOnly: true
course_enrollments:
title: Course enrollments
type: string
readOnly: true
CourseEnrollment:
type: object
properties:
audit_access_expires:
title: Audit access expires
type: string
readOnly: true
created:
title: Created
type: string
format: date-time
readOnly: true
mode:
title: Mode
type: string
maxLength: 100
minLength: 1
is_active:
title: Is active
type: boolean
course:
title: Course
type: string
readOnly: true
certificate:
title: Certificate
type: string
readOnly: true
NotifierUser:
type: object
properties:
id:
title: ID
type: integer
readOnly: true
email:
title: Email address
type: string
format: email
readOnly: true
minLength: 1
name:
title: Name
type: string
readOnly: true
preferences:
title: Preferences
type: string
readOnly: true
course_info:
title: Course info
type: string
readOnly: true
Organization:
required:
- name
- short_name
type: object
properties:
id:
title: ID
type: integer
readOnly: true
created:
title: Created
type: string
format: date-time
readOnly: true
modified:
title: Modified
type: string
format: date-time
readOnly: true
name:
title: Name
type: string
maxLength: 255
minLength: 1
short_name:
title: Short Name
description: Please do not use spaces or special characters. Only allowed
special characters are period (.), hyphen (-) and underscore (_).
type: string
maxLength: 255
minLength: 1
description:
title: Description
type: string
x-nullable: true
logo:
title: Logo
description: Please add only .PNG files for logo images. This logo will be
used on certificates.
type: string
readOnly: true
x-nullable: true
format: uri
active:
title: Active
type: boolean
UserMapping:
type: object
properties:
username:
title: Username
type: string
readOnly: true
remote_id:
title: Remote id
type: string
readOnly: true
EncodedVideo:
required:
- url
- file_size
- bitrate
- profile
type: object
properties:
created:
title: Created
type: string
format: date-time
modified:
title: Modified
type: string
format: date-time
url:
title: Url
type: string
maxLength: 200
minLength: 1
file_size:
title: File size
type: integer
minimum: 0
bitrate:
title: Bitrate
type: integer
minimum: 0
profile:
title: Profile
type: string
pattern: ^[a-zA-Z0-9\-_]*$
Video:
required:
- encoded_videos
- edx_video_id
- duration
- status
type: object
properties:
encoded_videos:
type: array
items:
$ref: '#/definitions/EncodedVideo'
courses:
type: array
items:
type: string
uniqueItems: true
url:
title: Url
type: string
readOnly: true
created:
title: Created
type: string
format: date-time
edx_video_id:
title: Edx video id
type: string
pattern: ^[a-zA-Z0-9\-_]*$
maxLength: 100
minLength: 1
client_video_id:
title: Client video id
type: string
maxLength: 255
duration:
title: Duration
type: number
minimum: 0
status:
title: Status
type: string
maxLength: 255
minLength: 1

View File

@@ -20,3 +20,4 @@ pyinotify # More efficient checking for runserver relo
sphinx==1.8.5 # Pinned because 2.0.0 release requires Python '>=3.5' but current Python is 2.7.12
vulture # Detects possible dead/unused code, used in scripts/find-dead-code.sh
modernize # Used to make Python 2 code more modern with the intention of eventually porting it over to Python 3.
recommonmark # To use markdown in sphinx