curl --request PATCH \
--url https://rest.hotfix.jobs/v1/employer/applications \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"ids": [
"<string>"
]
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({ids: ['<string>']})
};
fetch('https://rest.hotfix.jobs/v1/employer/applications', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://rest.hotfix.jobs/v1/employer/applications"
payload = { "ids": ["<string>"] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"updated": [
{
"id": "2c8f0a1e-4b3d-4e91-9c7a-1f6b8d2e0a11",
"applicant_name": "Jordan Lee",
"applicant_email": "jordan@example.com",
"job_id": "9a1b2c3d-4e5f-6789-abcd-ef0123456789",
"job_title": "Staff engineer",
"status": "interviewing",
"knockout": false,
"applied_at": "2026-09-20T18:22:01+00:00",
"has_resume": true,
"answers": {
"Why this role?": "I ship."
},
"also_applied": []
}
],
"failed": [
{
"id": "7d2e9b40-1c3a-4f5e-8a6b-0c9d1e2f3a4b",
"status": 404,
"message": "application not found"
}
]
}bulk_update_applications
Apply one change to up to 100 applications in one request: status, archived, assignee, or a rejection letter, with the same fields as set_status. Each application changes exactly as set_status would change it. One that fails (not found, an invalid move) is listed under failed with the status set_status would answer, and the rest still apply. Does not send email unless rejection_email is set.
curl --request PATCH \
--url https://rest.hotfix.jobs/v1/employer/applications \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"ids": [
"<string>"
]
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({ids: ['<string>']})
};
fetch('https://rest.hotfix.jobs/v1/employer/applications', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://rest.hotfix.jobs/v1/employer/applications"
payload = { "ids": ["<string>"] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"updated": [
{
"id": "2c8f0a1e-4b3d-4e91-9c7a-1f6b8d2e0a11",
"applicant_name": "Jordan Lee",
"applicant_email": "jordan@example.com",
"job_id": "9a1b2c3d-4e5f-6789-abcd-ef0123456789",
"job_title": "Staff engineer",
"status": "interviewing",
"knockout": false,
"applied_at": "2026-09-20T18:22:01+00:00",
"has_resume": true,
"answers": {
"Why this role?": "I ship."
},
"also_applied": []
}
],
"failed": [
{
"id": "7d2e9b40-1c3a-4f5e-8a6b-0c9d1e2f3a4b",
"status": 404,
"message": "application not found"
}
]
}Authorizations
Company API key minted at Settings → API. Prefix hf_. Accepted on hiring data routes. Not accepted on MCP.
Body
Application UUIDs to change, 1 to 100. A repeated id changes once.
new, considering, interviewing, hired, or rejected.
true hides the row from the default list without changing status; false restores it.
true holds the application back from your company's applicant data retention (a legal hold, or saving them for a future role); false releases it.
Assign to this teammate (user id from the team). MCP tool: set_assignee.
true unassigns. Wins over assignee_user_id.
With status rejected: schedule this letter from your mailbox. Skipped when the application is already Rejected.
Show child attributes
Show child attributes
Response
Success
The response is of type object.