curl --request PATCH \
--url https://api.hotfix.jobs/v1/employer/jobs/{job_id} \
--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: 'PATCH',
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/{job_id}', 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/{job_id}"
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.patch(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"
}Update a job
Edit an open or paused job, or publish a draft with draft: false. title is required, and a published job needs its description. Closing is a separate call.
Changing the title, description, locations, countries, work type, employment type, or salary makes Hotfix read the job again in the background; it stays on Hotfix job search meanwhile. Department, team, yoe_min, skills, and education are yours and are never rewritten: leave one out to keep it, or send null to clear it.
curl --request PATCH \
--url https://api.hotfix.jobs/v1/employer/jobs/{job_id} \
--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: 'PATCH',
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/{job_id}', 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/{job_id}"
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.patch(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"
}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