Docs / Jobs
create_job_posting
Create a job posting as a draft.
This action can change or spend something, and when it does it happens right away. Read “Good to know” first.
What you give it
| Input | What it is | Where to get it |
|---|---|---|
jobTitleneeded | A group of fields. What goes inside
| You write it. |
companyneeded | A group of fields. What goes inside
| You write it. |
workplaceneeded | One of: ON_SITE, HYBRID, REMOTE. | You write it. |
locationneeded | A search filter id. LinkedIn's id for the place (lookup_search_ids type LOCATION). | run lookup_search_ids with type LOCATION, and use matches[].id from its answer. |
descriptionneeded | Text, up to 25000 characters. The job description. HTML tags may be used to structure it. | You write it. |
employmentStatusoptional | One of: FULL_TIME, PART_TIME, CONTRACT, TEMPORARY, OTHER, VOLUNTEER, INTERNSHIP. | You write it. |
autoRejectionTemplateoptional | Text. Message sent automatically to applicants who do not pass the screening questions. | You write it. |
screeningQuestionsoptional | A list (a group of fields). Questions applicants must answer.What goes inside
| You write it. |
applyMethodoptional | A group of fields. How people apply: on LinkedIn (applications are emailed to notificationEmail) or on an external site.What goes inside
| You write it. |
recruiteroptional | A group of fields. Recruiter job postings only. To create one LinkedIn requires project, functions, industries, seniority and applyMethod.What goes inside
| You write it. |
connectionIdoptional | A connection id. Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one. | Run list_linkedin_accounts and use accounts[].id from its answer.15 more places to get it
|
Call it
curl -X POST https://api.heyreagent.com/v1/actions/create_job_posting \
-H "Authorization: Bearer YOUR_KEY" \
-H "content-type: application/json" \
-d '{"jobTitle":{"text":"Software Engineer"},"company":{"text":"Your company"},"workplace":"ON_SITE","location":"PASTE_LOCATION_ID_HERE","description":"What the job is about."}'The same call in JavaScript
const response = await fetch("https://api.heyreagent.com/v1/actions/create_job_posting", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_KEY",
"content-type": "application/json",
},
body: JSON.stringify({
"jobTitle": {
"text": "Software Engineer"
},
"company": {
"text": "Your company"
},
"workplace": "ON_SITE",
"location": "PASTE_LOCATION_ID_HERE",
"description": "What the job is about."
}),
});
const answer = await response.json();
console.log(answer);The same call in Python
import requests
response = requests.post(
"https://api.heyreagent.com/v1/actions/create_job_posting",
headers={"Authorization": "Bearer YOUR_KEY"},
json={
"jobTitle": {
"text": "Software Engineer",
},
"company": {
"text": "Your company",
},
"workplace": "ON_SITE",
"location": "PASTE_LOCATION_ID_HERE",
"description": "What the job is about.",
},
)
print(response.json())The same call in n8n
Add an HTTP Request node and fill it in like this:
| Method | POST |
| URL | https://api.heyreagent.com/v1/actions/create_job_posting |
| Send Headers | On. Name Authorization, Value Bearer YOUR_KEY |
| Send Body | On. Body Content Type JSON, Specify Body Using JSON, then paste the body below |
{
"jobTitle": {
"text": "Software Engineer"
},
"company": {
"text": "Your company"
},
"workplace": "ON_SITE",
"location": "PASTE_LOCATION_ID_HERE",
"description": "What the job is about."
}Put your own key where it says YOUR_KEY. Put your own value where it says PASTE_…_HERE: the table above says where each one comes from. New here? Start with your first call.
What you get back
When it worked, the answer is { "ok": true, "result": { … } }. Inside result:
created | |
draft | |
from | the account it ran on |
usedToday | number |
dailyLimit | number |
jobId | A job id. Other actions take it. |
projectId | A hiring project id. Other actions take it. |
A field that does not apply to an answer is left out, or is null. There are 11 more fields nested inside these.
When it did not work, the answer is { "ok": false, "error": "…", "message": "…" }. What each error means.
Good to know
- jobTitle and company each take an id from lookup_search_ids, or free text.
- Nothing is public yet: publish_job_posting takes the jobId.
- projectId comes back for Recruiter postings only.
In Claude or ChatGPT
Once connected, ask in your own words. The assistant sees this action as a tool with the same name, create_job_posting, and the same inputs.