sk_test_ key is served entirely from a small fixed dataset. Reads return realistic
sample data; writes report success and change nothing. It’s the same code path as
live — same validation, same response shapes, same rate limits — with a different data
source.
Nothing in test mode touches your real data. You cannot see, create, modify or delete a
real assessment, candidate or submission with a test key. Build freely.
The sandbox is stateless
This is the one thing that surprises people: The upside is that responses are byte-stable. The same request always returns the same bytes (apart fromrequest_id), so you can snapshot-test your integration against us.
Sample data
The sandbox is one small, internally consistent organization: three challenges, two assessments, four invitations across different statuses, and three submissions — one fully evaluated with a complete report, one in progress, one submitted but not yet graded. These ids resolve in test mode and are safe to hard-code:Reproducing errors
Most failures happen naturally: send an invalid body for a400, use a read-only key on a
write for a 403, hammer an endpoint for a 429, or revoke the already-evaluated
invitation above for a 400.
Two cases can’t be triggered that way, so the sandbox recognises these values:
What test mode does not do
It doesn't send email
It doesn't send email
Creating an invitation returns a realistic
invitation_url, but no email is sent and
the token is not redeemable. To exercise the candidate side, use a live key on a real
assessment.It doesn't run grading
It doesn't run grading
Reports come from fixed sample data rather than a real evaluation. The evaluated
submission always returns the same report.
Workspace downloads are always null
Workspace downloads are always null
workspace_archive_url is null for every sandbox submission — there’s no real
archive to sign. Treat null as “not available”, which is also what live returns
before a candidate submits.Rate limits are real
Rate limits are real
Test keys draw on the same hourly quotas as live keys, deliberately, so you can see
and handle a real
429 with its Retry-After header before you go to production.