curl --request POST \
--url https://api.alex.com/v1/api/createJob \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data @- <<EOF
{
"externalJobId": "REQ-12345",
"jobDescription": "We are looking for a senior backend engineer with experience building distributed systems...",
"jobTitle": "Senior Backend Engineer",
"externalJobTitle": "Backend Engineer, Platform",
"additionalQuestions": [
"What is your expected start date?"
],
"structuredAdditionalQuestions": [
{
"question": "Are you authorized to work in the United States?",
"answers": [
"Yes",
"No"
],
"tagName": "Work Authorization",
"tagInstructions": "Set to 'Yes' if the candidate confirms US work authorization, otherwise 'No'."
}
],
"intelligentlyOrderQuestions": false,
"additionalGenerationContext": "Emphasize systems-design experience over framework specifics.",
"active": true
}
EOFimport requests
url = "https://api.alex.com/v1/api/createJob"
payload = {
"externalJobId": "REQ-12345",
"jobDescription": "We are looking for a senior backend engineer with experience building distributed systems...",
"jobTitle": "Senior Backend Engineer",
"externalJobTitle": "Backend Engineer, Platform",
"additionalQuestions": ["What is your expected start date?"],
"structuredAdditionalQuestions": [
{
"question": "Are you authorized to work in the United States?",
"answers": ["Yes", "No"],
"tagName": "Work Authorization",
"tagInstructions": "Set to 'Yes' if the candidate confirms US work authorization, otherwise 'No'."
}
],
"intelligentlyOrderQuestions": False,
"additionalGenerationContext": "Emphasize systems-design experience over framework specifics.",
"active": True
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
externalJobId: 'REQ-12345',
jobDescription: 'We are looking for a senior backend engineer with experience building distributed systems...',
jobTitle: 'Senior Backend Engineer',
externalJobTitle: 'Backend Engineer, Platform',
additionalQuestions: ['What is your expected start date?'],
structuredAdditionalQuestions: [
{
question: 'Are you authorized to work in the United States?',
answers: ['Yes', 'No'],
tagName: 'Work Authorization',
tagInstructions: 'Set to \'Yes\' if the candidate confirms US work authorization, otherwise \'No\'.'
}
],
intelligentlyOrderQuestions: false,
additionalGenerationContext: 'Emphasize systems-design experience over framework specifics.',
active: true
})
};
fetch('https://api.alex.com/v1/api/createJob', 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.alex.com/v1/api/createJob",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'externalJobId' => 'REQ-12345',
'jobDescription' => 'We are looking for a senior backend engineer with experience building distributed systems...',
'jobTitle' => 'Senior Backend Engineer',
'externalJobTitle' => 'Backend Engineer, Platform',
'additionalQuestions' => [
'What is your expected start date?'
],
'structuredAdditionalQuestions' => [
[
'question' => 'Are you authorized to work in the United States?',
'answers' => [
'Yes',
'No'
],
'tagName' => 'Work Authorization',
'tagInstructions' => 'Set to \'Yes\' if the candidate confirms US work authorization, otherwise \'No\'.'
]
],
'intelligentlyOrderQuestions' => false,
'additionalGenerationContext' => 'Emphasize systems-design experience over framework specifics.',
'active' => true
]),
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.alex.com/v1/api/createJob"
payload := strings.NewReader("{\n \"externalJobId\": \"REQ-12345\",\n \"jobDescription\": \"We are looking for a senior backend engineer with experience building distributed systems...\",\n \"jobTitle\": \"Senior Backend Engineer\",\n \"externalJobTitle\": \"Backend Engineer, Platform\",\n \"additionalQuestions\": [\n \"What is your expected start date?\"\n ],\n \"structuredAdditionalQuestions\": [\n {\n \"question\": \"Are you authorized to work in the United States?\",\n \"answers\": [\n \"Yes\",\n \"No\"\n ],\n \"tagName\": \"Work Authorization\",\n \"tagInstructions\": \"Set to 'Yes' if the candidate confirms US work authorization, otherwise 'No'.\"\n }\n ],\n \"intelligentlyOrderQuestions\": false,\n \"additionalGenerationContext\": \"Emphasize systems-design experience over framework specifics.\",\n \"active\": true\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.alex.com/v1/api/createJob")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"externalJobId\": \"REQ-12345\",\n \"jobDescription\": \"We are looking for a senior backend engineer with experience building distributed systems...\",\n \"jobTitle\": \"Senior Backend Engineer\",\n \"externalJobTitle\": \"Backend Engineer, Platform\",\n \"additionalQuestions\": [\n \"What is your expected start date?\"\n ],\n \"structuredAdditionalQuestions\": [\n {\n \"question\": \"Are you authorized to work in the United States?\",\n \"answers\": [\n \"Yes\",\n \"No\"\n ],\n \"tagName\": \"Work Authorization\",\n \"tagInstructions\": \"Set to 'Yes' if the candidate confirms US work authorization, otherwise 'No'.\"\n }\n ],\n \"intelligentlyOrderQuestions\": false,\n \"additionalGenerationContext\": \"Emphasize systems-design experience over framework specifics.\",\n \"active\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.alex.com/v1/api/createJob")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"externalJobId\": \"REQ-12345\",\n \"jobDescription\": \"We are looking for a senior backend engineer with experience building distributed systems...\",\n \"jobTitle\": \"Senior Backend Engineer\",\n \"externalJobTitle\": \"Backend Engineer, Platform\",\n \"additionalQuestions\": [\n \"What is your expected start date?\"\n ],\n \"structuredAdditionalQuestions\": [\n {\n \"question\": \"Are you authorized to work in the United States?\",\n \"answers\": [\n \"Yes\",\n \"No\"\n ],\n \"tagName\": \"Work Authorization\",\n \"tagInstructions\": \"Set to 'Yes' if the candidate confirms US work authorization, otherwise 'No'.\"\n }\n ],\n \"intelligentlyOrderQuestions\": false,\n \"additionalGenerationContext\": \"Emphasize systems-design experience over framework specifics.\",\n \"active\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Job generation initiated.",
"payload": "acme-REQ-12345"
}{
"success": false,
"message": "Missing required fields",
"code": "CANDIDATE_NOT_FOUND"
}{
"success": false,
"message": "Missing required fields",
"code": "CANDIDATE_NOT_FOUND"
}{
"success": false,
"message": "Missing required fields",
"code": "CANDIDATE_NOT_FOUND"
}Create Job
Starts asynchronous creation of a new job (interviewer) from a job description. Returns immediately with the deterministic Alex interviewerId that the job will be assigned once generation completes. Job generation runs in the background; poll GET /interviewers to detect when the job is available.
curl --request POST \
--url https://api.alex.com/v1/api/createJob \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data @- <<EOF
{
"externalJobId": "REQ-12345",
"jobDescription": "We are looking for a senior backend engineer with experience building distributed systems...",
"jobTitle": "Senior Backend Engineer",
"externalJobTitle": "Backend Engineer, Platform",
"additionalQuestions": [
"What is your expected start date?"
],
"structuredAdditionalQuestions": [
{
"question": "Are you authorized to work in the United States?",
"answers": [
"Yes",
"No"
],
"tagName": "Work Authorization",
"tagInstructions": "Set to 'Yes' if the candidate confirms US work authorization, otherwise 'No'."
}
],
"intelligentlyOrderQuestions": false,
"additionalGenerationContext": "Emphasize systems-design experience over framework specifics.",
"active": true
}
EOFimport requests
url = "https://api.alex.com/v1/api/createJob"
payload = {
"externalJobId": "REQ-12345",
"jobDescription": "We are looking for a senior backend engineer with experience building distributed systems...",
"jobTitle": "Senior Backend Engineer",
"externalJobTitle": "Backend Engineer, Platform",
"additionalQuestions": ["What is your expected start date?"],
"structuredAdditionalQuestions": [
{
"question": "Are you authorized to work in the United States?",
"answers": ["Yes", "No"],
"tagName": "Work Authorization",
"tagInstructions": "Set to 'Yes' if the candidate confirms US work authorization, otherwise 'No'."
}
],
"intelligentlyOrderQuestions": False,
"additionalGenerationContext": "Emphasize systems-design experience over framework specifics.",
"active": True
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
externalJobId: 'REQ-12345',
jobDescription: 'We are looking for a senior backend engineer with experience building distributed systems...',
jobTitle: 'Senior Backend Engineer',
externalJobTitle: 'Backend Engineer, Platform',
additionalQuestions: ['What is your expected start date?'],
structuredAdditionalQuestions: [
{
question: 'Are you authorized to work in the United States?',
answers: ['Yes', 'No'],
tagName: 'Work Authorization',
tagInstructions: 'Set to \'Yes\' if the candidate confirms US work authorization, otherwise \'No\'.'
}
],
intelligentlyOrderQuestions: false,
additionalGenerationContext: 'Emphasize systems-design experience over framework specifics.',
active: true
})
};
fetch('https://api.alex.com/v1/api/createJob', 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.alex.com/v1/api/createJob",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'externalJobId' => 'REQ-12345',
'jobDescription' => 'We are looking for a senior backend engineer with experience building distributed systems...',
'jobTitle' => 'Senior Backend Engineer',
'externalJobTitle' => 'Backend Engineer, Platform',
'additionalQuestions' => [
'What is your expected start date?'
],
'structuredAdditionalQuestions' => [
[
'question' => 'Are you authorized to work in the United States?',
'answers' => [
'Yes',
'No'
],
'tagName' => 'Work Authorization',
'tagInstructions' => 'Set to \'Yes\' if the candidate confirms US work authorization, otherwise \'No\'.'
]
],
'intelligentlyOrderQuestions' => false,
'additionalGenerationContext' => 'Emphasize systems-design experience over framework specifics.',
'active' => true
]),
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.alex.com/v1/api/createJob"
payload := strings.NewReader("{\n \"externalJobId\": \"REQ-12345\",\n \"jobDescription\": \"We are looking for a senior backend engineer with experience building distributed systems...\",\n \"jobTitle\": \"Senior Backend Engineer\",\n \"externalJobTitle\": \"Backend Engineer, Platform\",\n \"additionalQuestions\": [\n \"What is your expected start date?\"\n ],\n \"structuredAdditionalQuestions\": [\n {\n \"question\": \"Are you authorized to work in the United States?\",\n \"answers\": [\n \"Yes\",\n \"No\"\n ],\n \"tagName\": \"Work Authorization\",\n \"tagInstructions\": \"Set to 'Yes' if the candidate confirms US work authorization, otherwise 'No'.\"\n }\n ],\n \"intelligentlyOrderQuestions\": false,\n \"additionalGenerationContext\": \"Emphasize systems-design experience over framework specifics.\",\n \"active\": true\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.alex.com/v1/api/createJob")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"externalJobId\": \"REQ-12345\",\n \"jobDescription\": \"We are looking for a senior backend engineer with experience building distributed systems...\",\n \"jobTitle\": \"Senior Backend Engineer\",\n \"externalJobTitle\": \"Backend Engineer, Platform\",\n \"additionalQuestions\": [\n \"What is your expected start date?\"\n ],\n \"structuredAdditionalQuestions\": [\n {\n \"question\": \"Are you authorized to work in the United States?\",\n \"answers\": [\n \"Yes\",\n \"No\"\n ],\n \"tagName\": \"Work Authorization\",\n \"tagInstructions\": \"Set to 'Yes' if the candidate confirms US work authorization, otherwise 'No'.\"\n }\n ],\n \"intelligentlyOrderQuestions\": false,\n \"additionalGenerationContext\": \"Emphasize systems-design experience over framework specifics.\",\n \"active\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.alex.com/v1/api/createJob")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"externalJobId\": \"REQ-12345\",\n \"jobDescription\": \"We are looking for a senior backend engineer with experience building distributed systems...\",\n \"jobTitle\": \"Senior Backend Engineer\",\n \"externalJobTitle\": \"Backend Engineer, Platform\",\n \"additionalQuestions\": [\n \"What is your expected start date?\"\n ],\n \"structuredAdditionalQuestions\": [\n {\n \"question\": \"Are you authorized to work in the United States?\",\n \"answers\": [\n \"Yes\",\n \"No\"\n ],\n \"tagName\": \"Work Authorization\",\n \"tagInstructions\": \"Set to 'Yes' if the candidate confirms US work authorization, otherwise 'No'.\"\n }\n ],\n \"intelligentlyOrderQuestions\": false,\n \"additionalGenerationContext\": \"Emphasize systems-design experience over framework specifics.\",\n \"active\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Job generation initiated.",
"payload": "acme-REQ-12345"
}{
"success": false,
"message": "Missing required fields",
"code": "CANDIDATE_NOT_FOUND"
}{
"success": false,
"message": "Missing required fields",
"code": "CANDIDATE_NOT_FOUND"
}{
"success": false,
"message": "Missing required fields",
"code": "CANDIDATE_NOT_FOUND"
}Authorizations
Body
Your ATS-side identifier for the job. Must be unique within your company; subsequent calls with the same value will return a 400.
"REQ-12345"
Full job description text. Used to generate the interview's questions, skills, and evaluation criteria.
"We are looking for a senior backend engineer with experience building distributed systems..."
The job's title. When omitted or blank, a title is inferred from jobDescription. Supplying it also sharpens the generated questions and evaluation criteria.
"Senior Backend Engineer"
The candidate-facing job title, when it should differ from jobTitle. When omitted or blank, it mirrors jobTitle (or the inferred title).
"Backend Engineer, Platform"
Optional free-text questions to append to the generated interview.
["What is your expected start date?"]
Optional structured questions with answer choices and/or tagging instructions. Use this instead of additionalQuestions when you need constrained-answer questions or report tags.
Show child attributes
Show child attributes
When true, additional questions are reordered to flow naturally with the generated interview script. Defaults to false.
false
Optional free-text guidance to bias question generation (e.g. seniority signals, must-have skills).
"Emphasize systems-design experience over framework specifics."
Whether the job is created active (true) or inactive (false). When omitted, the company's default job status is used.
true
Response
Job generation initiated
true
"Job generation initiated."
The deterministic Alex interviewerId the job will be assigned once generation completes. Built from your company slug and externalJobId. Use this with /inviteCandidate (as interviewerId) or poll /interviewers to detect when the job is ready.
"acme-REQ-12345"