Organization / HRMS Interview API
Server-to-server Integration API for HRMS and other systems. Authenticate with an organization API key to create members, schedule collaborative coding interviews, and use instant booking — not a user login session.
Base URL
https://intervista.io/api/v1Rate limit
60 requests per minute per API key
Authentication
- In the org dashboard, open API keys and create a key.
- Copy the plaintext key once (
iv_org_…). - Send it on every request using one of the headers below.
Bearer header (preferred)
Authorization: Bearer iv_org_xxxxxxxxAPI key header
X-Api-Key: iv_org_xxxxxxxxAbilities
New keys receive all v1 abilities by default. Missing abilities return 403.
| Ability | Covers |
|---|---|
| org:read | GET /organization |
| members:read | GET /members, GET /members/{id} |
| members:write | POST /members, PATCH /members/{id}, DELETE /members/{id}; also required for POST /interviews/instant |
| interviews:read | GET /interviews, GET /interviews/{uuid} |
| interviews:write | Create, instant schedule, update, cancel, reschedule, add interviewers, resend invites, webhook config |
| results:read | Rubric scores, code snapshot |
Endpoints
All paths are relative to /api/v1. Interview create/update contracts match the org dashboard; plan entitlements still apply. AI flags cannot be enabled via PATCH.
| Method | Path | Ability | Notes |
|---|---|---|---|
| GET | /organization | org:read | Org profile and plan summary |
| GET | /members | members:read | ?kind=candidate|interviewer, ?q= |
| POST | /members | members:write | Create candidate or interviewer |
| GET | /members/{id} | members:read | — |
| PATCH | /members/{id} | members:write | — |
| DELETE | /members/{id} | members:write | Soft-deactivate roster member |
| GET | /interviews | interviews:read | ?status=, pagination |
| POST | /interviews/instant | interviews:write + members:write | Upsert by email; duration 15–120; optional external_ref; returns passcode + join URLs |
| POST | /interviews | interviews:write | Duration 15–120; optional external_ref; returns uuid + passcode + join URLs |
| GET | /interviews/{uuid} | interviews:read | Includes passcode + join.login_url (same as invite email) |
| PATCH | /interviews/{uuid} | interviews:write | — |
| POST | /interviews/{uuid}/cancel | interviews:write | Works with org API keys; emits interview.cancelled webhook |
| POST | /interviews/{uuid}/reschedule | interviews:write | Works with org API keys; duration 15–120 |
| POST | /interviews/{uuid}/interviewers | interviews:write | — |
| POST | /interviews/{uuid}/resend-invites | interviews:write | — |
| GET | /interviews/{uuid}/rubric-scores | results:read | — |
| GET | /interviews/{uuid}/code-snapshot | results:read | — |
| GET | /webhook | interviews:write | Outbound webhook URL + secret configured? |
| PUT | /webhook | interviews:write | Set url / secret; events: interview.completed, interview.cancelled |
Example flow
Set API to your API host (without trailing slash) and ORG_API_KEY to your key.
1. Quick book (instant)
curl -sS -X POST "$API/v1/interviews/instant" \
-H "Authorization: Bearer $ORG_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"candidate_name": "Ada Lovelace",
"candidate_email": "ada@example.com",
"interviewer_name": "Grace Hopper",
"interviewer_email": "grace@example.com",
"scheduled_start": "2026-08-01T10:00:00+05:30",
"duration_minutes": 30,
"timezone": "Asia/Kolkata",
"external_ref": "booking_123"
}'2. Create a candidate (multi-step)
curl -sS -X POST "$API/v1/members" \
-H "Authorization: Bearer $ORG_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"name": "Ada Lovelace",
"email": "ada@example.com",
"kind": "candidate"
}'3. Create an interviewer (multi-step)
curl -sS -X POST "$API/v1/members" \
-H "Authorization: Bearer $ORG_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"name": "Grace Hopper",
"email": "grace@example.com",
"kind": "interviewer"
}'4. Schedule an interview (multi-step)
curl -sS -X POST "$API/v1/interviews" \
-H "Authorization: Bearer $ORG_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"title": "Backend loop — Ada",
"scheduled_start": "2026-08-01T10:00:00+05:30",
"duration_minutes": 60,
"timezone": "Asia/Kolkata",
"candidate_user_ids": [123],
"interviewer_user_ids": [456],
"external_ref": "booking_456",
"rubric_dimensions": [
{
"key": "problem_solving",
"label": "Problem solving",
"max_score": 5,
"description": "Breaks down the problem clearly"
}
],
"send_invites": true
}'5. Cancel / reschedule
curl -sS -X POST "$API/v1/interviews/$UUID/cancel" \
-H "Authorization: Bearer $ORG_API_KEY" \
-H "Accept: application/json"
curl -sS -X POST "$API/v1/interviews/$UUID/reschedule" \
-H "Authorization: Bearer $ORG_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"scheduled_start": "2026-08-02T11:00:00+05:30",
"duration_minutes": 45,
"timezone": "Asia/Kolkata",
"notify_participants": true
}'6. Configure outbound webhook
curl -sS -X PUT "$API/v1/webhook" \
-H "Authorization: Bearer $ORG_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"url": "https://partner.example/hooks/intervista",
"generate_secret": true
}'7. Read details / results
curl -sS "$API/v1/interviews/$UUID" \
-H "Authorization: Bearer $ORG_API_KEY" \
-H "Accept: application/json"
curl -sS "$API/v1/interviews/$UUID/rubric-scores" \
-H "Authorization: Bearer $ORG_API_KEY" \
-H "Accept: application/json"
curl -sS "$API/v1/interviews/$UUID/code-snapshot" \
-H "Authorization: Bearer $ORG_API_KEY" \
-H "Accept: application/json"Out of scope (v1)
- Billing checkout and Razorpay webhooks
- Live-room Agora / collab tokens
- In-room AI chat
- AI rubric generate-from-JD
Manage keys in the org dashboard · Contact us