API Reference
Comprehensive REST reference for interviews, questions, sessions, candidates, and usage—parameters, curl examples, and response shapes
Base URL and conventions
Base path: /api/v1. Examples below use https://aural-ai.com; substitute your deployment host.
- Auth —
Authorization: Bearer dlv_…on every request. - JSON — Send
Content-Type: application/jsonfor bodies unless noted. - Success — Most responses wrap payloads in
data. Paginated lists also returncursor(opaque string ornullwhen there is no next page). - Errors — JSON shaped like
{ "error": { "code", "message", ... } }with 4xx/5xx status codes. - Rate limits — 60 requests per minute per API key. When exceeded, the API returns 429 Too Many Requests with an error body; back off and retry with exponential delay.
Interviews
List interviews
/api/v1/interviewsReturns interviews your key can access in its projects. Each item includes question and session counts.
limitcursorlimitinteger= 20cursorstringcurl -sS "https://aural-ai.com/api/v1/interviews?limit=20" \
-H "Authorization: Bearer dlv_KEY"{
"data": [
{
"id": "...",
"title": "Backend screening",
"isActive": true,
"_count": { "questions": 3, "sessions": 12 }
}
],
"cursor": "eyJ..."
}When cursor is null, there are no further pages. Pass the previous cursor value to continue.
Create interview
/api/v1/interviewsCreates an interview in your first accessible project. Requires a title; other fields use defaults below.
titlerequireddescriptionobjectiveassessmentCriteriachatEnabledvoiceEnabledvideoEnabledaiNameaiTonefollowUpDepthlanguagetimeLimitMinutesantiCheatingEnabledtitlerequiredstringdescriptionstringobjectivestringassessmentCriteriaobject[]chatEnabledboolean= truevoiceEnabledboolean= falsevideoEnabledboolean= falseaiNamestring= AuralaiToneenum= PROFESSIONALfollowUpDepthenum= MODERATElanguagestring= entimeLimitMinutesinteger | nullantiCheatingEnabledboolean= falseIf your organization has reached its interview template quota, the API returns 403 with PLAN_LIMIT_EXCEEDED (see Usage & Limits).
curl -sS -X POST "https://aural-ai.com/api/v1/interviews" \
-H "Authorization: Bearer dlv_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Backend screening","voiceEnabled":true,"chatEnabled":true}'{
"data": {
"id": "...",
"title": "Backend screening",
"chatEnabled": true,
"voiceEnabled": true,
"videoEnabled": false,
"aiTone": "PROFESSIONAL",
"followUpDepth": "MODERATE",
"language": "en"
}
}Get interview detail
/api/v1/interviews/:idReturns one interview with its questions array and session count. Unknown or inaccessible ids yield 404.
No query parameters.
curl -sS "https://aural-ai.com/api/v1/interviews/INTERVIEW_ID" \
-H "Authorization: Bearer dlv_KEY"{
"data": {
"id": "...",
"title": "Backend screening",
"objective": "Assess API design",
"questions": [
{
"id": "...",
"text": "Describe a recent API.",
"type": "OPEN_ENDED",
"order": 0
}
],
"_count": { "sessions": 12 }
}
}Update interview
/api/v1/interviews/:idPartial update. Any create body field may be sent; omitted keys are left unchanged.
titledescriptionobjectiveassessmentCriteriachatEnabledvoiceEnabledvideoEnabledaiNameaiTonefollowUpDepthlanguagetimeLimitMinutesantiCheatingEnabledtitlestringdescriptionstringobjectivestringassessmentCriteriaobject[]chatEnabledbooleanvoiceEnabledbooleanvideoEnabledbooleanaiNamestringaiToneenumfollowUpDepthenumlanguagestringtimeLimitMinutesinteger | nullantiCheatingEnabledbooleancurl -sS -X PATCH "https://aural-ai.com/api/v1/interviews/INTERVIEW_ID" \
-H "Authorization: Bearer dlv_KEY" \
-H "Content-Type: application/json" \
-d '{"voiceEnabled":true}'{
"data": {
"id": "...",
"title": "Backend screening",
"voiceEnabled": true
}
}Archive interview
/api/v1/interviews/:idSoft-archives the interview by setting isActive to false. Historical sessions remain available.
No request body.
curl -sS -X DELETE "https://aural-ai.com/api/v1/interviews/INTERVIEW_ID" \
-H "Authorization: Bearer dlv_KEY"{
"data": {
"id": "...",
"archived": true
}
}Publish interview
/api/v1/interviews/:id/publishActivates the interview, turns off invite-only mode, ensures a publicSlug exists, and returns the shareable candidate URL.
No request body.
curl -sS -X POST "https://aural-ai.com/api/v1/interviews/INTERVIEW_ID/publish" \
-H "Authorization: Bearer dlv_KEY"{
"data": {
"id": "...",
"publicSlug": "acme-backend-2025",
"url": "https://aural-ai.com/i/acme-backend-2025"
}
}Questions
List questions
/api/v1/interviews/:id/questionsReturns all questions for the interview, sorted by order ascending.
No query parameters.
curl -sS "https://aural-ai.com/api/v1/interviews/INTERVIEW_ID/questions" \
-H "Authorization: Bearer dlv_KEY"{
"data": [
{
"id": "...",
"text": "Pick a design pattern.",
"type": "SINGLE_CHOICE",
"order": 0,
"options": ["Singleton", "Factory", "Observer"]
}
]
}Create questions
/api/v1/interviews/:id/questionsCreates one or many questions. Send a single object or an array; omit order to auto-increment.
textrequiredtypeorderrequiredoptionsfollowUpEnabledtextrequiredstringtypeenum= OPEN_ENDEDorderintegerrequiredboolean= trueoptionsstring[]followUpEnabledboolean= trueWrap a single question in an object, or send an array to bulk-create.
curl -sS -X POST "https://aural-ai.com/api/v1/interviews/INTERVIEW_ID/questions" \
-H "Authorization: Bearer dlv_KEY" \
-H "Content-Type: application/json" \
-d '[{"text":"Pick one","type":"SINGLE_CHOICE","options":["A","B"]}]'{
"data": [
{
"id": "...",
"text": "Pick one",
"type": "SINGLE_CHOICE",
"order": 0,
"options": ["A", "B"]
}
]
}Update question
/api/v1/questions/:idPartial update for a single question anywhere in your accessible projects.
texttypeorderrequiredoptionsfollowUpEnabledtextstringtypeenumorderintegerrequiredbooleanoptionsstring[]followUpEnabledbooleancurl -sS -X PATCH "https://aural-ai.com/api/v1/questions/QUESTION_ID" \
-H "Authorization: Bearer dlv_KEY" \
-H "Content-Type: application/json" \
-d '{"order":1}'{
"data": {
"id": "...",
"text": "Pick one",
"order": 1,
"type": "SINGLE_CHOICE"
}
}Delete question
/api/v1/questions/:idPermanently removes the question from its interview.
No request body.
curl -sS -X DELETE "https://aural-ai.com/api/v1/questions/QUESTION_ID" \
-H "Authorization: Bearer dlv_KEY"{
"data": {
"id": "...",
"deleted": true
}
}Sessions
List sessions for an interview
/api/v1/interviews/:id/sessionsPaginated sessions with summaries and per-session message counts.
limitcursorlimitinteger= 20cursorstringEach row includes id, status, participant fields, AI outputs (summary, insights, themes, sentiment), totalDurationSeconds, timestamps, and _count.messages.
curl -sS "https://aural-ai.com/api/v1/interviews/INTERVIEW_ID/sessions?limit=20" \
-H "Authorization: Bearer dlv_KEY"{
"data": [
{
"id": "...",
"status": "COMPLETED",
"participantName": "Alex",
"participantEmail": "alex[at]example.com",
"summary": "Strong system design answers.",
"insights": ["Clear tradeoff discussion"],
"themes": ["APIs", "scalability"],
"sentiment": "positive",
"totalDurationSeconds": 1842,
"createdAt": "2026-04-01T12:00:00.000Z",
"updatedAt": "2026-04-01T12:31:00.000Z",
"_count": { "messages": 42 }
}
],
"cursor": null
}Get session detail
/api/v1/sessions/:idFull session record including ordered messages and nested interview metadata.
No query parameters.
curl -sS "https://aural-ai.com/api/v1/sessions/SESSION_ID" \
-H "Authorization: Bearer dlv_KEY"{
"data": {
"id": "...",
"status": "COMPLETED",
"participantName": "Alex",
"participantEmail": "alex[at]example.com",
"summary": "Strong system design answers.",
"insights": ["Clear tradeoff discussion"],
"themes": ["APIs"],
"sentiment": "positive",
"totalDurationSeconds": 1842,
"createdAt": "2026-04-01T12:00:00.000Z",
"messages": [
{
"id": "...",
"role": "assistant",
"content": "Welcome to your interview.",
"timestamp": "2026-04-01T12:00:05.000Z"
}
],
"interview": {
"id": "...",
"title": "Backend screening",
"objective": "Assess API design"
}
}
}Candidates
List candidates
/api/v1/interviews/:id/candidatesAll invite rows for the interview, including tokens and linked session ids when present.
No query parameters.
curl -sS "https://aural-ai.com/api/v1/interviews/INTERVIEW_ID/candidates" \
-H "Authorization: Bearer dlv_KEY"{
"data": [
{
"id": "...",
"name": "Alex",
"email": "alex[at]example.com",
"phone": "+1-555-0100",
"notes": "Referral from Jane",
"inviteToken": "...",
"sessionId": null,
"createdAt": "2026-04-01T10:00:00.000Z"
}
]
}Create candidates
/api/v1/interviews/:id/candidatesCreates invite rows and returns inviteUrl for each. Accepts one object or up to 500 in an array.
nameemailphonenotesnamestringemailstringphonestringnotesstringIf session hours are exhausted for the organization, the API responds with 403, PLAN_LIMIT_EXCEEDED, and limit: "session_hours".
curl -sS -X POST "https://aural-ai.com/api/v1/interviews/INTERVIEW_ID/candidates" \
-H "Authorization: Bearer dlv_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Alex","email":"alex[at]example.com"}'{
"data": [
{
"id": "...",
"name": "Alex",
"email": "alex[at]example.com",
"inviteToken": "...",
"inviteUrl": "https://aural-ai.com/i/acme-backend-2025?token=..."
}
]
}Usage
Organization usage and limits
/api/v1/usageSnapshot of plan label and current consumption for templates, session hours, AI tokens, and seats.
No query parameters.
curl -sS "https://aural-ai.com/api/v1/usage" \
-H "Authorization: Bearer dlv_KEY"{
"data": {
"plan": "pro",
"templates": { "used": 8, "limit": 25 },
"session_hours": { "used": 42.5, "limit": 100 },
"ai_tokens": { "used": 125000, "limit": 500000 },
"seats": { "used": 5, "limit": 10 }
}
}Interpretation of limits, null caps, and quota errors is covered in Usage & Limits.
OpenAPI
Use the OpenAPI spec with codegen or documentation tools to stay in sync as the API evolves.