Agent Profiles
Define the interviewer — persona, scoring dimensions, tone, and difficulty.
Evaluation Templates
Describe what to assess: role, skills, objective, and the pass bar.
Evaluation Stages
Compose multi-step pipelines — screen → technical → final.
Participants
The people being evaluated. Create them, then schedule sessions.
Sessions
A single AI interview. Schedule it and the invite goes out automatically.
Code Execution
Run candidate code against test cases in Python, JavaScript, or TypeScript.
Base URL
All endpoints are served from a single host and versioned under/api/v1:
Authentication
Authenticate every request with an API key in thex-api-key header. Keys are
created in the dashboard under Developer → API Keys and are prefixed
iv_live_.
Calls made from a signed-in dashboard session can authenticate with cookies
instead of a key. For those requests, pass your team slug as the
accountSlug query parameter so the API can resolve the workspace.Permission scopes
Keys carry granular scopes. A403 means the key is valid but missing the
scope an endpoint requires.
| Scope | Grants access to |
|---|---|
candidates.read / .write / .delete | Participants |
interviews.read / .write | Sessions and agent profiles |
evaluation_templates.read / .write | Evaluation templates |
evaluation_stages.read / .write | Evaluation stages |
Content type
Requests and responses are JSON. SendContent-Type: application/json on
POST and PATCH. Responses are always JSON, except 204 No Content on
successful deletes.
Response shape
Single-resource responses wrap the result in adata field:
meta object with pagination details:
Pagination
List endpoints acceptpage and pageSize query parameters:
1-based page number.
Items per page. Maximum
100.page reaches meta.totalPages.
Idempotency
Creating a session is the one operation you never want to run twice. Pass anidempotency_key in the request body — replaying the same key returns the
original session instead of scheduling a duplicate.
"idempotent": true when a prior session was returned.
Errors
Errors return the appropriate HTTP status with anerror message. Validation
failures (400) also include an issues array pinpointing the offending
fields.
400 — Bad Request
400 — Bad Request
The request body or query failed validation. Inspect
issues for the
specific fields.401 — Unauthorized
401 — Unauthorized
402 — Payment Required
402 — Payment Required
The workspace has no active paid plan, or you’re out of session credits.
403 — Forbidden
403 — Forbidden
The key is valid but lacks the required permission scope.
404 — Not Found
404 — Not Found
The resource doesn’t exist, or your key can’t see it.
409 — Conflict
409 — Conflict
The resource already exists — e.g. a duplicate participant email, or a
duplicate session. Pass
force: true to override the session check.408 / 422 / 502 — Code execution
408 / 422 / 502 — Code execution
408 execution timed out (15s limit), 422 the language doesn’t support
batched execution, 502 the upstream runner failed.5xx. If a burst is throttled, honor the Retry-After
header and back off exponentially.
Timestamps
All timestamps are ISO 8601 in UTC, and should be sent the same way:MCP server
The same engine is available over the Model Context Protocol for use inside Claude, Cursor, and other MCP clients. See Remote MCP Server.Versioning
The current version isv1. Backward-compatible additions (new fields, new
endpoints) ship under v1 without notice — write clients that ignore unknown
fields. Breaking changes ship under a new prefix (v2), and v1 keeps
working for at least 12 months after v2 reaches general availability.