curl --request GET \
--url https://edpire.com/api/v1/submissions/{id}/review \
--header 'Authorization: Bearer <token>'import requests
url = "https://edpire.com/api/v1/submissions/{id}/review"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://edpire.com/api/v1/submissions/{id}/review', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://edpire.com/api/v1/submissions/{id}/review",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://edpire.com/api/v1/submissions/{id}/review"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://edpire.com/api/v1/submissions/{id}/review")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://edpire.com/api/v1/submissions/{id}/review")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"submission": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assessment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"learner_ref": "<string>",
"status": "<string>",
"attempt_number": 123,
"total_attempts": 123,
"score": 123,
"max_score": 123,
"percentage": 123,
"passed": true,
"passing_score_percent": 123,
"is_fully_graded": true,
"awaiting_manual_grading": true,
"submitted_at": "2023-11-07T05:31:56Z"
},
"assessment": {
"annex": {},
"exercises": [
{
"id": "<string>",
"sharedContext": {},
"questions": [
{
"id": "<string>",
"version": "<string>",
"content": {},
"answerKeys": [
"<unknown>"
]
}
]
}
]
},
"meta": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"category": "<string>",
"language": "en",
"settings": {}
},
"branding": {},
"answers": {
"exerciseAnswers": [
{
"exerciseId": "<string>",
"questionAnswers": [
{
"questionId": "<string>",
"answers": [
{}
]
}
]
}
]
},
"exercise_feedback": [
{
"exercise_id": "<string>",
"questions": [
{
"question_id": "<string>",
"node_results": [
{
"node_id": "<string>",
"status": "correct",
"score": 123,
"max_score": 123,
"feedback": "<string>",
"display_answer": "<string>",
"detail": {},
"teacher_feedback": [
{}
]
}
]
}
]
}
]
},
"error": {
"message": "<string>"
},
"meta": {}
}{
"data": null,
"error": {
"message": "<string>"
},
"meta": null
}{
"data": null,
"error": {
"message": "<string>"
},
"meta": null
}Review Submission
Everything needed to show a learner one of their past attempts exactly as they saw it on submitting: the assessment content, their answers, and the marking, with the expected answer on anything missed and the teacher’s comments on open responses.
Pass the response to the SDK’s EdpireAssessment.review() unchanged. It
renders the paper read-only.
Call it from your server, after checking the attempt belongs to the
signed-in learner, and relay the result to the browser. Also pass
learner_ref: a submission belonging to anyone else then returns 404,
so a bug in your own ownership check cannot show one learner another’s
paper.
Answer keys are never included. The reveal fields (display_answer,
detail.correctChoiceIds, detail.correctPairings) are the same ones
the submit response returned at the end of the attempt.
The paper is drawn from the assessment’s current published content. Answers and marks are keyed by question and node, so they survive a republish.
curl --request GET \
--url https://edpire.com/api/v1/submissions/{id}/review \
--header 'Authorization: Bearer <token>'import requests
url = "https://edpire.com/api/v1/submissions/{id}/review"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://edpire.com/api/v1/submissions/{id}/review', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://edpire.com/api/v1/submissions/{id}/review",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://edpire.com/api/v1/submissions/{id}/review"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://edpire.com/api/v1/submissions/{id}/review")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://edpire.com/api/v1/submissions/{id}/review")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"submission": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assessment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"learner_ref": "<string>",
"status": "<string>",
"attempt_number": 123,
"total_attempts": 123,
"score": 123,
"max_score": 123,
"percentage": 123,
"passed": true,
"passing_score_percent": 123,
"is_fully_graded": true,
"awaiting_manual_grading": true,
"submitted_at": "2023-11-07T05:31:56Z"
},
"assessment": {
"annex": {},
"exercises": [
{
"id": "<string>",
"sharedContext": {},
"questions": [
{
"id": "<string>",
"version": "<string>",
"content": {},
"answerKeys": [
"<unknown>"
]
}
]
}
]
},
"meta": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"category": "<string>",
"language": "en",
"settings": {}
},
"branding": {},
"answers": {
"exerciseAnswers": [
{
"exerciseId": "<string>",
"questionAnswers": [
{
"questionId": "<string>",
"answers": [
{}
]
}
]
}
]
},
"exercise_feedback": [
{
"exercise_id": "<string>",
"questions": [
{
"question_id": "<string>",
"node_results": [
{
"node_id": "<string>",
"status": "correct",
"score": 123,
"max_score": 123,
"feedback": "<string>",
"display_answer": "<string>",
"detail": {},
"teacher_feedback": [
{}
]
}
]
}
]
}
]
},
"error": {
"message": "<string>"
},
"meta": {}
}{
"data": null,
"error": {
"message": "<string>"
},
"meta": null
}{
"data": null,
"error": {
"message": "<string>"
},
"meta": null
}Authorizations
API key starting with edp_live_. Pass via Authorization: Bearer edp_live_xxx.
Scopes: read:assessments, write:assessments, read:results, write:submissions.
Path Parameters
Query Parameters
The learner you expect to own this attempt. Strongly recommended.