REST API
A versioned HTTP API over the same data the dashboard uses. Available on Professional and above.
API reference
Every endpoint, parameter and response shape, generated from the live OpenAPI specification.
The reference above is generated from the live OpenAPI specification, so it always matches what the server actually accepts. You can also point a code generator at the raw spec.
Authentication
Every request carries an API key as a bearer token:
Authorization: Bearer tu_live_xxxxxxxxxxxx
Keys come in two flavours, distinguished by their prefix: tu_live_ and tu_test_. Create them under Integrations → API keys in the dashboard.
The full key is shown exactly once, at creation. We store only a hash, so we cannot show it to you again and cannot recover it. If you lose it, revoke the key and issue another.
Scopes
A key carries an explicit list of scopes, and a request outside them is refused:
| Scope | Grants |
|---|---|
tests:read / tests:write | Assessments and their questions |
attempts:read / attempts:write | Candidate attempts and results |
candidates:read / candidates:write | Candidate records |
interviews:read / interviews:write | Interviews |
webhooks:manage | Creating and managing webhook endpoints |
* | Everything |
Issue the narrowest set that works. A key with * in a CI job is a key that can delete your assessments if that job is ever compromised.
Versioning
The version is in the path — /api/v1/.... We do not use date-pinned version headers.
A breaking change means a new path prefix, not a silent change to v1. Adding a field to a response is not breaking, so parse defensively and ignore what you do not recognise.
Expiry and rotation
Keys can be given an expiry date, and rotating one is: create the new key, deploy it, then revoke the old. Both work during the overlap, so there is no window where your integration is down.
last_used_at on each key tells you whether anything is still using it before you revoke.
Errors
Errors return a JSON body with an error field and a conventional status code. 402 specifically means the feature requires a higher plan — not that a payment failed.