Sessions
A session represents one candidate’s attempt at one assessment. Sessions progress through a defined lifecycle from invitation to review. Session statuses:invited → setup → in_progress → submitted → scoring → scored → reviewed
List Sessions
integer
default:"20"
Results per page (1-100)
integer
default:"0"
Offset for pagination
string
Filter by assessment
string
Filter by candidate
string
Filter by status:
invited, setup, in_progress, submitted, scoring, scored, reviewedResponse
Response
Get Session
Response
Response
Delete Session
Response
Response
Send Reminder
invited, setup, or in_progress) and stamps reminderSentAt. Uses the session’s due date, falling back to the assessment’s.
Fails with 400 when the candidate has already submitted or there is no due date to remind about, and with 429 when a reminder was already sent within the last 24 hours.
Response
Response
Bulk Send Reminder
200, even when some items fail, and each item carries its own outcome. The single-session route above still exists for the per-row action.
string[]
required
Up to 500 session ids. Duplicates are removed before processing.
Response
Response
Change Deadline
dueDate as a calendar day (YYYY-MM-DD); the server resolves it to end-of-day in the org timezone, the same rule the invite flows use. Send an empty or null dueDate to clear the deadline.
Request
Request
Response
Response
dueDate is null when the deadline was cleared.Bulk Change Deadline
dueDate rules as Change Deadline above. This route is dispatch-and-collect: it always returns 200, even when some items fail, and each item carries its own outcome. The single-session route above still exists for the per-row action.
string[]
required
Up to 500 session ids. Duplicates are removed before processing.
string
Calendar day (
YYYY-MM-DD) or day and time (YYYY-MM-DDTHH:mm), applied to every session in the list. Empty or null clears the deadline for all of them.Response
Response
Advance Phase
This endpoint is authenticated via the candidate session token, not an API key.
object
The current phase’s deliverable content (email state, document state, etc.)
integer
default:"0"
Seconds remaining on the current phase timer when the candidate advanced
Response
Response
Checkpoint Phase
This endpoint is authenticated via the candidate session token, not an API key.
object
required
The current phase’s deliverable content (workflow state, email state, etc.)
boolean
default:"false"
When
true, also persist a point-in-time snapshot of the deliverable for the replay/history timeline, not just the latest interim save.Response
Response
Reopen Session
in_progress, and any score is marked superseded so a stale report cannot mail. The clock starts only when the candidate opens their link and resumes. That can be hours later, and no time is spent in between.
Phases before fromPhaseIndex keep their work. The chosen phase and every phase after it are cleared, so the candidate does that work again.
Owner or admin only, and a human actor only. An API key has no role, so it gets
403. The action is gated at the sessions.reopen capability, the same tier as a permanent delete, because it discards work and supersedes a score a reviewer may already have read.integer
required
Zero-based index of the phase to reopen at. Must be within the assessment’s phase list.
Request
Request
Response
Response
assessUrl to the candidate: The reopened session waits until they open it. Errors: 400 when fromPhaseIndex is not an integer of 0 or more, is out of range, or the assessment has no phases; 400 when the session has not started; 404 when the session is not in your organization.Get Human Review
null when nobody has recorded one. For an organization whose use case is hiring, every submitted session must be reviewed by a person; the AI score is advisory and this record is the decision. Reviewer and above, or an API key.
Response
Response
reviewedBy is null when an API key recorded the decision or the member was later removed. Errors: 404 when the session is not in your organization.Record Human Review
moving_on means the candidate is moving on to the next round, not_moving_on means they are not. Member and above, or an API key. Calling it again overwrites the decision on the session; every call appends a session.review_recorded entry to the organization’s audit log, which cannot be changed, so the full history of decisions is kept there.
Until a decision is recorded, the member who invited the candidate receives review reminders by email (48 hours after submission, then every 3 days, at most 5) when the organization’s use case is hiring.
string
required
moving_on or not_moving_on.string
The reason, up to 2000 characters. Required when
decision is not_moving_on; optional otherwise. Trimmed; an empty string clears it.Request
Request
Response
Response
400 when decision is not one of the two values, note is not a string, note is empty on a not_moving_on decision, or the candidate has not submitted yet; 403 for a reviewer-tier member or a candidate; 404 when the session is not in your organization.Review Activity
Records what a signed-in member looks at on a session: the read-only workspace (Review work), the session replay, and the Score Breakdown tab. When a review outcome is recorded, the audit entry stores a summary of it: when the work and the replay were first opened, how long each was visible, and whether the score was seen before the work.string
required
workspace, replay, or score.Response
Response
400 for an unknown surface; 403 for an API key or a candidate; 404 when the session is not in your organization.Resume Reopened Phase
This endpoint is authenticated via the candidate session token, not an API key. It is the only route that can start a paused clock, so an admin who opens the review render never spends the candidate’s minutes.
Response
Response
timeRemaining is in seconds.Get Deliverable Versions
deliverable_snapshot events behind it, which record the full deliverable
about every 15 seconds and only when it changed.
Without versionId the response lists the versions and their metadata, with no
content. Supply versionId to read one version’s full state. Content is split
out because one phase can hold hundreds of versions of a whole document.
toolCallsSince lists the AI’s deliverable-writing tool calls recorded between
the previous version and this one. It is an observation, not a statement about
who wrote the version: the candidate can type in the same window, and a tool
call can fail.
string
Read one version’s full state instead of the list. The id comes from a row of the list.
Response (list)
Response (list)
Response (one version)
Response (one version)
Download Session Package
Content-Type: application/zip,
Content-Disposition: attachment). The zip contains:
- Each submitted deliverable as a file. A docx phase and an email phase become
a
.docx. An xlsx or pptx phase keeps its own file type. - The candidate’s chat with the AI agent, as a
.docx. Tool calls, skill use, and connector queries show as marker lines. - The scores, as an
.xlsxwith three tabs. Overview has the candidate, the submit time, the time taken, the total score and level, the assessment summary, and one row per category and sub-dimension with score, level, and summary. Behaviors has one row per judged behavior: category, sub-category, question, weight, verdict, evidence, and judge rationale. Priority Skills has the evidence-only findings. It has no score.
400. Org-scoped; admin or API-key auth (read tier). The scores come from the
same projections as the candidate review page, so the workbook and the page
agree.
Response - 200 OK (application/zip)
Response - 200 OK (application/zip)
Response - 400 (not a v7 score)
Response - 400 (not a v7 score)
Record Session Chunk
This endpoint is authenticated via the candidate session token, not an API key.
array
required
Batch of rrweb events for this chunk
integer
required
Client-assigned monotonic chunk sequence number (0-based, incremented once per flush)
string
required
ISO timestamp of the first event in the batch
string
required
ISO timestamp of the last event in the batch
Response
Response
Get Session Recording
hasRecording is false otherwise.
Response
Response
Preview Feedback Report
/assess/:token/feedback link, rendered on the candidate detail page. Unlike the candidate-facing route, this does not gate on release: it’s available as soon as the session is scored, whether or not feedback has actually been released to the candidate. Read-only; never sends anything or changes release state.
Response
Response
release object mirrors the eligibility signals the release cron uses, so the Feedback tab can explain why a scored session’s feedback hasn’t gone out yet.managerGrades is the reviewer’s own 0-4 grades for this session, keyed by sub-criterion id (scores.scoring_provenance.manager). These label the AI’s score for comparison and never change it — see Record a calibration grade.Edit Feedback Report Content
text is dropped, and an empty array is accepted (deleting every item is a legitimate edit).
Scores are not editable here by design. To disagree with a number, record a calibration grade instead — that labels the AI’s score without changing the candidate’s result.
Request
Request
Response
Response
404 when the session has not been scored, 400 when a list is not an array or exceeds 20 items.The candidate report is live-read, so an edit to an already-released report is visible to the candidate immediately. This route does not gate on
feedback_released_at; the admin UI warns before saving in that case.Preview Feedback Email
sendFeedbackEmail would send (same template, same score-derived content), but returns it as JSON instead of sending. Never calls the email provider.
Response
Response