mark_offer
curl --request POST \
--url https://rest.hotfix.jobs/v1/employer/applications/{application_id}/offer/{offer_id}/mark \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form file=@example-fileconst form = new FormData();
form.append('file', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://rest.hotfix.jobs/v1/employer/applications/{application_id}/offer/{offer_id}/mark', 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/{application_id}/offer/{offer_id}/mark"
files = { "file": ("example-file", open("example-file", "rb")) }
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, files=files, headers=headers)
print(response.text){
"offer": {
"id": "7d4e3c2b-1a09-8765-4321-0fedcba98765",
"status": "accepted",
"subject": "Your offer for Staff engineer at Beacon",
"body": "Hi Ada,\n\nWe're excited to offer you the Staff engineer role at Beacon.\n\nYour pay will be $185,000 a year, and you'll start on November 2, 2026. The offer letter is attached.\n\nPlease let us know by October 23, 2026. If you have any questions first, just reply to this email.\n\nTo accept, reply to this email with \"I accept\" and your full name.",
"pay": "$185,000 a year",
"start_date": "2026-11-02",
"respond_by": "2026-10-23",
"sent_at": "2026-10-16T15:04:05+00:00",
"sent_by_user_id": "user_2abc",
"sent_by_name": "Maya Chen",
"reply": {
"received_at": "2026-10-17T09:12:00+00:00",
"from_address": "ada@example.com",
"excerpt": "I accept. Ada Lovelace"
},
"acceptance": {
"how": "reply",
"marked_by": "user_2abc",
"at": "2026-10-17T10:00:00+00:00",
"reply": {
"received_at": "2026-10-17T09:12:00+00:00",
"from_address": "ada@example.com",
"excerpt": "I accept. Ada Lovelace",
"thread_id": "18c2f0a1b2c3d4e5"
}
},
"has_signed_copy": false,
"signature_status": null,
"created_at": "2026-10-16T15:04:05+00:00"
},
"signing": true
}Offers
mark_offer
Record the candidate’s answer to an open offer. accepted moves the application to Hired; declined moves it back to Interviewing. With from_reply, the candidate’s reply on the offer’s thread (get_offer’s reply) is kept as the acceptance. file attaches a signed copy from any signing tool. A form post (multipart/form-data). Does not email the applicant. Answers with the same body as get_offer. MCP tool: mark_offer (without file).
POST
/
v1
/
employer
/
applications
/
{application_id}
/
offer
/
{offer_id}
/
mark
mark_offer
curl --request POST \
--url https://rest.hotfix.jobs/v1/employer/applications/{application_id}/offer/{offer_id}/mark \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form file=@example-fileconst form = new FormData();
form.append('file', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://rest.hotfix.jobs/v1/employer/applications/{application_id}/offer/{offer_id}/mark', 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/{application_id}/offer/{offer_id}/mark"
files = { "file": ("example-file", open("example-file", "rb")) }
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, files=files, headers=headers)
print(response.text){
"offer": {
"id": "7d4e3c2b-1a09-8765-4321-0fedcba98765",
"status": "accepted",
"subject": "Your offer for Staff engineer at Beacon",
"body": "Hi Ada,\n\nWe're excited to offer you the Staff engineer role at Beacon.\n\nYour pay will be $185,000 a year, and you'll start on November 2, 2026. The offer letter is attached.\n\nPlease let us know by October 23, 2026. If you have any questions first, just reply to this email.\n\nTo accept, reply to this email with \"I accept\" and your full name.",
"pay": "$185,000 a year",
"start_date": "2026-11-02",
"respond_by": "2026-10-23",
"sent_at": "2026-10-16T15:04:05+00:00",
"sent_by_user_id": "user_2abc",
"sent_by_name": "Maya Chen",
"reply": {
"received_at": "2026-10-17T09:12:00+00:00",
"from_address": "ada@example.com",
"excerpt": "I accept. Ada Lovelace"
},
"acceptance": {
"how": "reply",
"marked_by": "user_2abc",
"at": "2026-10-17T10:00:00+00:00",
"reply": {
"received_at": "2026-10-17T09:12:00+00:00",
"from_address": "ada@example.com",
"excerpt": "I accept. Ada Lovelace",
"thread_id": "18c2f0a1b2c3d4e5"
}
},
"has_signed_copy": false,
"signature_status": null,
"created_at": "2026-10-16T15:04:05+00:00"
},
"signing": true
}Authorizations
ApiKeyBearerAuth
Company API key minted at Settings → API. Prefix hf_. Accepted on hiring data routes. Not accepted on MCP.
Path Parameters
Application UUID.
Offer UUID, from get_offer.
Body
multipart/form-data
Response
200 - application/json
Success
The response is of type object.