curl --request POST \
--url https://api.hotfix.jobs/v1/employer/jobs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"title": "Staff engineer",
"description": "## About the role\n\nYou'll own the services behind our public API."
}
EOFconst options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Staff engineer',
description: '## About the role\n\nYou\'ll own the services behind our public API.'
})
};
fetch('https://api.hotfix.jobs/v1/employer/jobs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.hotfix.jobs/v1/employer/jobs"
payload = {
"title": "Staff engineer",
"description": "## About the role
You'll own the services behind our public API."
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "9a1b2c3d-4e5f-6789-abcd-ef0123456789",
"title": "Staff engineer",
"department": "engineering",
"team": "backend",
"locations": [
"New York"
],
"work_type": "hybrid",
"employment_type": "FULL_TIME",
"on_careers_page": true,
"listed_on_hotfix": false,
"posted_at": "2026-09-21T15:04:05+00:00",
"applicants_count": 3
}Create a job
Publish a job, or save a draft with draft: true. A published job counts toward your plan’s open jobs and goes on your company page at once, and on Hotfix job search once it has a department. A draft only needs a title.
Hotfix reads the description in the background, usually within a minute, to write the job’s search summary and fill in yoe_min, skills, and education where you left them out.
curl --request POST \
--url https://api.hotfix.jobs/v1/employer/jobs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"title": "Staff engineer",
"description": "## About the role\n\nYou'll own the services behind our public API."
}
EOFconst options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Staff engineer',
description: '## About the role\n\nYou\'ll own the services behind our public API.'
})
};
fetch('https://api.hotfix.jobs/v1/employer/jobs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.hotfix.jobs/v1/employer/jobs"
payload = {
"title": "Staff engineer",
"description": "## About the role
You'll own the services behind our public API."
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "9a1b2c3d-4e5f-6789-abcd-ef0123456789",
"title": "Staff engineer",
"department": "engineering",
"team": "backend",
"locations": [
"New York"
],
"work_type": "hybrid",
"employment_type": "FULL_TIME",
"on_careers_page": true,
"listed_on_hotfix": false,
"posted_at": "2026-09-21T15:04:05+00:00",
"applicants_count": 3
}Authorizations
Body
The job's apply form: resume, phone, linkedin, github, website, and cover_letter each required, optional, or off; and up to 20 questions plus company fields (field_id, required). A yes/no or number question can be a knockout (knockout with knockout_on or knockout_below). Name and email are always asked. Get a job's form_schema is what candidates see.
Response
Success