List assessment results

One row per candidate run of an assessment, unified across standalone
and pipeline assessments. Read source on every row before joining —
it tells you which system produced the row and therefore what
candidate_id refers to.

This is a top-level resource rather than
/assessments/{id}/results because a single query legitimately spans
assessments. Narrow with assessment_id when you want just one.

Ordering

created_at only. It is the one ordering key backed by a real column
on both underlying tables, which lets the two sides be paged in the
database and merged exactly. score and submitted_at are derived
on the standalone side (see AssessmentResult) and cannot be ordered
server-side. Pinning source does NOT unlock extra sort keys —
sort=-score returns 400 regardless of source. Sort a retrieved
page client-side if you need score order.

Deep pagination

When a query can match both sources, each side is read up to
page × per_page rows so the merged page is exact. Beyond 2 000
combined rows that read is refused with 400 pagination_limit_exceeded.

The limit is computed from page × per_page alone, before any row is
read, so only the filters that collapse the query to ONE source lift
it: source=standalone, source=pipeline, or pipeline_id (which
implies pipeline, since standalone assessments have no pipeline). A
single source is paged directly in the database and is not capped.
Other filters — assessment_id, candidate_id, date ranges — reduce
how many pages you need but do NOT raise the limit.

has_more accounts for this: it reports false once the next page
would be unreachable, even if total is larger.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Query Params
integer
≥ 1
Defaults to 1

1-indexed page number.

integer
1 to 200
Defaults to 50

Page size.

string
enum

Restrict to one underlying system. Omit to get both, merged. Pinning
a source is also the escape hatch for deep pagination — a single
source is paged directly in the database with no merge cap.

Allowed:
string
enum
Defaults to -created_at
Allowed:
uuid
uuid

Pipeline-only filter. Supplying it excludes standalone results,
because a standalone assessment has no pipeline. Combining it
with source=standalone is contradictory and returns an empty
page.

uuid

Meaning depends on source. For standalone it matches the
standalone taker's id; for pipeline it matches the pipeline
Candidate.id. The same person taking both kinds of assessment
has two different ids.

string

Comma-separated list of complete, in_progress,
pending_credits, pending_valid_openai_key. Validated — an
unrecognised value returns 400 invalid_filter rather than an
empty page. complete and in_progress apply to both sources.
pending_credits and pending_valid_openai_key are
standalone-only and match no pipeline rows.

date-time
date-time
Responses

Language
Credentials
Bearer
hk_live_<secret>
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json