WarmablyWarmablyDOCS
Search docs⌘K
Dashboard
API Reference/Endpoints

Create a job posting

POST/api/linkedin/gateway/linkedin/jobs

Starts a new job posting as an unpublished draft. Nothing goes live on LinkedIn until you follow up with Publish a job posting — this call just saves the content and tells you what publishing options the account is eligible for.

Authentication

Send your personal API key as a bearer token. A missing, malformed or revoked key returns 401.

Body parameters

FieldTypeDescription
account_id *stringThe connected account to create the draft under.
job_title *objectEither { id } to reuse a LinkedIn-suggested title, or { text } for a free-form one.
company *objectSame { id } / { text } shape, pointing at the hiring company.
workplace *"ON_SITE" | "HYBRID" | "REMOTE"The work arrangement shown on the posting.
location *stringA location id — the same LOCATION-type ids used by Search people & companies.
employment_statusstringOne of FULL_TIME, PART_TIME, CONTRACT, TEMPORARY, OTHER, VOLUNTEER, INTERNSHIP.
description *stringThe posting body. Basic HTML markup is allowed.
auto_rejection_templatestringA message automatically sent to applicants you reject.
screening_questionsarrayQualifying questions applicants must answer — numeric or multiple-choice.
apply_methodobject{ type: "linkedin" } to collect applicants on LinkedIn, or { type: "external" } to redirect elsewhere.
recruiterobjectAdvanced project, function, industry, skill, seniority and compensation settings.

Response fields

FieldTypeDescription
job_idstringThe new draft's id.
project_idstringThe Recruiter/Talent project this draft was filed under.
publish_options.freeobjectWhether a free publish is available (eligible, ineligible_reason) and its estimated monthly applicant volume.
publish_options.promotedobjectEstimated applicant volume and a recommended daily/monthly budget range for a paid boost.
The recruiter field only takes effect on accounts with a LinkedIn Recruiter/Talent seat — sending it against a Classic account is silently ignored rather than rejected.

Errors

·401 Unauthorized. The key is missing, malformed or has been rotated.·403 Forbidden. account_id doesn't belong to this key, or the account has no job-posting access.·404 Not Found. No account with that id belongs to this key.·422 Unprocessable Entity. The workspace has used up its job-posting slots for this billing period.
CredentialsRequired
AuthorizationBearer wm_live_••••••••
RequestTry it
curl -X POST https://api.warmably.com/api/linkedin/gateway/linkedin/jobs \
  -H "Authorization: Bearer wm_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": "459993d2-b0e7-4b19-baf9-45252ca324cf",
    "job_title": { "text": "Senior Product Designer" },
    "company": { "id": "1035" },
    "workplace": "HYBRID",
    "location": "103644278",
    "description": "<p>We are looking for a senior product designer...</p>"
  }'
Response
200 OK
{
  "object": "LinkedinJobPostingDraftCreated",
  "job_id": "3897456210",
  "project_id": "5120033",
  "publish_options": {
    "free": {
      "eligible": true,
      "ineligible_reason": null,
      "estimated_monthly_applicants": 18
    },
    "promoted": {
      "estimated_monthly_applicants": 64,
      "currency": "USD",
      "daily_budget": { "min": 10, "max": 500, "recommended": 25 },
      "monthly_budget": { "min": 300, "max": 15000, "recommended": 750 }
    }
  }
}
No key yet? Create one from Dashboard → API Keys.