cURL
curl --request POST \
--url https://api.alex.com/v1/api/templates \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"name": "SWE Screen",
"intro": "<string>",
"outro": "<string>",
"interviewCreationNotes": "<string>",
"additionalEvaluationInstructions": "<string>",
"additionalInterviewInstructions": "<string>",
"estimatedDuration": 25,
"questionLimit": 123,
"language": "en",
"questions": [
{
"content": "Tell me about a time you owned a production incident.",
"interviewInstructions": "Probe for ownership, not just participation."
}
],
"criteria": [
{
"name": "Communication",
"evaluationInstructions": "Look for clear, structured answers.",
"priority": "High"
}
],
"tags": [
{
"name": "Work Authorization",
"outputType": "string",
"outputOptions": [
"<string>"
],
"instructions": "Set to Yes if the candidate confirms US work authorization."
}
]
}
'import requests
url = "https://api.alex.com/v1/api/templates"
payload = {
"name": "SWE Screen",
"intro": "<string>",
"outro": "<string>",
"interviewCreationNotes": "<string>",
"additionalEvaluationInstructions": "<string>",
"additionalInterviewInstructions": "<string>",
"estimatedDuration": 25,
"questionLimit": 123,
"language": "en",
"questions": [
{
"content": "Tell me about a time you owned a production incident.",
"interviewInstructions": "Probe for ownership, not just participation."
}
],
"criteria": [
{
"name": "Communication",
"evaluationInstructions": "Look for clear, structured answers.",
"priority": "High"
}
],
"tags": [
{
"name": "Work Authorization",
"outputType": "string",
"outputOptions": ["<string>"],
"instructions": "Set to Yes if the candidate confirms US work authorization."
}
]
}
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({
name: 'SWE Screen',
intro: '<string>',
outro: '<string>',
interviewCreationNotes: '<string>',
additionalEvaluationInstructions: '<string>',
additionalInterviewInstructions: '<string>',
estimatedDuration: 25,
questionLimit: 123,
language: 'en',
questions: [
{
content: 'Tell me about a time you owned a production incident.',
interviewInstructions: 'Probe for ownership, not just participation.'
}
],
criteria: [
{
name: 'Communication',
evaluationInstructions: 'Look for clear, structured answers.',
priority: 'High'
}
],
tags: [
{
name: 'Work Authorization',
outputType: 'string',
outputOptions: ['<string>'],
instructions: 'Set to Yes if the candidate confirms US work authorization.'
}
]
})
};
fetch('https://api.alex.com/v1/api/templates', 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/templates",
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([
'name' => 'SWE Screen',
'intro' => '<string>',
'outro' => '<string>',
'interviewCreationNotes' => '<string>',
'additionalEvaluationInstructions' => '<string>',
'additionalInterviewInstructions' => '<string>',
'estimatedDuration' => 25,
'questionLimit' => 123,
'language' => 'en',
'questions' => [
[
'content' => 'Tell me about a time you owned a production incident.',
'interviewInstructions' => 'Probe for ownership, not just participation.'
]
],
'criteria' => [
[
'name' => 'Communication',
'evaluationInstructions' => 'Look for clear, structured answers.',
'priority' => 'High'
]
],
'tags' => [
[
'name' => 'Work Authorization',
'outputType' => 'string',
'outputOptions' => [
'<string>'
],
'instructions' => 'Set to Yes if the candidate confirms US work authorization.'
]
]
]),
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/templates"
payload := strings.NewReader("{\n \"name\": \"SWE Screen\",\n \"intro\": \"<string>\",\n \"outro\": \"<string>\",\n \"interviewCreationNotes\": \"<string>\",\n \"additionalEvaluationInstructions\": \"<string>\",\n \"additionalInterviewInstructions\": \"<string>\",\n \"estimatedDuration\": 25,\n \"questionLimit\": 123,\n \"language\": \"en\",\n \"questions\": [\n {\n \"content\": \"Tell me about a time you owned a production incident.\",\n \"interviewInstructions\": \"Probe for ownership, not just participation.\"\n }\n ],\n \"criteria\": [\n {\n \"name\": \"Communication\",\n \"evaluationInstructions\": \"Look for clear, structured answers.\",\n \"priority\": \"High\"\n }\n ],\n \"tags\": [\n {\n \"name\": \"Work Authorization\",\n \"outputType\": \"string\",\n \"outputOptions\": [\n \"<string>\"\n ],\n \"instructions\": \"Set to Yes if the candidate confirms US work authorization.\"\n }\n ]\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/templates")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"SWE Screen\",\n \"intro\": \"<string>\",\n \"outro\": \"<string>\",\n \"interviewCreationNotes\": \"<string>\",\n \"additionalEvaluationInstructions\": \"<string>\",\n \"additionalInterviewInstructions\": \"<string>\",\n \"estimatedDuration\": 25,\n \"questionLimit\": 123,\n \"language\": \"en\",\n \"questions\": [\n {\n \"content\": \"Tell me about a time you owned a production incident.\",\n \"interviewInstructions\": \"Probe for ownership, not just participation.\"\n }\n ],\n \"criteria\": [\n {\n \"name\": \"Communication\",\n \"evaluationInstructions\": \"Look for clear, structured answers.\",\n \"priority\": \"High\"\n }\n ],\n \"tags\": [\n {\n \"name\": \"Work Authorization\",\n \"outputType\": \"string\",\n \"outputOptions\": [\n \"<string>\"\n ],\n \"instructions\": \"Set to Yes if the candidate confirms US work authorization.\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.alex.com/v1/api/templates")
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 \"name\": \"SWE Screen\",\n \"intro\": \"<string>\",\n \"outro\": \"<string>\",\n \"interviewCreationNotes\": \"<string>\",\n \"additionalEvaluationInstructions\": \"<string>\",\n \"additionalInterviewInstructions\": \"<string>\",\n \"estimatedDuration\": 25,\n \"questionLimit\": 123,\n \"language\": \"en\",\n \"questions\": [\n {\n \"content\": \"Tell me about a time you owned a production incident.\",\n \"interviewInstructions\": \"Probe for ownership, not just participation.\"\n }\n ],\n \"criteria\": [\n {\n \"name\": \"Communication\",\n \"evaluationInstructions\": \"Look for clear, structured answers.\",\n \"priority\": \"High\"\n }\n ],\n \"tags\": [\n {\n \"name\": \"Work Authorization\",\n \"outputType\": \"string\",\n \"outputOptions\": [\n \"<string>\"\n ],\n \"instructions\": \"Set to Yes if the candidate confirms US work authorization.\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Template created successfully",
"payload": "clx8f2k1p0000abcd1234efgh"
}{
"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"
}Templates
Create Template
Creates a new interview guide template. Template names must be unique within your company. The returned payload is the template id to pass as templateId on /createJob.
POST
/
templates
cURL
curl --request POST \
--url https://api.alex.com/v1/api/templates \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"name": "SWE Screen",
"intro": "<string>",
"outro": "<string>",
"interviewCreationNotes": "<string>",
"additionalEvaluationInstructions": "<string>",
"additionalInterviewInstructions": "<string>",
"estimatedDuration": 25,
"questionLimit": 123,
"language": "en",
"questions": [
{
"content": "Tell me about a time you owned a production incident.",
"interviewInstructions": "Probe for ownership, not just participation."
}
],
"criteria": [
{
"name": "Communication",
"evaluationInstructions": "Look for clear, structured answers.",
"priority": "High"
}
],
"tags": [
{
"name": "Work Authorization",
"outputType": "string",
"outputOptions": [
"<string>"
],
"instructions": "Set to Yes if the candidate confirms US work authorization."
}
]
}
'import requests
url = "https://api.alex.com/v1/api/templates"
payload = {
"name": "SWE Screen",
"intro": "<string>",
"outro": "<string>",
"interviewCreationNotes": "<string>",
"additionalEvaluationInstructions": "<string>",
"additionalInterviewInstructions": "<string>",
"estimatedDuration": 25,
"questionLimit": 123,
"language": "en",
"questions": [
{
"content": "Tell me about a time you owned a production incident.",
"interviewInstructions": "Probe for ownership, not just participation."
}
],
"criteria": [
{
"name": "Communication",
"evaluationInstructions": "Look for clear, structured answers.",
"priority": "High"
}
],
"tags": [
{
"name": "Work Authorization",
"outputType": "string",
"outputOptions": ["<string>"],
"instructions": "Set to Yes if the candidate confirms US work authorization."
}
]
}
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({
name: 'SWE Screen',
intro: '<string>',
outro: '<string>',
interviewCreationNotes: '<string>',
additionalEvaluationInstructions: '<string>',
additionalInterviewInstructions: '<string>',
estimatedDuration: 25,
questionLimit: 123,
language: 'en',
questions: [
{
content: 'Tell me about a time you owned a production incident.',
interviewInstructions: 'Probe for ownership, not just participation.'
}
],
criteria: [
{
name: 'Communication',
evaluationInstructions: 'Look for clear, structured answers.',
priority: 'High'
}
],
tags: [
{
name: 'Work Authorization',
outputType: 'string',
outputOptions: ['<string>'],
instructions: 'Set to Yes if the candidate confirms US work authorization.'
}
]
})
};
fetch('https://api.alex.com/v1/api/templates', 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/templates",
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([
'name' => 'SWE Screen',
'intro' => '<string>',
'outro' => '<string>',
'interviewCreationNotes' => '<string>',
'additionalEvaluationInstructions' => '<string>',
'additionalInterviewInstructions' => '<string>',
'estimatedDuration' => 25,
'questionLimit' => 123,
'language' => 'en',
'questions' => [
[
'content' => 'Tell me about a time you owned a production incident.',
'interviewInstructions' => 'Probe for ownership, not just participation.'
]
],
'criteria' => [
[
'name' => 'Communication',
'evaluationInstructions' => 'Look for clear, structured answers.',
'priority' => 'High'
]
],
'tags' => [
[
'name' => 'Work Authorization',
'outputType' => 'string',
'outputOptions' => [
'<string>'
],
'instructions' => 'Set to Yes if the candidate confirms US work authorization.'
]
]
]),
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/templates"
payload := strings.NewReader("{\n \"name\": \"SWE Screen\",\n \"intro\": \"<string>\",\n \"outro\": \"<string>\",\n \"interviewCreationNotes\": \"<string>\",\n \"additionalEvaluationInstructions\": \"<string>\",\n \"additionalInterviewInstructions\": \"<string>\",\n \"estimatedDuration\": 25,\n \"questionLimit\": 123,\n \"language\": \"en\",\n \"questions\": [\n {\n \"content\": \"Tell me about a time you owned a production incident.\",\n \"interviewInstructions\": \"Probe for ownership, not just participation.\"\n }\n ],\n \"criteria\": [\n {\n \"name\": \"Communication\",\n \"evaluationInstructions\": \"Look for clear, structured answers.\",\n \"priority\": \"High\"\n }\n ],\n \"tags\": [\n {\n \"name\": \"Work Authorization\",\n \"outputType\": \"string\",\n \"outputOptions\": [\n \"<string>\"\n ],\n \"instructions\": \"Set to Yes if the candidate confirms US work authorization.\"\n }\n ]\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/templates")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"SWE Screen\",\n \"intro\": \"<string>\",\n \"outro\": \"<string>\",\n \"interviewCreationNotes\": \"<string>\",\n \"additionalEvaluationInstructions\": \"<string>\",\n \"additionalInterviewInstructions\": \"<string>\",\n \"estimatedDuration\": 25,\n \"questionLimit\": 123,\n \"language\": \"en\",\n \"questions\": [\n {\n \"content\": \"Tell me about a time you owned a production incident.\",\n \"interviewInstructions\": \"Probe for ownership, not just participation.\"\n }\n ],\n \"criteria\": [\n {\n \"name\": \"Communication\",\n \"evaluationInstructions\": \"Look for clear, structured answers.\",\n \"priority\": \"High\"\n }\n ],\n \"tags\": [\n {\n \"name\": \"Work Authorization\",\n \"outputType\": \"string\",\n \"outputOptions\": [\n \"<string>\"\n ],\n \"instructions\": \"Set to Yes if the candidate confirms US work authorization.\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.alex.com/v1/api/templates")
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 \"name\": \"SWE Screen\",\n \"intro\": \"<string>\",\n \"outro\": \"<string>\",\n \"interviewCreationNotes\": \"<string>\",\n \"additionalEvaluationInstructions\": \"<string>\",\n \"additionalInterviewInstructions\": \"<string>\",\n \"estimatedDuration\": 25,\n \"questionLimit\": 123,\n \"language\": \"en\",\n \"questions\": [\n {\n \"content\": \"Tell me about a time you owned a production incident.\",\n \"interviewInstructions\": \"Probe for ownership, not just participation.\"\n }\n ],\n \"criteria\": [\n {\n \"name\": \"Communication\",\n \"evaluationInstructions\": \"Look for clear, structured answers.\",\n \"priority\": \"High\"\n }\n ],\n \"tags\": [\n {\n \"name\": \"Work Authorization\",\n \"outputType\": \"string\",\n \"outputOptions\": [\n \"<string>\"\n ],\n \"instructions\": \"Set to Yes if the candidate confirms US work authorization.\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Template created successfully",
"payload": "clx8f2k1p0000abcd1234efgh"
}{
"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
application/json
Template name. Must be unique within your company.
Example:
"SWE Screen"
Opening script for the interview
Closing script for the interview
Notes that guide question generation when this template is applied to a job
Estimated interview duration in minutes
Example:
25
Cap on generated questions. 0 adds none beyond the template questions.
Example:
"en"
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes