- What is TestInvite?
- Build Your First Test
- Run Your First Assessment
- Taking the Assessment
- Viewing the Results
- Question Bank Overview
- Common Question Features
- Scoring
- Question Types
- Question Authoring
- Browsing Questions
- Content Blocks
- Media Library
- Metadata Rules & Schema
- Roles & Access
- Tests Overview
- My Tests
- Creating a Test
- The Test Editor
- Test Settings
- Sections & Pages
- Adding Questions
- Page Builders
- Test Profile
- Reporting
- Test Papers
- Analytics
- Publishing a Test
- Test Library
- Marketplace
- Tasks Overview
- Creating a Task
- Task Dashboard
- Steps
- Task Settings
- Candidates
- Test Sessions
- Sent Mails
- Proctoring
- Analytics
- Analytics Overview
- Test Analytics
- Question Analytics
- Per-Question Analytics
- Results Explorer
- Segment Analysis
Test Sessions & Results
Read test sessions and their results through the REST API — the richest resource in the API, with score breakdowns by section, dimension, and effect, plus proctoring evidence and answer sub-resources.
Test sessions (called “test instances” internally) are always scoped to one Task — every endpoint below is under /tasks/:taskId/test-instances. Reading requires List tickets; the result fields specifically also require Query test results.
Basic vs. Detailed
- basic —
testInstanceId, taskId, stepId, ticketId, status ("STARTED"|"COMPLETE"|"RESETUP"), ignored, result.resultisfalseuntil complete, then{ completedAt, scoreboard: { pointsAchieved, maxAchievablePoints, achievementRatio } }. - detailed — adds
organizationId, candidate: { id, kind }, folder, group, labels, tags, and expandsresultwithnoOfQuestions, sections[], dimensions[](each withsubDimensions[]), andeffects[](each withsubEffects[]).
List, Fetch
GET /tasks/:taskId/test-instances— query params:mode, limit, page, candidateId, externalId.candidateIdandexternalIdare mutually exclusive — passing both returns an error.GET /tasks/:taskId/test-instances/:id— query param:mode.
Search — Cursor Pagination
POST /tasks/:taskId/test-instances/filter — query params: mode, limit, lastDocId. Unlike every other Search endpoint, this one paginates by cursor, not by page number: pass the previous response's lastDocId to get the next batch. The response is { testInstances: [...], pagination: { limit, lastDocId, next } }, where next is a ready-to-use query string.
The filter body is one of two kinds:
{ kind: "meta", group?, label?, stepId?, status?, from?, to? }— general filters, AND-combined.{ kind: "info", displayName?, email?, credential1?, code?, uniqId? }— pinpoint search by candidate info.
Expand
POST /tasks/:taskId/test-instances/:id/expand — body: { expand: ["test", "uniqId", "creditCost", "roomForm", "identityPhoto"] }. Returns the detailed test instance plus whichever of:
test—{ source, testId, organizationId }, where source tells you if it's your own test, from the marketplace, or from the talent library.uniqId— the candidate's external tracking ID.creditCost— credits this session consumed.roomForm— the candidate's answers to the pre-assessment access form, if one was collected.identityPhoto—{ url }, the candidate's webcam identity capture, if identity verification was on.
Sub-Resources
- Proctoring Evidences — photos, videos, and screen captures recorded during the session.
- Answers — every question and the candidate's response to it.