Assessments
Assessments are the core building block of Gradient. Each assessment defines a task, time limits, available data sources, and a scoring rubric.List Assessments
Results per page (1-100)
Offset for pagination
Filter by active status
Response
Response
Get Assessment
Response
Response
orgBranding is null when the org row can’t be loaded.Create Assessment
Requires admin role (owner or admin).
Display name for the assessment
Target role (e.g. “Senior PM”)
The task brief shown to candidates. For multi-phase assessments this is synthesized from the phases and is not required — send
phases instead.Top-level output format:
pptx, docx, xlsx, email, or workflow. For multi-phase assessments this is the spine/default; the per-phase deliverableType inside phases governs each phase’s editor and the AI’s tools.Ordered list of phases for a multi-phase assessment. Each phase has its own
label, deliverableType, taskPrompt, timeMinutes, and optional inboxConfig / workflowConfig. When provided, the top-level taskPrompt is optional and taskTimeMinutes should be the sum of phase times.Connectors (data sources) the candidate’s AI can search. Configured in the wizard’s Connectors & Data step; seed documents are attached on the assessment detail page after creation.
What candidates may do during the assessment. See Candidate Permissions for the keys and defaults.
Reviewer-facing notes:
overview, goodAnswers, pitfalls, buriedInfo (array), and optional per-phase guidance.Total time limit for the assessment (minutes). For multi-phase assessments, the sum of the phase times.
Time allotted for the (legacy) setup phase, in minutes. New assessments have no separate setup phase; leave unset.
URL of the source job description this assessment was built from, if any.
ISO 8601 deadline for the assessment
Deprecated. Automated candidate feedback is not currently delivered, and the toggle has been removed from the UI. The field is still accepted (defaults to
false) but has no effect. feedbackDelayHours is likewise inert.Deprecated companion to
sendFeedback. Accepted but inert — automated candidate feedback is not currently delivered.Response - 201 Created
Response - 201 Created
Update Assessment
name, role, roleId, task_prompt, system_prompt, is_active, jd_link, due_date, scoring_rubric, bonus_phase_enabled, bonus_phase_minutes, setup_time_minutes, task_time_minutes, timer_mode, connector_config, candidate_permissions, phases, admin_guide, best_practices
Role
roleId is the id of an existing roles row to link (Plan 54’s Settings-tab role picker). When provided, the server resolves the role’s title and writes it to the denormalized role string, then reconciles the assessment_roles join table (unlinking whatever was previously linked, linking the new pick) — mirroring the sequence assessment creation already uses (insert with role.title, then a separate link call). role remains independently settable as a raw string for callers that don’t use the picker; sending both role and roleId in the same request lets roleId’s resolved title win. An unknown or soft-deleted roleId returns a not_found error rather than silently no-op-ing.
Best Practices
Thebest_practices field is a JSON array describing “what great looks like” for this task. It anchors the tactical suggestions candidates receive, and is also mined from top-scoring sessions (see Mine Best Practices). Each item:
Blank entries are dropped and a missing
source defaults to "authored" on write.
send_feedback and feedback_delay_hours are still accepted for backward compatibility but are inert — automated candidate feedback is not currently delivered.Candidate Permissions
Thecandidate_permissions field is a JSON object controlling what candidates can do during the assessment:
Response
Response
Mine Best Practices
final_score, reads their prompts and strongest cited evidence, and generalizes a deduped list (no verbatim peer quotes). Authored practices are always preserved and take precedence over mined duplicates.
Idempotent: re-running replaces the previously mined items. Requires at least 8 scored sessions to generalize reliably; below that it skips.
Response
Response
Cohort large enough and practices distilled:Cohort too small (nothing mined):
Delete Assessment
Response
Response
Duplicate Assessment
Requires admin role (owner or admin).
is_active: false, a new id, and the name suffixed with ” (copy)”. Copies the scoring rubric (with calibrationHistory dropped — that audit trail belongs to the original’s scored sessions), phases, connector config, seeded data, available skills, admin guide, best practices, candidate permissions, and the linked role (if any). Does not copy candidates, sessions, scores, connector data, or context documents — the duplicate starts with zero candidates.
Scoring and weights are frozen on an assessment once it’s published (is_active) or already has candidates, even if later un-published — this is the only way to change scoring at that point. The original is left completely untouched.
Response - 201 Created
Response - 201 Created
Invite Candidate
sendEmail is false.
Candidate’s email address
Candidate’s display name
ISO 8601 per-candidate deadline (overrides assessment-level deadline)
When
false, Gradient does not send its default invitation email — the caller is expected to deliver a custom email using the returned inviteUrl. Only affects newly-created sessions; idempotent hits on an existing session never re-send (use POST /api/assessments/:id/invite/resend instead).Response - 201 Created (new session)
Response - 201 Created (new session)
200 OK:
Response - 200 OK (existing session)
Response - 200 OK (existing session)
Batch Invite Candidates
POST /api/assessments/:id/invite: creates/re-uses a candidate and session for each {name, email} pair in one request, instead of one HTTP round trip per candidate. Each row is processed independently — one row failing (e.g. a bad email) doesn’t stop the rest — and the response reports a per-row outcome in the same order as the request.
Array of
{ name: string, email: string, dueDate?: string }. Max 500 per request; larger pastes should be split client-side.Same semantics as the single-invite endpoint, applied to every row.
Response - 200 OK
Response - 200 OK
Resend Invite Email
The session ID to resend the invite for
Response
Response
Export Invited Candidates (CSV)
Content-Type: text/csv, Content-Disposition: attachment). Columns: name, email, link, status, invited_at, submitted_at, due_date, where link is the candidate’s absolute /assess/:token URL. Org-scoped; admin or API-key auth.
Response - 200 OK (text/csv)
Response - 200 OK (text/csv)
AI Draft (Assessment Wizard)
Requires admin role (owner or admin).
POST /api/assessments/create.
Free-text description of what the assessment should measure (min 10 chars).
Optional target role hint; the model biases its draft toward this title.
Optional hint (
pptx, docx, email, workflow). When omitted, the model picks one.Hint that the assessment should be multi-phase. Populates
adminGuide.phases.Draft only the admin guide (used by the “Draft from task prompt” button on the admin-guide wizard step).
When
guideOnly is true, the existing task prompt the guide should describe.When
guideOnly is true, the existing role the guide should describe.Response
Response
Refine assessment with AI
The current task brief to refine.
The instruction, e.g. “make the task harder” or “add a contradiction in the data”.
The current assessment name (may be updated).
Prior conversation turns for context (
{ role: "user" | "assistant", content }). Only the most recent few are replayed to the model.When present, the refine exchange is logged as product feedback for that assessment. It is never written into the brief itself.
Response
Response