Skip to content
REST API

Get a practice test attempt

GET
/attempts/{attemptId}

The attempt's questions, the user's answers and, once submitted, the correct answers and a verdict for each question. While the attempt is open no question has an answer or explanation. After a submit, poll this until phase is no longer grading.

Required scopes: tests:view or tests:attempt

Authorization

AuthorizationBearer <token>

In: header

Path Parameters

attemptId*string

Practice test attempt id, scoped to the key's user.

Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/attempts/497f6eca-6276-4993-bfeb-53cbbbba6f08"
{  "data": {    "id": "1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",    "testId": "6e5d4c3b-2a19-4f08-8e7d-6c5b4a392817",    "phase": "open",    "startedAt": "2026-01-15T09:30:00.000Z",    "deadlineAt": "2026-01-15T09:40:00.000Z",    "expired": false,    "finishedAt": null,    "score": null,    "gradingStatus": "not_required",    "questions": [      {        "kind": "multiple-choice",        "prompt": "Which organelle makes ATP?",        "choices": [          "Nucleus",          "Mitochondrion",          "Ribosome"        ],        "difficulty": "recall",        "answer": null,        "explanation": null      },      {        "kind": "short-answer",        "prompt": "Why do cells need a membrane?",        "choices": null,        "difficulty": "understanding",        "answer": null,        "explanation": null      }    ],    "answers": [      "Mitochondrion",      null    ],    "perQuestion": []  }}