Update Interviewer API
curl --request PUT \
--url https://api.interviewflowai.com/api/external/ingest/job/{jobId} \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"title": "<string>",
"role": "<string>",
"jobDescription": "<string>",
"instructions": "<string>",
"interviewMode": "<string>",
"videoRequired": true,
"resumeRequired": true,
"desktopOnly": true,
"portfolioRequired": true,
"viewStatus": "<string>",
"showToJobSeekers": true,
"isArchived": true,
"interviewLanguage": "<string>",
"experienceMin": 123,
"experienceMax": 123,
"jobType": "<string>",
"locationType": "<string>",
"country": "<string>",
"city": "<string>",
"zipcode": "<string>",
"context": "<string>",
"candidateQuestioning": true,
"candidateOptOutEnabled": true,
"introVideoUrl": "<string>",
"completionRedirectUrl": "<string>",
"linkExpirationDays": 123,
"interviewDuration": 123,
"introductionMessage": "<string>",
"iceBreaker": "<string>",
"closingMessage": "<string>",
"retakesAllowed": 123,
"tags": [
{}
],
"customQuestions": [
{}
],
"customQuestionConfig": {},
"screeningQuestions": [
{}
],
"postInterviewQuestions": [
{}
],
"teamCompletionAlert": {},
"sendCandidateEmailOnInterviewCompletion": true,
"sendCandidateBasicReportOnInterviewCompletion": true,
"rejectionEmail": {},
"customSummaryConfig": {}
}
'import requests
url = "https://api.interviewflowai.com/api/external/ingest/job/{jobId}"
payload = {
"title": "<string>",
"role": "<string>",
"jobDescription": "<string>",
"instructions": "<string>",
"interviewMode": "<string>",
"videoRequired": True,
"resumeRequired": True,
"desktopOnly": True,
"portfolioRequired": True,
"viewStatus": "<string>",
"showToJobSeekers": True,
"isArchived": True,
"interviewLanguage": "<string>",
"experienceMin": 123,
"experienceMax": 123,
"jobType": "<string>",
"locationType": "<string>",
"country": "<string>",
"city": "<string>",
"zipcode": "<string>",
"context": "<string>",
"candidateQuestioning": True,
"candidateOptOutEnabled": True,
"introVideoUrl": "<string>",
"completionRedirectUrl": "<string>",
"linkExpirationDays": 123,
"interviewDuration": 123,
"introductionMessage": "<string>",
"iceBreaker": "<string>",
"closingMessage": "<string>",
"retakesAllowed": 123,
"tags": [{}],
"customQuestions": [{}],
"customQuestionConfig": {},
"screeningQuestions": [{}],
"postInterviewQuestions": [{}],
"teamCompletionAlert": {},
"sendCandidateEmailOnInterviewCompletion": True,
"sendCandidateBasicReportOnInterviewCompletion": True,
"rejectionEmail": {},
"customSummaryConfig": {}
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
role: '<string>',
jobDescription: '<string>',
instructions: '<string>',
interviewMode: '<string>',
videoRequired: true,
resumeRequired: true,
desktopOnly: true,
portfolioRequired: true,
viewStatus: '<string>',
showToJobSeekers: true,
isArchived: true,
interviewLanguage: '<string>',
experienceMin: 123,
experienceMax: 123,
jobType: '<string>',
locationType: '<string>',
country: '<string>',
city: '<string>',
zipcode: '<string>',
context: '<string>',
candidateQuestioning: true,
candidateOptOutEnabled: true,
introVideoUrl: '<string>',
completionRedirectUrl: '<string>',
linkExpirationDays: 123,
interviewDuration: 123,
introductionMessage: '<string>',
iceBreaker: '<string>',
closingMessage: '<string>',
retakesAllowed: 123,
tags: [{}],
customQuestions: [{}],
customQuestionConfig: {},
screeningQuestions: [{}],
postInterviewQuestions: [{}],
teamCompletionAlert: {},
sendCandidateEmailOnInterviewCompletion: true,
sendCandidateBasicReportOnInterviewCompletion: true,
rejectionEmail: {},
customSummaryConfig: {}
})
};
fetch('https://api.interviewflowai.com/api/external/ingest/job/{jobId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.interviewflowai.com/api/external/ingest/job/{jobId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'role' => '<string>',
'jobDescription' => '<string>',
'instructions' => '<string>',
'interviewMode' => '<string>',
'videoRequired' => true,
'resumeRequired' => true,
'desktopOnly' => true,
'portfolioRequired' => true,
'viewStatus' => '<string>',
'showToJobSeekers' => true,
'isArchived' => true,
'interviewLanguage' => '<string>',
'experienceMin' => 123,
'experienceMax' => 123,
'jobType' => '<string>',
'locationType' => '<string>',
'country' => '<string>',
'city' => '<string>',
'zipcode' => '<string>',
'context' => '<string>',
'candidateQuestioning' => true,
'candidateOptOutEnabled' => true,
'introVideoUrl' => '<string>',
'completionRedirectUrl' => '<string>',
'linkExpirationDays' => 123,
'interviewDuration' => 123,
'introductionMessage' => '<string>',
'iceBreaker' => '<string>',
'closingMessage' => '<string>',
'retakesAllowed' => 123,
'tags' => [
[
]
],
'customQuestions' => [
[
]
],
'customQuestionConfig' => [
],
'screeningQuestions' => [
[
]
],
'postInterviewQuestions' => [
[
]
],
'teamCompletionAlert' => [
],
'sendCandidateEmailOnInterviewCompletion' => true,
'sendCandidateBasicReportOnInterviewCompletion' => true,
'rejectionEmail' => [
],
'customSummaryConfig' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.interviewflowai.com/api/external/ingest/job/{jobId}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"role\": \"<string>\",\n \"jobDescription\": \"<string>\",\n \"instructions\": \"<string>\",\n \"interviewMode\": \"<string>\",\n \"videoRequired\": true,\n \"resumeRequired\": true,\n \"desktopOnly\": true,\n \"portfolioRequired\": true,\n \"viewStatus\": \"<string>\",\n \"showToJobSeekers\": true,\n \"isArchived\": true,\n \"interviewLanguage\": \"<string>\",\n \"experienceMin\": 123,\n \"experienceMax\": 123,\n \"jobType\": \"<string>\",\n \"locationType\": \"<string>\",\n \"country\": \"<string>\",\n \"city\": \"<string>\",\n \"zipcode\": \"<string>\",\n \"context\": \"<string>\",\n \"candidateQuestioning\": true,\n \"candidateOptOutEnabled\": true,\n \"introVideoUrl\": \"<string>\",\n \"completionRedirectUrl\": \"<string>\",\n \"linkExpirationDays\": 123,\n \"interviewDuration\": 123,\n \"introductionMessage\": \"<string>\",\n \"iceBreaker\": \"<string>\",\n \"closingMessage\": \"<string>\",\n \"retakesAllowed\": 123,\n \"tags\": [\n {}\n ],\n \"customQuestions\": [\n {}\n ],\n \"customQuestionConfig\": {},\n \"screeningQuestions\": [\n {}\n ],\n \"postInterviewQuestions\": [\n {}\n ],\n \"teamCompletionAlert\": {},\n \"sendCandidateEmailOnInterviewCompletion\": true,\n \"sendCandidateBasicReportOnInterviewCompletion\": true,\n \"rejectionEmail\": {},\n \"customSummaryConfig\": {}\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.interviewflowai.com/api/external/ingest/job/{jobId}")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"role\": \"<string>\",\n \"jobDescription\": \"<string>\",\n \"instructions\": \"<string>\",\n \"interviewMode\": \"<string>\",\n \"videoRequired\": true,\n \"resumeRequired\": true,\n \"desktopOnly\": true,\n \"portfolioRequired\": true,\n \"viewStatus\": \"<string>\",\n \"showToJobSeekers\": true,\n \"isArchived\": true,\n \"interviewLanguage\": \"<string>\",\n \"experienceMin\": 123,\n \"experienceMax\": 123,\n \"jobType\": \"<string>\",\n \"locationType\": \"<string>\",\n \"country\": \"<string>\",\n \"city\": \"<string>\",\n \"zipcode\": \"<string>\",\n \"context\": \"<string>\",\n \"candidateQuestioning\": true,\n \"candidateOptOutEnabled\": true,\n \"introVideoUrl\": \"<string>\",\n \"completionRedirectUrl\": \"<string>\",\n \"linkExpirationDays\": 123,\n \"interviewDuration\": 123,\n \"introductionMessage\": \"<string>\",\n \"iceBreaker\": \"<string>\",\n \"closingMessage\": \"<string>\",\n \"retakesAllowed\": 123,\n \"tags\": [\n {}\n ],\n \"customQuestions\": [\n {}\n ],\n \"customQuestionConfig\": {},\n \"screeningQuestions\": [\n {}\n ],\n \"postInterviewQuestions\": [\n {}\n ],\n \"teamCompletionAlert\": {},\n \"sendCandidateEmailOnInterviewCompletion\": true,\n \"sendCandidateBasicReportOnInterviewCompletion\": true,\n \"rejectionEmail\": {},\n \"customSummaryConfig\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.interviewflowai.com/api/external/ingest/job/{jobId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"role\": \"<string>\",\n \"jobDescription\": \"<string>\",\n \"instructions\": \"<string>\",\n \"interviewMode\": \"<string>\",\n \"videoRequired\": true,\n \"resumeRequired\": true,\n \"desktopOnly\": true,\n \"portfolioRequired\": true,\n \"viewStatus\": \"<string>\",\n \"showToJobSeekers\": true,\n \"isArchived\": true,\n \"interviewLanguage\": \"<string>\",\n \"experienceMin\": 123,\n \"experienceMax\": 123,\n \"jobType\": \"<string>\",\n \"locationType\": \"<string>\",\n \"country\": \"<string>\",\n \"city\": \"<string>\",\n \"zipcode\": \"<string>\",\n \"context\": \"<string>\",\n \"candidateQuestioning\": true,\n \"candidateOptOutEnabled\": true,\n \"introVideoUrl\": \"<string>\",\n \"completionRedirectUrl\": \"<string>\",\n \"linkExpirationDays\": 123,\n \"interviewDuration\": 123,\n \"introductionMessage\": \"<string>\",\n \"iceBreaker\": \"<string>\",\n \"closingMessage\": \"<string>\",\n \"retakesAllowed\": 123,\n \"tags\": [\n {}\n ],\n \"customQuestions\": [\n {}\n ],\n \"customQuestionConfig\": {},\n \"screeningQuestions\": [\n {}\n ],\n \"postInterviewQuestions\": [\n {}\n ],\n \"teamCompletionAlert\": {},\n \"sendCandidateEmailOnInterviewCompletion\": true,\n \"sendCandidateBasicReportOnInterviewCompletion\": true,\n \"rejectionEmail\": {},\n \"customSummaryConfig\": {}\n}"
response = http.request(request)
puts response.read_bodyAPI Integration
Update Interviewer API
Partially update an existing Interviewer’s configuration programmatically.
PUT
/
api
/
external
/
ingest
/
job
/
{jobId}
Update Interviewer API
curl --request PUT \
--url https://api.interviewflowai.com/api/external/ingest/job/{jobId} \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"title": "<string>",
"role": "<string>",
"jobDescription": "<string>",
"instructions": "<string>",
"interviewMode": "<string>",
"videoRequired": true,
"resumeRequired": true,
"desktopOnly": true,
"portfolioRequired": true,
"viewStatus": "<string>",
"showToJobSeekers": true,
"isArchived": true,
"interviewLanguage": "<string>",
"experienceMin": 123,
"experienceMax": 123,
"jobType": "<string>",
"locationType": "<string>",
"country": "<string>",
"city": "<string>",
"zipcode": "<string>",
"context": "<string>",
"candidateQuestioning": true,
"candidateOptOutEnabled": true,
"introVideoUrl": "<string>",
"completionRedirectUrl": "<string>",
"linkExpirationDays": 123,
"interviewDuration": 123,
"introductionMessage": "<string>",
"iceBreaker": "<string>",
"closingMessage": "<string>",
"retakesAllowed": 123,
"tags": [
{}
],
"customQuestions": [
{}
],
"customQuestionConfig": {},
"screeningQuestions": [
{}
],
"postInterviewQuestions": [
{}
],
"teamCompletionAlert": {},
"sendCandidateEmailOnInterviewCompletion": true,
"sendCandidateBasicReportOnInterviewCompletion": true,
"rejectionEmail": {},
"customSummaryConfig": {}
}
'import requests
url = "https://api.interviewflowai.com/api/external/ingest/job/{jobId}"
payload = {
"title": "<string>",
"role": "<string>",
"jobDescription": "<string>",
"instructions": "<string>",
"interviewMode": "<string>",
"videoRequired": True,
"resumeRequired": True,
"desktopOnly": True,
"portfolioRequired": True,
"viewStatus": "<string>",
"showToJobSeekers": True,
"isArchived": True,
"interviewLanguage": "<string>",
"experienceMin": 123,
"experienceMax": 123,
"jobType": "<string>",
"locationType": "<string>",
"country": "<string>",
"city": "<string>",
"zipcode": "<string>",
"context": "<string>",
"candidateQuestioning": True,
"candidateOptOutEnabled": True,
"introVideoUrl": "<string>",
"completionRedirectUrl": "<string>",
"linkExpirationDays": 123,
"interviewDuration": 123,
"introductionMessage": "<string>",
"iceBreaker": "<string>",
"closingMessage": "<string>",
"retakesAllowed": 123,
"tags": [{}],
"customQuestions": [{}],
"customQuestionConfig": {},
"screeningQuestions": [{}],
"postInterviewQuestions": [{}],
"teamCompletionAlert": {},
"sendCandidateEmailOnInterviewCompletion": True,
"sendCandidateBasicReportOnInterviewCompletion": True,
"rejectionEmail": {},
"customSummaryConfig": {}
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
role: '<string>',
jobDescription: '<string>',
instructions: '<string>',
interviewMode: '<string>',
videoRequired: true,
resumeRequired: true,
desktopOnly: true,
portfolioRequired: true,
viewStatus: '<string>',
showToJobSeekers: true,
isArchived: true,
interviewLanguage: '<string>',
experienceMin: 123,
experienceMax: 123,
jobType: '<string>',
locationType: '<string>',
country: '<string>',
city: '<string>',
zipcode: '<string>',
context: '<string>',
candidateQuestioning: true,
candidateOptOutEnabled: true,
introVideoUrl: '<string>',
completionRedirectUrl: '<string>',
linkExpirationDays: 123,
interviewDuration: 123,
introductionMessage: '<string>',
iceBreaker: '<string>',
closingMessage: '<string>',
retakesAllowed: 123,
tags: [{}],
customQuestions: [{}],
customQuestionConfig: {},
screeningQuestions: [{}],
postInterviewQuestions: [{}],
teamCompletionAlert: {},
sendCandidateEmailOnInterviewCompletion: true,
sendCandidateBasicReportOnInterviewCompletion: true,
rejectionEmail: {},
customSummaryConfig: {}
})
};
fetch('https://api.interviewflowai.com/api/external/ingest/job/{jobId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.interviewflowai.com/api/external/ingest/job/{jobId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'role' => '<string>',
'jobDescription' => '<string>',
'instructions' => '<string>',
'interviewMode' => '<string>',
'videoRequired' => true,
'resumeRequired' => true,
'desktopOnly' => true,
'portfolioRequired' => true,
'viewStatus' => '<string>',
'showToJobSeekers' => true,
'isArchived' => true,
'interviewLanguage' => '<string>',
'experienceMin' => 123,
'experienceMax' => 123,
'jobType' => '<string>',
'locationType' => '<string>',
'country' => '<string>',
'city' => '<string>',
'zipcode' => '<string>',
'context' => '<string>',
'candidateQuestioning' => true,
'candidateOptOutEnabled' => true,
'introVideoUrl' => '<string>',
'completionRedirectUrl' => '<string>',
'linkExpirationDays' => 123,
'interviewDuration' => 123,
'introductionMessage' => '<string>',
'iceBreaker' => '<string>',
'closingMessage' => '<string>',
'retakesAllowed' => 123,
'tags' => [
[
]
],
'customQuestions' => [
[
]
],
'customQuestionConfig' => [
],
'screeningQuestions' => [
[
]
],
'postInterviewQuestions' => [
[
]
],
'teamCompletionAlert' => [
],
'sendCandidateEmailOnInterviewCompletion' => true,
'sendCandidateBasicReportOnInterviewCompletion' => true,
'rejectionEmail' => [
],
'customSummaryConfig' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.interviewflowai.com/api/external/ingest/job/{jobId}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"role\": \"<string>\",\n \"jobDescription\": \"<string>\",\n \"instructions\": \"<string>\",\n \"interviewMode\": \"<string>\",\n \"videoRequired\": true,\n \"resumeRequired\": true,\n \"desktopOnly\": true,\n \"portfolioRequired\": true,\n \"viewStatus\": \"<string>\",\n \"showToJobSeekers\": true,\n \"isArchived\": true,\n \"interviewLanguage\": \"<string>\",\n \"experienceMin\": 123,\n \"experienceMax\": 123,\n \"jobType\": \"<string>\",\n \"locationType\": \"<string>\",\n \"country\": \"<string>\",\n \"city\": \"<string>\",\n \"zipcode\": \"<string>\",\n \"context\": \"<string>\",\n \"candidateQuestioning\": true,\n \"candidateOptOutEnabled\": true,\n \"introVideoUrl\": \"<string>\",\n \"completionRedirectUrl\": \"<string>\",\n \"linkExpirationDays\": 123,\n \"interviewDuration\": 123,\n \"introductionMessage\": \"<string>\",\n \"iceBreaker\": \"<string>\",\n \"closingMessage\": \"<string>\",\n \"retakesAllowed\": 123,\n \"tags\": [\n {}\n ],\n \"customQuestions\": [\n {}\n ],\n \"customQuestionConfig\": {},\n \"screeningQuestions\": [\n {}\n ],\n \"postInterviewQuestions\": [\n {}\n ],\n \"teamCompletionAlert\": {},\n \"sendCandidateEmailOnInterviewCompletion\": true,\n \"sendCandidateBasicReportOnInterviewCompletion\": true,\n \"rejectionEmail\": {},\n \"customSummaryConfig\": {}\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.interviewflowai.com/api/external/ingest/job/{jobId}")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"role\": \"<string>\",\n \"jobDescription\": \"<string>\",\n \"instructions\": \"<string>\",\n \"interviewMode\": \"<string>\",\n \"videoRequired\": true,\n \"resumeRequired\": true,\n \"desktopOnly\": true,\n \"portfolioRequired\": true,\n \"viewStatus\": \"<string>\",\n \"showToJobSeekers\": true,\n \"isArchived\": true,\n \"interviewLanguage\": \"<string>\",\n \"experienceMin\": 123,\n \"experienceMax\": 123,\n \"jobType\": \"<string>\",\n \"locationType\": \"<string>\",\n \"country\": \"<string>\",\n \"city\": \"<string>\",\n \"zipcode\": \"<string>\",\n \"context\": \"<string>\",\n \"candidateQuestioning\": true,\n \"candidateOptOutEnabled\": true,\n \"introVideoUrl\": \"<string>\",\n \"completionRedirectUrl\": \"<string>\",\n \"linkExpirationDays\": 123,\n \"interviewDuration\": 123,\n \"introductionMessage\": \"<string>\",\n \"iceBreaker\": \"<string>\",\n \"closingMessage\": \"<string>\",\n \"retakesAllowed\": 123,\n \"tags\": [\n {}\n ],\n \"customQuestions\": [\n {}\n ],\n \"customQuestionConfig\": {},\n \"screeningQuestions\": [\n {}\n ],\n \"postInterviewQuestions\": [\n {}\n ],\n \"teamCompletionAlert\": {},\n \"sendCandidateEmailOnInterviewCompletion\": true,\n \"sendCandidateBasicReportOnInterviewCompletion\": true,\n \"rejectionEmail\": {},\n \"customSummaryConfig\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.interviewflowai.com/api/external/ingest/job/{jobId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"role\": \"<string>\",\n \"jobDescription\": \"<string>\",\n \"instructions\": \"<string>\",\n \"interviewMode\": \"<string>\",\n \"videoRequired\": true,\n \"resumeRequired\": true,\n \"desktopOnly\": true,\n \"portfolioRequired\": true,\n \"viewStatus\": \"<string>\",\n \"showToJobSeekers\": true,\n \"isArchived\": true,\n \"interviewLanguage\": \"<string>\",\n \"experienceMin\": 123,\n \"experienceMax\": 123,\n \"jobType\": \"<string>\",\n \"locationType\": \"<string>\",\n \"country\": \"<string>\",\n \"city\": \"<string>\",\n \"zipcode\": \"<string>\",\n \"context\": \"<string>\",\n \"candidateQuestioning\": true,\n \"candidateOptOutEnabled\": true,\n \"introVideoUrl\": \"<string>\",\n \"completionRedirectUrl\": \"<string>\",\n \"linkExpirationDays\": 123,\n \"interviewDuration\": 123,\n \"introductionMessage\": \"<string>\",\n \"iceBreaker\": \"<string>\",\n \"closingMessage\": \"<string>\",\n \"retakesAllowed\": 123,\n \"tags\": [\n {}\n ],\n \"customQuestions\": [\n {}\n ],\n \"customQuestionConfig\": {},\n \"screeningQuestions\": [\n {}\n ],\n \"postInterviewQuestions\": [\n {}\n ],\n \"teamCompletionAlert\": {},\n \"sendCandidateEmailOnInterviewCompletion\": true,\n \"sendCandidateBasicReportOnInterviewCompletion\": true,\n \"rejectionEmail\": {},\n \"customSummaryConfig\": {}\n}"
response = http.request(request)
puts response.read_bodyUse this endpoint to update an Interviewer that belongs to your Company. Include only the fields you want to change; omitted fields remain unchanged.
All requests must include your API key.
If
Endpoint
PUT https://api.interviewflowai.com/api/external/ingest/job/{jobId}
X-API-KEY: your_api_key_here
Content-Type: application/json
Rate limit: 5 requests per minute per API key. This limit is shared with the Create Interviewer API. Requests over the limit return
429 Too Many Requests.string
required
The UUID of the Interviewer to update.
Request body
The body must contain at least one supported field. Unknown fields are rejected. All fields are optional, but you must provide at least one.string
Interviewer title. Must contain 1–255 characters.
string
Interviewer role. Must contain 1–255 characters.
string
Interviewer description. Must contain 1–50,000 characters.
string
Instructions for conducting the interview.
string
web_call, phone_only, or both.boolean
Whether video is required.
boolean
Whether a resume is required.
boolean
Whether Candidates must use a desktop device.
boolean
Whether a portfolio is required.
string
public or private.boolean
Whether the Interviewer appears to Candidates.
boolean
Whether the Interviewer is archived.
string
english, hindi, spanish, french, chinese, german, italian, japanese, korean, portuguese, dutch, ukrainian, malay, indonesian, or arabic.number
Minimum experience in years. Must be at least
0.number
Maximum experience in years. Must be at least
0.string
full-time, part-time, contract, or intern.string
remote, onsite, or hybrid.string
Country. Maximum 255 characters.
string
City. Maximum 255 characters.
string
Postal code. Maximum 20 characters.
string
Additional Interviewer context. Maximum 5,000 characters and 200 words. Required when enabling
candidateQuestioning.boolean
Whether the Candidate can ask questions during the interview.
boolean
Whether the Candidate can opt out.
string
Introduction video URL. Maximum 500 characters. Send
"" to clear it.string
Completion redirect URL. Maximum 2,048 characters. Send
"" to clear it.number
Interview link validity in days. Minimum
1 and maximum 365.number
Interview duration in minutes. Minimum
10 and maximum 60.string
Introduction message. Must contain 1–1,000 characters.
string
Ice breaker message. Maximum 500 characters.
string
Closing message. Must contain 1–500 characters.
number
Number of allowed retakes. Minimum
0 and maximum 3.object[]
Up to 25 tag definitions.
object[]
Replacement custom interview questions.
object
Manual, resume, and skills question configuration.
object[]
Replacement application screening questions.
object[]
Replacement post-interview questions.
object
Team completion email configuration.
boolean
Whether to email the Candidate after completion.
boolean
Whether to include the basic report in that email.
object
Automated rejection email configuration.
object
Custom report summary configuration.
locationType is onsite or hybrid, the final Interviewer configuration must include country, city, and zipcode. Setting it to remote clears those location fields.
Tags
Eachtags item requires:
| Field | Type | Validation |
|---|---|---|
label | string | 1–100 characters. |
options | string[] | Up to 20 options; each option is 1–100 characters. |
Custom questions
EachcustomQuestions item requires question and evaluationCriteria. generationSource is optional.
| Field | Type | Validation |
|---|---|---|
question | string | Non-empty question text. |
generationSource | string | manual, skills, or resume. |
evaluationCriteria.lookingFor | string | Required, non-empty. |
evaluationCriteria.strongAnswer | string | Required, non-empty. |
evaluationCriteria.weakAnswer | string | Required, non-empty. |
evaluationCriteria.weight | number | Required, from 1–10. |
evaluationCriteria.maxFollowup | number | Required, from 0–2. |
evaluationCriteria.maxDuration | number | Optional, from 0.5–10 minutes. |
Question configuration
customQuestionConfig accepts:
| Field | Type | Validation |
|---|---|---|
sectionOrder | string[] | 1–3 unique section names: manual, resume, or skills. |
manual.enabled | boolean | Enables manual questions. |
resume.enabled | boolean | Enables resume-generated questions. |
resume.generationInstructions | string | Up to 4,000 characters. |
resume.maxQuestions | number | From 1–10. |
resume.maxDuration | number | From 0.5–10 minutes. |
skills.enabled | boolean | Enables skills-generated questions. |
skills.maxQuestions | number | From 1–10. |
skills.maxDuration | number | From 0.5–10 minutes. |
skills.allowedSkills | array | Up to 50 skill strings or { "name", "instructions" } objects. |
skills.flexibleSkills | boolean | Allows skills outside the configured list. |
Screening and post-interview questions
EachscreeningQuestions item accepts id, question, type, idealAnswerType, expectedAnswer, expectedAnswerMax, isRequired, and mustHaveQualification. The required fields are question, type, expectedAnswer, and isRequired. type must be yesno, numeric, or text; idealAnswerType must be min, max, range, or exact.
Each postInterviewQuestions item requires question and optionally accepts id. Question text must be 1–200 characters.
Notifications and reports
| Field | Shape |
|---|---|
teamCompletionAlert | { "isEnabled": boolean, "email": string | null }; both fields are required and a valid email is required when enabled. |
rejectionEmail | { "isEnabled": boolean, "time": number }; time must be from 0–720 hours. |
customSummaryConfig | { "enabled": boolean, "fields": [{ "key": string, "description": string }] }; both properties are required and up to five fields are allowed. Keys are 1–80 characters and descriptions are 1–1,000 characters. |
Example request
curl -X PUT "https://api.interviewflowai.com/api/external/ingest/job/423e37f0-b96d-4a5e-a226-b3b99dffe614" \
-H "Content-Type: application/json" \
-H "X-API-KEY: your_api_key_here" \
-d '{
"title": "Senior Account Executive",
"interviewDuration": 20,
"linkExpirationDays": 14,
"teamCompletionAlert": {
"isEnabled": true,
"email": "hiring@example.com"
}
}'
Response
Successful updates return200 OK with the complete updated Interviewer in data.
{
"data": {
"id": "423e37f0-b96d-4a5e-a226-b3b99dffe614",
"title": "Senior Account Executive",
"interviewDuration": 20,
"linkExpirationDays": 14
},
"code": 200,
"message": "Job updated successfully"
}
Errors
| Condition | Status |
|---|---|
Invalid jobId, empty body, unsupported field, or invalid value | 400 Bad Request |
| Missing or invalid API key | 401 Unauthorized |
| Interviewer does not exist or belongs to another Company | 404 Not Found |
| Rate limit exceeded | 429 Too Many Requests |

