# create_job_posting: Create a job posting draft

Create a job posting as a draft. This action can change or spend something, and it happens right away. Plan: Free and Connect.

```
POST https://api.heyreagent.com/v1/actions/create_job_posting
Authorization: Bearer YOUR_KEY
content-type: application/json

{
  "jobTitle": {
    "text": "Software Engineer"
  },
  "company": {
    "text": "Your company"
  },
  "workplace": "ON_SITE",
  "location": "PASTE_LOCATION_ID_HERE",
  "description": "What the job is about."
}
```

## What you give it

- `jobTitle` (needed): a group of fields. 
  - `id` (optional): a search filter id. LinkedIn's id for the job title (lookup_search_ids type JOB_TITLE). Where to get it: run `lookup_search_ids` with type `JOB_TITLE` and use `matches[].id`.
  - `text` (optional): text. The job title as free text, when LinkedIn has no id for it.
- `company` (needed): a group of fields. 
  - `id` (optional): a search filter id. LinkedIn's id for the company (lookup_search_ids type COMPANY). Where to get it: run `lookup_search_ids` with type `COMPANY` and use `matches[].id`.
  - `text` (optional): text. The company as free text, when LinkedIn has no id for it.
- `workplace` (needed): one of: ON_SITE, HYBRID, REMOTE. 
- `location` (needed): a search filter id. LinkedIn's id for the place (lookup_search_ids type LOCATION). Where to get it: run `lookup_search_ids` with type `LOCATION` and use `matches[].id`.
- `description` (needed): text, up to 25000 characters. The job description. HTML tags may be used to structure it.
- `employmentStatus` (optional): one of: FULL_TIME, PART_TIME, CONTRACT, TEMPORARY, OTHER, VOLUNTEER, INTERNSHIP. 
- `autoRejectionTemplate` (optional): text. Message sent automatically to applicants who do not pass the screening questions.
- `screeningQuestions` (optional): a list (a group of fields). Questions applicants must answer.
  - `question` (needed): text. 
  - `answerType` (needed): text. The kind of answer, e.g. numeric or multiple_choices.
  - `position` (optional): a number. 
  - `mustMatch` (optional): true or false. 
  - `minExpectation` (optional): a number. 
  - `maxExpectation` (optional): a number. 
  - `choices` (optional): a list (text). 
  - `expectedChoices` (optional): a list (text). 
- `applyMethod` (optional): a group of fields. How people apply: on LinkedIn (applications are emailed to notificationEmail) or on an external site.
  - `type` (needed): exactly: linkedin. 
  - `notificationEmail` (needed): an email address. 
  - `url` (needed): a link. 
- `recruiter` (optional): a group of fields. Recruiter job postings only. To create one LinkedIn requires project, functions, industries, seniority and applyMethod.
  - `project` (optional): a group of fields. create: the hiring project — { id } of an existing one or { name } for a new one.
  - `projectId` (optional): text. edit: the hiring project the posting belongs to.
  - `functions` (optional): a search filter id. Job function ids (lookup_search_ids type JOB_FUNCTION). Where to get it: run `lookup_search_ids` with type `JOB_FUNCTION` and use `matches[].id`.
  - `industries` (optional): a search filter id. Industry ids (lookup_search_ids type INDUSTRY). Where to get it: run `lookup_search_ids` with type `INDUSTRY` and use `matches[].id`.
  - `skills` (optional): a search filter id. Skill ids (lookup_search_ids type SKILL). Where to get it: run `lookup_search_ids` with type `SKILL` and use `matches[].id`.
  - `seniority` (optional): one of: INTERNSHIP, ENTRY_LEVEL, ASSOCIATE, MID_SENIOR_LEVEL, DIRECTOR, EXECUTIVE, NOT_APPLICABLE. 
  - `includePosterInfo` (optional): true or false. 
  - `trackingPixelUrl` (optional): a link. 
  - `companyJobId` (optional): text. 
  - `applyMethod` (optional): a group of fields. 
  - `salary` (optional): a group of fields. 
  - `additionalCompensation` (optional): a group of fields. 
  - `autoArchiveApplicants` (optional): a group of fields. 
  - `sendRejectionNotification` (optional): true or false. 
- `connectionId` (optional): a connection id. Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one. Where to get it: Run `list_linkedin_accounts` and use `accounts[].id`.

## What you get back

- `created`
- `draft`
- `from`: the account it ran on
- `usedToday`: number
- `dailyLimit`: number
- `jobId`: a job id
- `projectId`: a hiring project id

## 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.

Page: https://heyreagent.com/docs/actions/create_job_posting