The Gather API supports three types of questions, each designed for different interview formats:
Audio Questions - Questions with text scripts that can be automatically converted to audio using text-to-speech (TTS) technology. These are used in standard video interviews where candidates record video responses to audio prompts.
Survey Questions - Multiple choice, yes/no, thumbs up/down, or free text questions used for screening and questionnaires. These can be added to interviews or used in standalone surveys. Perfect for pre-screening candidates or gathering structured feedback.
AI Text Questions - Text-based questions used in AI-powered interviews where candidates provide written responses that are evaluated by AI. Ideal for technical assessments and written evaluations.
Audio questions are the building blocks of standard video interviews. You can create questions with text scripts that can be automatically converted to audio using text-to-speech (TTS) technology.
Create a new audio question with optional TTS audio generation.Endpoint:POST /qsi/gather/questions
cURL
JavaScript
Python
curl -X POST https://api.prod.qualifi.hr/qsi/gather/questions \ -H "x-api-key: ${API_KEY}" \ -H "Content-Type: application/json" \ -d '{ "title": "Tell me about yourself", "description": "A standard introductory question", "audioURL": "https://example.com/audio/question1.mp3", "narratorId": "narrator-uuid", "questionScript": "Tell me about yourself and your background." }'
const response = await fetch('https://api.prod.qualifi.hr/qsi/gather/questions', { method: 'POST', headers: { 'x-api-key': apiKey, 'Content-Type': 'application/json' }, body: JSON.stringify({ title: 'Tell me about yourself', description: 'A standard introductory question', audioURL: 'https://example.com/audio/question1.mp3', narratorId: 'narrator-uuid', questionScript: 'Tell me about yourself and your background.' })});const question = await response.json();
response = requests.post( 'https://api.prod.qualifi.hr/qsi/gather/questions', headers={ 'x-api-key': api_key, 'Content-Type': 'application/json' }, json={ 'title': 'Tell me about yourself', 'description': 'A standard introductory question', 'audioURL': 'https://example.com/audio/question1.mp3', 'narratorId': 'narrator-uuid', 'questionScript': 'Tell me about yourself and your background.' })question = response.json()
{ "title": "Tell me about yourself", "description": "A standard introductory question", "audioURL": "https://example.com/audio/question1.mp3", "narratorId": "narrator-uuid", "questionScript": "Tell me about yourself and your background."}
The userId field is optional. If not provided, it will be resolved from your API credential. If you need to specify a different user as the creator, provide the userId field.
Optional override for team ID. If not provided, will be resolved from your API credential (teamId or defaultTeamId). Required if using an organization-level API key without a defaultTeamId.
cURL
JavaScript
Python
curl -X GET "https://api.prod.qualifi.hr/qsi/gather/questions?page=0&pageSize=50&archived=false" \ -H "x-api-key: ${API_KEY}"
Optional override for team ID. If not provided, will be resolved from your API credential (teamId or defaultTeamId). Required if using an organization-level API key without a defaultTeamId.
cURL
JavaScript
Python
curl -X GET https://api.prod.qualifi.hr/qsi/gather/questions/{questionId} \ -H "x-api-key: ${API_KEY}"
Survey questions are used for screening and questionnaires. They support multiple question types including multiple choice, yes/no, thumbs up/down, and free text.
FREE_TEXT - Free text response with optional character limit. Use maxCharacterLength to set limits.
YES_NO - Yes/No question with optional preferred option. Use preferredOption to mark the preferred answer.
THUMBS_UP_DOWN - Thumbs up/down question. Requires options array with two options.
MULTIPLE_CHOICE - Single answer multiple choice question. Requires options array.
MULTIPLE_CHOICE_WEIGHTED - Multiple choice with weighted scoring. Requires options array with weights.
MULTIPLE_CHOICE_MULTIPLE_ANSWER - Multiple choice allowing multiple selections. Requires options array. Use selectAllForFullScore to require all options for full score.
Optional override for team ID. If not provided, will be resolved from your API credential (teamId or defaultTeamId). Required if using an organization-level API key without a defaultTeamId.
cURL
JavaScript
Python
curl -X GET "https://api.prod.qualifi.hr/qsi/gather/survey-questions?page=0&pageSize=50" \ -H "x-api-key: ${API_KEY}"
Optional override for team ID. If not provided, will be resolved from your API credential (teamId or defaultTeamId). Required if using an organization-level API key without a defaultTeamId.
Create a new AI text question.Endpoint:POST /qsi/gather/ai-text-questions
cURL
JavaScript
Python
curl -X POST https://api.prod.qualifi.hr/qsi/gather/ai-text-questions \ -H "x-api-key: ${API_KEY}" \ -H "Content-Type: application/json" \ -d '{ "title": "Technical Assessment", "description": "A comprehensive technical question for candidates", "questionText": "Explain the difference between REST and GraphQL APIs, including their use cases and trade-offs." }'
const response = await fetch('https://api.prod.qualifi.hr/qsi/gather/ai-text-questions', { method: 'POST', headers: { 'x-api-key': apiKey, 'Content-Type': 'application/json' }, body: JSON.stringify({ title: 'Technical Assessment', description: 'A comprehensive technical question for candidates', questionText: 'Explain the difference between REST and GraphQL APIs, including their use cases and trade-offs.' })});const question = await response.json();
response = requests.post( 'https://api.prod.qualifi.hr/qsi/gather/ai-text-questions', headers={ 'x-api-key': api_key, 'Content-Type': 'application/json' }, json={ 'title': 'Technical Assessment', 'description': 'A comprehensive technical question for candidates', 'questionText': 'Explain the difference between REST and GraphQL APIs, including their use cases and trade-offs.' })question = response.json()
{ "title": "Technical Assessment", "description": "A comprehensive technical question for candidates", "questionText": "Explain the difference between REST and GraphQL APIs, including their use cases and trade-offs."}
Optional override for team ID. If not provided, will be resolved from your API credential (teamId or defaultTeamId). Required if using an organization-level API key without a defaultTeamId.
cURL
JavaScript
Python
curl -X GET "https://api.prod.qualifi.hr/qsi/gather/ai-text-questions?page=0&pageSize=50" \ -H "x-api-key: ${API_KEY}"
Optional override for team ID. If not provided, will be resolved from your API credential (teamId or defaultTeamId). Required if using an organization-level API key without a defaultTeamId.
{ "data": { "aiTextQuestion": { "id": "ai-text-question-uuid", "title": "Technical Assessment", "description": "A comprehensive technical question for candidates", "questionText": "Explain the difference between REST and GraphQL APIs, including their use cases and trade-offs.", "organizationId": "org-uuid", "teamId": "team-uuid", "createdById": "user-uuid", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "archivedAt": null } }, "meta": { "requestId": "uuid", "timestamp": "2024-01-01T00:00:00Z" }}
Retrieve all questions (audio questions, survey questions, and AI text questions) associated with a specific interview, sorted by ordinal.Endpoint:GET /qsi/gather/questions/interview/{interviewId}
Optional override for team ID. If not provided, will be resolved from your API credential (teamId or defaultTeamId). Required if using an organization-level API key without a defaultTeamId.
cURL
JavaScript
Python
curl -X GET https://api.prod.qualifi.hr/qsi/gather/questions/interview/{interviewId} \ -H "x-api-key: ${API_KEY}"
Returns all question types (audio questions, survey questions, and AI text questions) associated with the interview. Questions are sorted by ordinal. Audio URLs are automatically converted to MP3 format. Survey questions and AI text questions will have audioType: null and audioURL: null.
Webhook Notifications: Use webhooks to be notified when audio generation completes
Pre-uploaded Audio: Alternatively, provide your own audioURL
When questionScript is provided with narratorId, the question is created immediately, but audioURL may be null until generation completes. Check the transcriptionStatus field to monitor generation progress.