GET /v1/platform/evaluations/:id
Retrieves a single evaluation request by its ID. Use this endpoint to check the status and results of an evaluation, especially when using async mode.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | The evaluation request ID (UUID) |
Example Request
curl https://api.tutorflow.io/v1/platform/evaluations/2f4ad455-1e8e-4b6c-9f3a-7ebf4cf6f483 \
-H "Authorization: Bearer tf_platform_..."Response
Returns the full evaluation object. See Create Evaluation for the complete response schema.
{
"id": "2f4ad455-1e8e-4b6c-9f3a-7ebf4cf6f483",
"status": "COMPLETED",
"evaluationType": "open_ended",
"tier": "advanced",
"score": 8,
"maxScore": 10,
"normalizedScore": 0.8,
"confidence": 0.92,
"strengths": ["Correctly identifies evaporation as a key process"],
"mistakes": ["Did not mention condensation"],
"suggestions": ["Include condensation as a step"],
"feedbackSummary": "Strong understanding of the water cycle.",
"nextStep": "Study the condensation phase.",
"isTerminal": true,
"createdAt": "2026-03-19T10:30:00Z",
"completedAt": "2026-03-19T10:30:01Z"
}Polling Pattern
When using async mode, poll this endpoint until isTerminal is true.
The pollAfterMs field in the response suggests how long to wait before the next request.
async function waitForResult(evaluationId, apiKey) {
while (true) {
const res = await fetch(
`https://api.tutorflow.io/v1/platform/evaluations/${evaluationId}`,
{ headers: { Authorization: `Bearer ${apiKey}` } }
);
const data = await res.json();
if (data.isTerminal) return data;
await new Promise(r => setTimeout(r, data.pollAfterMs ?? 1000));
}
}Alternatively, use Webhooks to receive
evaluation.completed or evaluation.failed events instead of polling.
Status Lifecycle
| Status | Meaning |
|---|---|
PENDING | Queued for processing (async mode) |
PROCESSING | Currently being evaluated by AI |
COMPLETED | Successfully graded. Results available. |
FAILED | Evaluation failed after all retry attempts |