Skip to content
REST API

Submit a practice test attempt

POST
/attempts/{attemptId}/submit

Ends the attempt and grades it. Multiple choice, true/false and fill-in answers are graded at once. Short answers go to AI grading, which counts as an AI use, and gradingJobId is its job. Grading never refuses a submit: when AI grading can't start, for example because the month's AI uses are spent, the attempt is still submitted with gradingQueued false and gradingStatus failed, and the user marks the short answers themselves in the app. Submitting again changes nothing and returns alreadySubmitted true.

Required scopes: 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

Header Parameters

Idempotency-Key?string

A client-generated key (1 to 255 visible ASCII characters) that makes this POST safe to retry. A retry with the same key and body replays the original response; the same key with a different body returns 409 idempotency_conflict. Stored for 24 hours.

Match^[\x21-\x7E]{1,255}$
Length1 <= length <= 255

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/attempts/497f6eca-6276-4993-bfeb-53cbbbba6f08/submit" \  -H "Content-Type: application/json" \  -d '{}'
{  "data": {    "alreadySubmitted": false,    "gradingQueued": true,    "gradingJobId": "7d6c5b4a-3f2e-4d1c-8b0a-9f8e7d6c5b4a"  }}