curl --request GET \
--url https://api.evalezy.com/v1/exams/{examId}/results \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.evalezy.com/v1/exams/{examId}/results"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.evalezy.com/v1/exams/{examId}/results', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"submission_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"exam_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"candidate": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"name": "<string>",
"roll_number": "<string>"
},
"status": "<string>",
"needs_review": true,
"review_reasons": [
"<string>"
],
"finalized": true,
"finalized_at": "2023-11-07T05:31:56Z",
"rubric_version": 123,
"totals": {
"awarded": 123,
"max": 123,
"percentage": 123,
"questions_graded": 123,
"questions_failed": 123
},
"questions": [
{
"question_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "<string>",
"section": "<string>",
"status": "graded",
"counted": true,
"awarded": 123,
"max": 123,
"source": "<string>",
"confidence": 123,
"needs_review": true,
"review_reasons": [
"<string>"
],
"extracted_answer": "<string>",
"feedback": "<string>",
"criteria": [
{
"name": "<string>",
"awarded": 123,
"max": 123,
"reason": "<string>"
}
],
"model_answer": "<string>",
"annotations": [
{}
],
"review": {
"reviewer": {
"ref": "<string>",
"name": "<string>"
},
"reason": "<string>",
"edited": true,
"edited_at": "2023-11-07T05:31:56Z",
"approved": true
},
"error": {
"code": "<string>",
"message": "<string>"
}
}
],
"checked_copy": {
"available": true,
"download_path": "/submissions/{id}/checked-copy"
},
"graded_at": "2023-11-07T05:31:56Z",
"credits_charged": 123,
"error": {}
}
],
"next_cursor": "<string>",
"has_more": true
}{
"error": {
"code": "malformed_json",
"message": "The request body is not valid JSON for this endpoint.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f"
}
}{
"error": {
"code": "invalid_api_key",
"message": "The API key is not valid.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f"
}
}{
"error": {
"code": "insufficient_scope",
"message": "This API key lacks the evaluation:write scope.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f",
"details": {
"required_scope": "evaluation:write"
}
}
}{
"error": {
"code": "not_found",
"message": "The resource was not found.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f"
}
}{
"error": {
"code": "validation_failed",
"message": "questions[0].max_marks is required.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f",
"details": {
"errors": [
{
"field": "questions[0].max_marks",
"code": "required",
"message": "max_marks is required."
}
]
}
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests. Retry after 2 s.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f"
}
}List an exam's results
One result per live submission of the exam, in the same shape as Get a result. limit is 1-50 (default 20). Filter with finalized and updated_since. format=csv is not available yet.
Scope: evaluation:read
curl --request GET \
--url https://api.evalezy.com/v1/exams/{examId}/results \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.evalezy.com/v1/exams/{examId}/results"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.evalezy.com/v1/exams/{examId}/results', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"submission_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"exam_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"candidate": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"name": "<string>",
"roll_number": "<string>"
},
"status": "<string>",
"needs_review": true,
"review_reasons": [
"<string>"
],
"finalized": true,
"finalized_at": "2023-11-07T05:31:56Z",
"rubric_version": 123,
"totals": {
"awarded": 123,
"max": 123,
"percentage": 123,
"questions_graded": 123,
"questions_failed": 123
},
"questions": [
{
"question_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "<string>",
"section": "<string>",
"status": "graded",
"counted": true,
"awarded": 123,
"max": 123,
"source": "<string>",
"confidence": 123,
"needs_review": true,
"review_reasons": [
"<string>"
],
"extracted_answer": "<string>",
"feedback": "<string>",
"criteria": [
{
"name": "<string>",
"awarded": 123,
"max": 123,
"reason": "<string>"
}
],
"model_answer": "<string>",
"annotations": [
{}
],
"review": {
"reviewer": {
"ref": "<string>",
"name": "<string>"
},
"reason": "<string>",
"edited": true,
"edited_at": "2023-11-07T05:31:56Z",
"approved": true
},
"error": {
"code": "<string>",
"message": "<string>"
}
}
],
"checked_copy": {
"available": true,
"download_path": "/submissions/{id}/checked-copy"
},
"graded_at": "2023-11-07T05:31:56Z",
"credits_charged": 123,
"error": {}
}
],
"next_cursor": "<string>",
"has_more": true
}{
"error": {
"code": "malformed_json",
"message": "The request body is not valid JSON for this endpoint.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f"
}
}{
"error": {
"code": "invalid_api_key",
"message": "The API key is not valid.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f"
}
}{
"error": {
"code": "insufficient_scope",
"message": "This API key lacks the evaluation:write scope.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f",
"details": {
"required_scope": "evaluation:write"
}
}
}{
"error": {
"code": "not_found",
"message": "The resource was not found.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f"
}
}{
"error": {
"code": "validation_failed",
"message": "questions[0].max_marks is required.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f",
"details": {
"errors": [
{
"field": "questions[0].max_marks",
"code": "required",
"message": "max_marks is required."
}
]
}
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests. Retry after 2 s.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f"
}
}Authorizations
Your institute's API key, vak_eval_ followed by 48 hex characters. An institute admin creates keys in the dashboard under Settings -> Integrations -> API keys.
Path Parameters
Exam id (UUID).
Query Parameters
json (default). csv is not available yet and returns 422 feature_not_available.
json, csv true or false.
true, false ISO 8601 UTC time, e.g. 2026-10-01T09:00:00Z. Only rows updated since then.
"2026-10-01T09:00:00Z"
next_cursor from the previous page, passed as is.
Page size, 1-50. Default 20.
1 <= x <= 50Comma-separated: annotations, model_answer. extracted_answer is included by default; -extracted_answer leaves it out.
"model_answer"