curl --request POST \
--url https://api.evalezy.com/v1/exams/{examId}/open \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.evalezy.com/v1/exams/{examId}/open"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.evalezy.com/v1/exams/{examId}/open', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"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>"
}{
"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": "conflict",
"message": "The request conflicts with the current state.",
"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"
}
}Open an exam
Opens a draft exam so it accepts submissions. The exam needs at least one question, and every rubric must add up to its question’s max marks. Opening an exam that is already open changes nothing.
Scope: evaluation:write
curl --request POST \
--url https://api.evalezy.com/v1/exams/{examId}/open \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.evalezy.com/v1/exams/{examId}/open"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.evalezy.com/v1/exams/{examId}/open', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"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>"
}{
"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": "conflict",
"message": "The request conflicts with the current state.",
"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.
Headers
Optional. Any unique string of 1-255 printable ASCII characters (a UUID works). Retrying with the same key within 48 hours replays the first response with Idempotent-Replayed: true.
255"exam-cbse-sci-10a-2026-10-14"
Path Parameters
Exam id (UUID).
Response
OK
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes