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
Dismiss From Action Needed
actionDismissedAt, or restores it with DELETE.
Presentation only: this affects one list on the dashboard and changes nothing about the session, the candidate, or the reminder. Dismissal is per session, so a candidate who is overdue on two assessments still appears for the other one.
Response
Response
actionDismissedAt is null in the DELETE 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.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 Session Events
integer
default:"100"
Results per page
integer
default:"0"
Offset for pagination
string
Filter by event type (see list below)
connector_browsed, connector_connected, connector_disconnected, skill_uploaded, skill_created, skill_activated (legacy), skill_enabled, skill_disabled, agents_md_edited, memory_added, user_message, ai_response, ai_tool_use, slash_command, manual_edit, slide_added, slide_deleted, slide_reordered, section_added, section_deleted, section_reordered, content_edited, deliverable_downloaded, deliverable_reuploaded, file_uploaded, task_submitted, time_expired, security_flag, ai_feedback, phase_advanced, inbox_item_opened, inbox_item_closed, workflow_run, workflow_prompt_edited, session_opened, session_resumed, session_disconnected, timer_warning, doc_viewed, web_search, chat_cleared, deliverable_text_typed, deliverable_paste
Integrity event types (recorded for reviewer context only — never an auto-penalty): copy_detected, paste_detected, tab_blur, tab_focus, idle_gap, deliverable_paste
Response
Response
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)
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