Back to home

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/v1

Rate limit

60 requests per minute per API key

Authentication

  1. In the org dashboard, open API keys and create a key.
  2. Copy the plaintext key once (iv_org_…).
  3. Send it on every request using one of the headers below.
Bearer header (preferred)
Authorization: Bearer iv_org_xxxxxxxx
API key header
X-Api-Key: iv_org_xxxxxxxx

Abilities

New keys receive all v1 abilities by default. Missing abilities return 403.

AbilityCovers
org:readGET /organization
members:readGET /members, GET /members/{id}
members:writePOST /members, PATCH /members/{id}, DELETE /members/{id}; also required for POST /interviews/instant
interviews:readGET /interviews, GET /interviews/{uuid}
interviews:writeCreate, instant schedule, update, cancel, reschedule, add interviewers, resend invites, webhook config
results:readRubric 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.

MethodPathAbilityNotes
GET/organizationorg:readOrg profile and plan summary
GET/membersmembers:read?kind=candidate|interviewer, ?q=
POST/membersmembers:writeCreate candidate or interviewer
GET/members/{id}members:read—
PATCH/members/{id}members:write—
DELETE/members/{id}members:writeSoft-deactivate roster member
GET/interviewsinterviews:read?status=, pagination
POST/interviews/instantinterviews:write + members:writeUpsert by email; duration 15–120; optional external_ref; returns passcode + join URLs
POST/interviewsinterviews:writeDuration 15–120; optional external_ref; returns uuid + passcode + join URLs
GET/interviews/{uuid}interviews:readIncludes passcode + join.login_url (same as invite email)
PATCH/interviews/{uuid}interviews:write—
POST/interviews/{uuid}/cancelinterviews:writeWorks with org API keys; emits interview.cancelled webhook
POST/interviews/{uuid}/rescheduleinterviews:writeWorks with org API keys; duration 15–120
POST/interviews/{uuid}/interviewersinterviews:write—
POST/interviews/{uuid}/resend-invitesinterviews:write—
GET/interviews/{uuid}/rubric-scoresresults:read—
GET/interviews/{uuid}/code-snapshotresults:read—
GET/webhookinterviews:writeOutbound webhook URL + secret configured?
PUT/webhookinterviews:writeSet 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