Quickstart
Mint a test key and make your first request in about two minutes.
API reference
Every endpoint, with an interactive playground.
Test mode
Build the whole integration against sample data before touching anything real.
Understanding reports
What a ship score, verdict and the four scored areas actually mean.
What you can build
The API covers the full hiring loop:1
Pick a challenge
Browse the shared library plus any challenges private to your organization.
2
Create an assessment
An assessment is a posting: one challenge, a time limit, and the tasks you want graded.
3
Invite candidates
Each invitation returns a link. Send it yourself, or let us email it.
4
Collect submissions
Poll for submissions and read the report once grading finishes.
Design principles
Worth knowing before you write any code, because they explain choices that would otherwise look surprising.One organization per key, always
One organization per key, always
A key resolves to exactly one organization and cannot see another. Requesting a
resource that belongs to someone else returns
404, identical to a resource that
doesn’t exist — the API will not confirm an id exists somewhere you can’t see.Errors are machine-readable
Errors are machine-readable
Switch on
error.code, never on the message. Codes are stable; messages are written
for humans and may be reworded.Test mode is a first-class environment
Test mode is a first-class environment
A
sk_test_ key is served from a fixed dataset. Reads return realistic data, writes
report success and change nothing. Same validation, same response shapes and same
rate limits as live.We withhold what candidates could game
We withhold what candidates could game
Hidden test paths, grading rubrics and the internal scoring taxonomy never appear in a
response. You get the signal — ship score, verdict, the four scored areas, integrity
flags — not the machinery that produced it.
Base URL and versioning
v1 gets additive changes only: new endpoints and new response fields, never a removal or
a rename. Anything breaking would ship as v2. Treat unknown response fields as forward
compatibility rather than an error.
The machine-readable description lives at
/api/v1/openapi.json — import it into
Postman, or generate a client from it.
These pages are generated from the same code that serves the API. Every example response
is real serializer output, so the same request with a test key returns what you see
here, byte for byte.