Interviews
An interview is a browser-based conversation between a voice agent and one person. It runs over WebRTC rather than the phone network, so audio is clean and the session is visual.
Creating one returns a session the candidate can join. How they join is your choice.
Hosted or embedded
Hosted — you get an interviewUrl back and send it to the candidate. They open it,
take the interview on our page, and you read the report afterwards. Nothing to build.
Embedded — you mint a short-lived embed token and render the interview in an iframe inside your own product, with your own surrounding UI and full control over when it starts and ends. See the embed guide.
Both use the same interview object. You can decide per candidate.
Creating one
curl -X POST "https://api.rabbitt.ai/api/v1/interviews" \
-H "Authorization: Bearer $RABBITT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agentId": "507f1f77bcf86cd799439011",
"candidateName": "Asha Menon",
"candidateEmail": "asha@example.com",
"externalRef": "req-2291-candidate-14",
"expiresInHours": 72
}'{
"id": "507f1f77bcf86cd799439022",
"object": "interview",
"status": "created",
"mode": "voice",
"candidateName": "Asha Menon",
"expiresAt": "2026-01-04T10:00:00.000Z",
"interviewUrl": "https://voice.rabbitt.ai/interview/invite/507f1f77bcf86cd799439022?t=..."
}externalRef is yours — put your requisition or candidate id there and it comes back on
the interview and its report.
Voice or text
mode is voice by default. Set it to text for a chat interview instead, which suits
candidates on poor connections or in noisy environments. The same agent works for both,
and the report format is identical.
Lifecycle
| Status | Meaning |
|---|---|
created | The link is live; the candidate has not started |
active | The interview is happening now |
completed | Finished — reportId appears once the analysis is ready |
Interviews expire. After expiresAt the link stops working, whether or not it was ever
opened. The default is 72 hours; the maximum is 720 (30 days).