Job Postings

Create a draft job posting

Create a draft job posting

Required scopes: job_postings:write

The interview plan must already be attached to a Job. An unattached plan is rejected with HTTP 409 interview_plan_not_linked_to_job; attach it first via POST /v1/jobs/{job_id}/actions/attach_artifact with artifact_type=interview_plan.

Example (curl):

curl -X POST https://api.yardstick.team/v1/job_postings \
  -H 'Authorization: Bearer ys_sk_live_…' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: 7c3a…' \
  -d '{"title":"Account Executive","interview_plan_id":"ipd_…","slug":"account-executive"}'

Example (TypeScript):

await fetch("https://api.yardstick.team/v1/job_postings", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.YS_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
    title: "Account Executive",
    interview_plan_id: "ipd_…",
    slug: "account-executive",
  }),
});
post/v1/job_postings

Request

  • Base URL: https://api.yardstick.team
  • URL: https://api.yardstick.team/v1/job_postings
  • Auth: HTTP bearer

Headers

Idempotency-Keystring

Supported for safe retry. Reuse the same key to receive the cached response without repeating the operation.

X-Request-Idstring

Optional caller-supplied request identifier. Values must match ^[A-Za-z0-9_-]{1,128}$; a valid value is echoed in the response X-Request-Id header, otherwise the API generates one.

Request body

titlestring required
interview_plan_idstring required
slugstring required
departmentstring
group_idstring uuid
locationstring
location_type'remote' | 'hybrid' | 'onsite'
location_countrystring

Assigned ISO 3166-1 alpha-2 country code. Lowercase input is accepted and normalized to uppercase.

salary_mininteger
salary_maxinteger
salary_currencystring
salary_displayboolean
descriptionstring
requirementsstring

Response

Created

idstring required

Display id, e.g. jp_<base32>

object'job_posting' required
status'draft' | 'unpublished' | 'published' | 'archived' required

Derived from is_published / published_at / archived_at.

titlestring nullable required
slugstring required
departmentstring nullable required
locationstring nullable required
location_typestring nullable required
location_countrystring nullable required

Assigned ISO 3166-1 alpha-2 country code for the posting location. Drafts may be null; every new publish or republish requires a country, including remote roles.

salary_minnumber nullable required
salary_maxnumber nullable required
salary_currencystring nullable required
salary_displayboolean nullable required
descriptionstring nullable required
requirementsstring nullable required
custom_questionsunknown
interview_plan_idstring required

Display id of the bound interview plan (ipd_<base32>).

is_publishedboolean required
published_atstring nullable required

ISO-8601 UTC

archived_atstring nullable required

ISO-8601 UTC

public_urlstring nullable required

Canonical public job board URL when published in live mode; uses PUBLIC_JOB_BOARD_BASE_URL with root jobs-board paths, falls back to PUBLIC_APP_BASE_URL with /careers paths, then defaults to https://jobs.yardstick.team. Null for drafts, archived postings, and test-mode postings.

applications_countinteger nullable required

Application count populated on retrieve-by-id; null on list responses to bound query cost.

livemodeboolean required
created_atstring nullable required

ISO-8601 UTC

updated_atstring nullable required

ISO-8601 UTC

Changes

No recorded changes to this operation across all 2 revisions of this API.