Interviews
Candidate interview sessions, including embeddable ones.
List interviews
/interviewscurl -X GET "https://api.rabbitt.ai/api/v1/interviews" \
-H "Authorization: Bearer rb_live_xxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"const response = await fetch("https://api.rabbitt.ai/api/v1/interviews", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.RABBITT_API_KEY}`,
},
});
if (!response.ok) {
const { error } = await response.json();
throw new Error(`${error.code}: ${error.message}`);
}
const data = await response.json();import os
import requests
response = requests.get(
"https://api.rabbitt.ai/api/v1/interviews",
headers={"Authorization": f"Bearer {os.environ['RABBITT_API_KEY']}"},
)
response.raise_for_status()
data = response.json()Query parameters
externalRefstringoptionalmax length 500
statusstringoptionalOne of:createdactivecompleted
pageintegeroptionaldefault: 1 · min 1
limitintegeroptionaldefault: 25 · 1–100
Responses
Response body - 200
objectstringdataTypestringdataobject[]paginationobjectCreate an interview
/interviewsCreates a pre-authorized interview session for one candidate and returns a ready-to-send interview link. To embed the interview in your own product, call `POST /interviews/{id}/embed-token` instead of sending this link.
curl -X POST "https://api.rabbitt.ai/api/v1/interviews" \
-H "Authorization: Bearer rb_live_xxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"agentId": "507f1f77bcf86cd799439011",
"candidateName": "Asha Menon"
}'const response = await fetch("https://api.rabbitt.ai/api/v1/interviews", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RABBITT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"agentId": "507f1f77bcf86cd799439011",
"candidateName": "Asha Menon"
}),
});
if (!response.ok) {
const { error } = await response.json();
throw new Error(`${error.code}: ${error.message}`);
}
const data = await response.json();import os
import requests
response = requests.post(
"https://api.rabbitt.ai/api/v1/interviews",
headers={"Authorization": f"Bearer {os.environ['RABBITT_API_KEY']}"},
json={
"agentId": "507f1f77bcf86cd799439011",
"candidateName": "Asha Menon"
},
)
response.raise_for_status()
data = response.json()Body parameters
agentIdstringrequiredcandidateNamestringrequiredmax length 200
candidateEmailstringoptionalmax length 320
modestringoptional`voice` runs a spoken interview; `text` runs a chat interview.
One of:voicetext
default: "voice"
expiresInHoursintegeroptionaldefault: 72 · 1–720
externalRefstringoptionalYour own identifier (candidate id, job requisition, …), echoed back everywhere.
max length 500
Responses
Response body - 201
idstringobjectstringagentIdstringagentNamestringstatusstringOne of:createdactivecompleted
modestringOne of:textvoice
candidateNamestringcandidateEmailstringexternalRefstringlanguagestringstartedAttimestampendedAttimestampdurationSecondsintegerreportIdstringexpiresAttimestampcreatedAttimestampinterviewUrlstringHosted interview link to send directly to the candidate.
Mint an embed token
/interviews/{id}/embed-tokenReturns a short-lived, origin-bound token for embedding this interview in an iframe. Mint it server-side, immediately before rendering the frame — the token is safe to place in a URL precisely because it expires quickly and only works from the origins registered on your API key.
curl -X POST "https://api.rabbitt.ai/api/v1/interviews/507f1f77bcf86cd799439011/embed-token" \
-H "Authorization: Bearer rb_live_xxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"expiresInSeconds": 900
}'const response = await fetch("https://api.rabbitt.ai/api/v1/interviews/507f1f77bcf86cd799439011/embed-token", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RABBITT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"expiresInSeconds": 900
}),
});
if (!response.ok) {
const { error } = await response.json();
throw new Error(`${error.code}: ${error.message}`);
}
const data = await response.json();import os
import requests
response = requests.post(
"https://api.rabbitt.ai/api/v1/interviews/507f1f77bcf86cd799439011/embed-token",
headers={"Authorization": f"Bearer {os.environ['RABBITT_API_KEY']}"},
json={
"expiresInSeconds": 900
},
)
response.raise_for_status()
data = response.json()Path parameters
idstringrequiredBody parameters
expiresInSecondsintegeroptionaldefault: 900 · 60–86400
Responses
Response body - 200
objectstringinterviewIdstringtokenstringembedUrlstringexpiresAttimestampallowedOriginsstring[]Retrieve an interview
/interviews/{id}curl -X GET "https://api.rabbitt.ai/api/v1/interviews/507f1f77bcf86cd799439011" \
-H "Authorization: Bearer rb_live_xxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"const response = await fetch("https://api.rabbitt.ai/api/v1/interviews/507f1f77bcf86cd799439011", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.RABBITT_API_KEY}`,
},
});
if (!response.ok) {
const { error } = await response.json();
throw new Error(`${error.code}: ${error.message}`);
}
const data = await response.json();import os
import requests
response = requests.get(
"https://api.rabbitt.ai/api/v1/interviews/507f1f77bcf86cd799439011",
headers={"Authorization": f"Bearer {os.environ['RABBITT_API_KEY']}"},
)
response.raise_for_status()
data = response.json()Path parameters
idstringrequiredResponses
Response body - 200
idstringobjectstringagentIdstringagentNamestringstatusstringOne of:createdactivecompleted
modestringOne of:textvoice
candidateNamestringcandidateEmailstringexternalRefstringlanguagestringstartedAttimestampendedAttimestampdurationSecondsintegerreportIdstringexpiresAttimestampcreatedAttimestampRetrieve an interview report
/interviews/{id}/reportResponds 202 with `status: "pending"` until the analysis has finished. Set `includeTranscript=true` to receive the full turn-by-turn transcript alongside it.
curl -X GET "https://api.rabbitt.ai/api/v1/interviews/507f1f77bcf86cd799439011/report" \
-H "Authorization: Bearer rb_live_xxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"const response = await fetch("https://api.rabbitt.ai/api/v1/interviews/507f1f77bcf86cd799439011/report", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.RABBITT_API_KEY}`,
},
});
if (!response.ok) {
const { error } = await response.json();
throw new Error(`${error.code}: ${error.message}`);
}
const data = await response.json();import os
import requests
response = requests.get(
"https://api.rabbitt.ai/api/v1/interviews/507f1f77bcf86cd799439011/report",
headers={"Authorization": f"Bearer {os.environ['RABBITT_API_KEY']}"},
)
response.raise_for_status()
data = response.json()Path parameters
idstringrequiredQuery parameters
includeTranscriptbooleanoptionaldefault: false
Responses
Response body - 202
objectstringinterviewIdstringstatusstring