curl --request POST \
--url https://api.heymilo.ai/api/v2/postings/{posting_id}/activate \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.heymilo.ai/api/v2/postings/{posting_id}/activate"
headers = {"X-API-KEY": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://api.heymilo.ai/api/v2/postings/{posting_id}/activate', 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.heymilo.ai/api/v2/postings/{posting_id}/activate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.heymilo.ai/api/v2/postings/{posting_id}/activate"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
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.heymilo.ai/api/v2/postings/{posting_id}/activate")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.heymilo.ai/api/v2/postings/{posting_id}/activate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "13D77095",
"company_id": "comp_abc123",
"title": "Senior Software Engineer",
"description": "We are looking for a senior software engineer...",
"status": "active",
"finalized": true,
"archived": false,
"test_posting": false,
"object": "posting",
"name": "senior-software-engineer",
"language": "en",
"interviewer_name": "Sarah",
"workflow": [
{
"type": "web_interview",
"order": 1,
"id": "agent_vi_001",
"config": {}
}
],
"urls": {
"candidate_url": "https://candidates.heymilo.io/acme/senior-engineer",
"ingestion_url_key": "ibURejyPMSlw6de0OZUdoxyoXTgWO78ey2NUo96EOG1gY",
"review_url": "https://admin.heymilo.ai/w/ABC123/lab2/POST_ID/1-details"
},
"deadline": 1775174400,
"redirect_url": "https://acme.com/thank-you",
"scheduling_url": "https://cal.com/acme/interview",
"max_retakes": 1,
"allow_sms_comms": false,
"instructions": "<string>",
"company_overview": "<string>",
"job_overview": "<string>",
"interview_process_overview": "<string>",
"company_overview_delivery_mode": "<string>",
"job_overview_delivery_mode": "<string>",
"interview_process_overview_delivery_mode": "<string>",
"phone_number_id": "<string>",
"sender_email_id": "<string>",
"email_template_group_id": "<string>",
"design_template_group_id": "<string>",
"retake_cooldown_days": 123,
"email_report_to_candidate": false,
"ats_metadata": {
"ats_job_id": "WK-12345",
"ats_name": "workable",
"pending_activation": true,
"source": "job_sync"
},
"metadata": {
"external_id": "ats_12345",
"source": "workday"
},
"team_ids": [
"team_abc123"
],
"created_at": 1739612400,
"updated_at": 1739617200
},
"meta": {}
}{
"error": {
"type": "invalid_request_error",
"code": "validation_error",
"message": "The request body failed validation",
"param": "<string>",
"doc_url": "<string>",
"errors": [
{
"code": "invalid_param",
"message": "title must be between 3 and 200 characters",
"param": "title"
}
]
}
}{
"error": {
"type": "invalid_request_error",
"code": "validation_error",
"message": "The request body failed validation",
"param": "<string>",
"doc_url": "<string>",
"errors": [
{
"code": "invalid_param",
"message": "title must be between 3 and 200 characters",
"param": "title"
}
]
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"error": {
"type": "invalid_request_error",
"code": "validation_error",
"message": "The request body failed validation",
"param": "<string>",
"doc_url": "<string>",
"errors": [
{
"code": "invalid_param",
"message": "title must be between 3 and 200 characters",
"param": "title"
}
]
}
}Activate an interviewer
Activate an interviewer so it begins accepting candidates. The interviewer must have a valid workflow configuration.
For ATS-derived postings still in the pending_activation intermediate stage (created via createPosting with an ATS-derived interview_template_id, or clonePosting of an ATS-derived posting), this call finalizes the posting and attaches the ATS mapping so candidate ingestion from the ATS begins. The two steps run in one call; the ATS attach is idempotent and best-effort, so re-calling activate is safe and a transient ATS integrator hiccup will not block finalize.
curl --request POST \
--url https://api.heymilo.ai/api/v2/postings/{posting_id}/activate \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.heymilo.ai/api/v2/postings/{posting_id}/activate"
headers = {"X-API-KEY": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://api.heymilo.ai/api/v2/postings/{posting_id}/activate', 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.heymilo.ai/api/v2/postings/{posting_id}/activate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.heymilo.ai/api/v2/postings/{posting_id}/activate"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
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.heymilo.ai/api/v2/postings/{posting_id}/activate")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.heymilo.ai/api/v2/postings/{posting_id}/activate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "13D77095",
"company_id": "comp_abc123",
"title": "Senior Software Engineer",
"description": "We are looking for a senior software engineer...",
"status": "active",
"finalized": true,
"archived": false,
"test_posting": false,
"object": "posting",
"name": "senior-software-engineer",
"language": "en",
"interviewer_name": "Sarah",
"workflow": [
{
"type": "web_interview",
"order": 1,
"id": "agent_vi_001",
"config": {}
}
],
"urls": {
"candidate_url": "https://candidates.heymilo.io/acme/senior-engineer",
"ingestion_url_key": "ibURejyPMSlw6de0OZUdoxyoXTgWO78ey2NUo96EOG1gY",
"review_url": "https://admin.heymilo.ai/w/ABC123/lab2/POST_ID/1-details"
},
"deadline": 1775174400,
"redirect_url": "https://acme.com/thank-you",
"scheduling_url": "https://cal.com/acme/interview",
"max_retakes": 1,
"allow_sms_comms": false,
"instructions": "<string>",
"company_overview": "<string>",
"job_overview": "<string>",
"interview_process_overview": "<string>",
"company_overview_delivery_mode": "<string>",
"job_overview_delivery_mode": "<string>",
"interview_process_overview_delivery_mode": "<string>",
"phone_number_id": "<string>",
"sender_email_id": "<string>",
"email_template_group_id": "<string>",
"design_template_group_id": "<string>",
"retake_cooldown_days": 123,
"email_report_to_candidate": false,
"ats_metadata": {
"ats_job_id": "WK-12345",
"ats_name": "workable",
"pending_activation": true,
"source": "job_sync"
},
"metadata": {
"external_id": "ats_12345",
"source": "workday"
},
"team_ids": [
"team_abc123"
],
"created_at": 1739612400,
"updated_at": 1739617200
},
"meta": {}
}{
"error": {
"type": "invalid_request_error",
"code": "validation_error",
"message": "The request body failed validation",
"param": "<string>",
"doc_url": "<string>",
"errors": [
{
"code": "invalid_param",
"message": "title must be between 3 and 200 characters",
"param": "title"
}
]
}
}{
"error": {
"type": "invalid_request_error",
"code": "validation_error",
"message": "The request body failed validation",
"param": "<string>",
"doc_url": "<string>",
"errors": [
{
"code": "invalid_param",
"message": "title must be between 3 and 200 characters",
"param": "title"
}
]
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"error": {
"type": "invalid_request_error",
"code": "validation_error",
"message": "The request body failed validation",
"param": "<string>",
"doc_url": "<string>",
"errors": [
{
"code": "invalid_param",
"message": "title must be between 3 and 200 characters",
"param": "title"
}
]
}
}Authorizations
API key for authentication. Pass your key in the X-API-KEY header.
Path Parameters
Response
Successful Response
A job posting with its full agentic workflow configuration.
A posting represents a complete hiring pipeline — it defines the job, the AI agents involved, and how candidates progress through each screening step.
Show child attributes
Show child attributes
Optional metadata. Shape varies by endpoint.
Was this page helpful?