GET https://<lms_server_url>/api/courses/v1/blocks/?course_id=<course_id>&username=<username>&depth=all&requested_fields=student_view_data&student_view_data=<xblock_types>
```
Does not include user-specific data, which is available from `student_view_user_state`.
- `student_view_user_state`: XBlock handler which returns the currently logged
in user's state data in JSON format (e.g. items derived from `Scope.user_state`
fields).
```
GET https://<lms_server_url>/courses/<course_id>/xblock/<xblock_id>/handler/student_view_user_state
```
- Custom XBlock handlers used for submitting user input and recording user actions.
Problem Builder (`problem-builder`)
-----------------------------------
### `student_view_data`
- `max_attempts`: (integer) Max number of allowed attempts.
- `extended_feedback`: (boolean) `true` if extended feedback is enabled for this
- `messages`: (object) A dict with three string entries: `completed`,
`incomplete`, and `max_attempts_reached`. See below for info on each.
- `components`: (array) A list of `student_view_data` output of all immediate
child components which implement `student_view_data`. Child components which
don't implement `student_view_data` are omitted from the list.
#### `messages`
These messages are displayed as feedback, depending on the state of the
block. Any of these may be `null`.
- `completed`: (string) Message to be shown if the user successfully completes
the problem. May contain HTML.
- `incomplete`: (string) Message to be shown if the user did not successfully
complete the problem, but still has available attempts left. May contain HTML.
- `max_attempts_reached`: (string) Message to be shown if the user did not
complete the problem and has no available attempts left.
### `student_view_user_state`
- `num_attempts`: (integer) Number of attempts used so far.
- `completed`: (boolean) `true` if the user successfully completed the problem at least once.
- `student_results`: (array) A list of user submitted answers with metadata for
each child component. See below for more info.
- `components`: (object) Contains the `student_view_user_state` output of all
immediate child components which implement `student_view_user_state`. Each key
is a component ID (string), and the value is the component's
`student_view_user_state` (object). Child components which don't implement
student_view_user_state are not included in the dict.
#### `student_results`
The `student_results` field is an array of two-element arrays. Each nested array
has the form of `[component_name, data]`. If the user has not made any
submissions to particular component, then the element corresponding to that
component may be omitted from the array. The structure of the `data` object
depends on the type of the child component and is described separately for each
type of child component below.
### Custom Handlers
#### `submit`
The `submit` XBlock JSON handler is used for submitting student input. The
`POST` data should be a dict where keys are child component names. The values
depend on the component type and are described separately for each type of child
component below.
Example URL:
```
POST https://<lms_server_url>/courses/<course_id>/xblock/<xblock_id>/handler/submit
```
Returns a JSON object which contains these fields:
- `results`: (array) Same as `student_results` described under
`student_view_user_state` above.
- `completed`: (boolean) Same as `completed` described under
`student_view_user_state` above.
- `message`: (string) One of the `completed`, `incomplete`, or
`max_attempts_reached` feedback messages described under `messages` above. Can
be `null` if no messages has been defined. May contain HTML.
- `max_attempts`: (integer) Same as `max_attempts` under `student_view_data`.
- `num_attempts`: (integer) Same as `num_attempts` under
`student_view_user_state`.
Step Builder (`step-builder`)
-----------------------------
### `student_view_data`
- `title`: (string) The display name of the component.
- `show_title`: (boolean) `true` if the title should be displayed.
- `weight`: (float) The weight of the problem.
- `extended_feedback`: (boolean) `true` if extended feedback is enabled for this
block.
- `max_attempts`: (integer) Max number of allowed attempts.
- `components`: (array) A list of `student_view_data` output of all immediate
child components which implement `student_view_data`. For `step-builder`,
immediate children are typically `sb-step` and `sb-review-step` type
components. Child components which don't implement `student_view_data` are
omitted from the list.
### `student_view_user_state`
Same as [Problem Builder above](#problem-builder-problem-builder), but also
contains these additional fields:
- `active_step`: (integer) The index of the step which is currently
active. Starts at zero.
### Custom Handlers
#### `submit`
The `submit` XBlock JSON handler is used for submitting student input. The
`POST` data should be a dict where keys are child component names. The values
depend on the component type and are described separately for each type of child
component below.
In addition to child component names, the `POST` data should also include the
`active_step` field. The value should be the index of the current step.
Example URL:
```
POST https://<lms_server_url>/courses/<course_id>/xblock/<xblock_id>/handler/submit --data '{"bf9c37a":[{"name":"input","value":"Freeform answer"}],"71f85d0d3e7dabfc1a8cfecf72dce4284f18b13a":"3","71c526b60ec97364214ac70860def69914de84e7":["000bc8e","da9691e"],"477847c4f3540f37b8b3815430a74632a352064d":0.59,"b66a6115af051939c5ce92fb5ff739ccf704d1e9":false}'
```
#### `try_again`
The `try_again` XBlock JSON handler can be used when the student reaches the
final step. Sending a `POST` request to `try_again` will reset the problem and
all of its children.
Returns a JSON object containing the new value of `active_step`.
Example URL:
```
POST https://<lms_server_url>/courses/<course_id>/xblock/<xblock_id>/handler/try_again
```
Mentoring Step (`sb-step`)
--------------------------
### `student_view_data`
-`type`: (string) Always equals `"sb-step"` for Mentoring Step components.
-`title`: (string) Step component's display name.
-`show_title`: (boolean) `true` if the title should be displayed.
-`next_button_label`: (string) Text label of the "Next Step" button.
-`message`: (string) Feedback or instructional message which should be
displayed after student submits the step. May be `null`.
-`components`: (array) A list of `student_view_data` output of all immediate
child components which implement `student_view_data`. Child components which
don't implement `student_view_data` are omitted from the list.
### `student_view_user_state`
-`student_results`: (array) Same as `student_results` described under
`student_view_user_state` in the Problem Builder section.
-`components`: (object) Same as `components` described under
`student_view_user_state` in the Problem Builder section.
Review Step (`sb-review-step`)
------------------------------
### `student_view_data`
-`type`: (string) Always equals `"sb-review-step`" for Review Step components.
-`title`: (string) Display name of the component.
-`components`: (array) A list of `student_view_data` output of all immediate
child components which implement `student_view_data`. Child components which
don't implement `student_view_data` are omitted from the list.
Conditional Message (`sb-conditional-message`)
----------------------------------------------
Conditional Message component is always child of a Review Step component.
### `student_view_data`
-`type`: (string) Always equals `"sb-conditional-message"` for Conditional
Message components.
-`content`: (string) Content of the message. May contain HTML.
-`score_condition`: (string) One of `"perfect"`, `"imperfect"`, or `"any"`.
-`num_attempts_condition`: (string) One of `"can_try_again"`,
`"cannot_try_again"`, or `"any"`.
Score Summary (`sb-review-score`)
---------------------------------
### `student_view_data`
-`type`: (string) Always equals `"sb-review-score"` for Score Summary