List exams
curl --request GET \
--url https://api.evalezy.com/v1/exams \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.evalezy.com/v1/exams"
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', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "<string>",
"status": "<string>",
"mode": "<string>",
"title": "<string>",
"external_ref": "<string>",
"conducted_on": "<string>",
"subject": "<string>",
"level": "<string>",
"board": "<string>",
"answer_language": "<string>",
"feedback_language": "<string>",
"instructions": "<string>",
"blind": true,
"total_marks": 123,
"paper_max": 123,
"question_count": 123,
"dashboard_url": "<string>",
"questions": [
{
"id": "<string>",
"label": "<string>",
"parent_label": "<string>",
"section": "<string>",
"type": "<string>",
"text": "<string>",
"max_marks": 123,
"negative_marks": 123,
"options": [
{
"label": "<string>",
"option_id": "<string>",
"text": "<string>"
}
],
"correct_options": [
"<string>"
],
"answer": {},
"model_answer": "<string>",
"rubric": {},
"word_limit": 123,
"expects_diagram": true,
"assess_language": true,
"tags": {},
"external_id": "<string>",
"rubric_version": 123,
"rubric_sync": "<string>",
"warnings": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
]
}
],
"choice_groups": [
{
"id": "<string>",
"label": "<string>",
"question_labels": [
"<string>"
],
"question_ids": [
"<string>"
],
"attempt": 123,
"policy": "<string>"
}
],
"candidates": [
{}
],
"rubric": {
"version": 123,
"locked": true,
"questions_with_rubric": 123,
"questions_without_rubric": 123,
"sync": "<string>",
"sync_error": {}
},
"quote": {},
"stats": {},
"warnings": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"opened_at": "<string>",
"finalized_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"class": "<string>"
}
],
"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": "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"
}
}Exams
List exams
Lists the exams this institute created through the API, ordered by last change. Exams created in the dashboard are not listed.
Scope: evaluation:read
GET
/
exams
List exams
curl --request GET \
--url https://api.evalezy.com/v1/exams \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.evalezy.com/v1/exams"
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', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "<string>",
"status": "<string>",
"mode": "<string>",
"title": "<string>",
"external_ref": "<string>",
"conducted_on": "<string>",
"subject": "<string>",
"level": "<string>",
"board": "<string>",
"answer_language": "<string>",
"feedback_language": "<string>",
"instructions": "<string>",
"blind": true,
"total_marks": 123,
"paper_max": 123,
"question_count": 123,
"dashboard_url": "<string>",
"questions": [
{
"id": "<string>",
"label": "<string>",
"parent_label": "<string>",
"section": "<string>",
"type": "<string>",
"text": "<string>",
"max_marks": 123,
"negative_marks": 123,
"options": [
{
"label": "<string>",
"option_id": "<string>",
"text": "<string>"
}
],
"correct_options": [
"<string>"
],
"answer": {},
"model_answer": "<string>",
"rubric": {},
"word_limit": 123,
"expects_diagram": true,
"assess_language": true,
"tags": {},
"external_id": "<string>",
"rubric_version": 123,
"rubric_sync": "<string>",
"warnings": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
]
}
],
"choice_groups": [
{
"id": "<string>",
"label": "<string>",
"question_labels": [
"<string>"
],
"question_ids": [
"<string>"
],
"attempt": 123,
"policy": "<string>"
}
],
"candidates": [
{}
],
"rubric": {
"version": 123,
"locked": true,
"questions_with_rubric": 123,
"questions_without_rubric": 123,
"sync": "<string>",
"sync_error": {}
},
"quote": {},
"stats": {},
"warnings": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"opened_at": "<string>",
"finalized_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"class": "<string>"
}
],
"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": "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.
Query Parameters
Filter by exam status.
Available options:
draft, open, finalized, deleted ISO 8601 UTC time, e.g. 2026-10-01T09:00:00Z. Only rows updated since then.
Example:
"2026-10-01T09:00:00Z"
next_cursor from the previous page, passed as is.
Page size, 1-200. Default 50.
Required range:
1 <= x <= 200