Jobs

Update a job

Remote modality and locations

remote_modality controls which location fields the Jobs API reads:

  • fully_remote: do not send location fields. Regions, countries, and cities are cleared.
  • remote_local: send location_region_ids and/or location_country_ids as slugs from GET /api/v0/regions and GET /api/v0/countries.
  • no_remote, hybrid, temporarily_remote: send location_city_ids as numeric city IDs from GET /api/v0/cities.

Unknown or wrong identifier types resolve to empty locations and can return 422. location_city_ids uses city IDs, not city names, country slugs, or tenant_city_ids.

Posting on behalf of a client brand (company shells)

Partner accounts (typically ATS integrations posting for many client companies) can brand a job as one of their company shells instead of their own account: send company_shell_id with the shell's slug (from GET /api/v0/company_shells). Every public surface — job page, company profile link, logo, feeds, and public API — then shows the client company's identity, while applications, processes, and billing stay on your account. Omit the field for a normal job; on update, send "" to detach the shell. See the Company shells section to create and manage shells.

Naming the final employer (recruiters and outsourcing companies)

Use hiring_company and hiring_company_website when you are recruiting or outsourcing on behalf of a client, to name the company where the applicant will actually work. Once hiring_company is given, hiring_company_website is required too. From 5 Oct 2026, a job that our review flags as hiding the final employer is rejected with obfuscated_company unless your company holds a Recruiter-or-higher subscription. Placeholder names ("confidential", "rubro") and your own company name are rejected — name the real client.

put/api/v0/jobs/{id}

Request

Path parameters

idstring required

Job slug from GET /api/v0/jobs.

Headers

Authorizationstring

Bearer credential for the authentication scheme required by this endpoint.

Request body

expandstring[]
titlestring
hiring_companystring nullable

Name of the client company where the applicant will actually work, when you recruit or outsource on behalf of a client. Requires hiring_company_website. Placeholder names ("confidential", "rubro") and your own company name are rejected with 422.

hiring_company_websitestring nullable

Website of the client company named in hiring_company. Required whenever hiring_company is sent; it must be a valid http(s) URL and not your own company's domain.

descriptionstring
remote_modality'no_remote' | 'temporarily_remote' | 'remote_local' | 'fully_remote' | 'hybrid'

Work-location policy. Determines which location ID fields are accepted.

location_region_idsstring[]

For remote_local jobs only. Region slugs from GET /api/v0/regions.

location_country_idsstring[]

For remote_local jobs only. Country slugs from GET /api/v0/countries.

location_city_idsinteger[]

Required for no_remote, hybrid, and temporarily_remote. Numeric city IDs from GET /api/v0/cities.

company_shell_idstring nullable

Partner accounts only. Slug of one of your company shells (GET /api/v0/company_shells) to publicly brand this job as that client company. Omit for a normal job. On update, send "" to detach the shell. 404 for an unknown or foreign slug; 422 if your account is not partner-enabled.

hide_salaryboolean

Hide the salary range on public job pages. Full-time and internship jobs still need min_salary and max_salary. While true, responses return min_salary and max_salary as null, so send only the fields you change: a job read back from the API and sent again returns 422. Get on Board resets it to false when your subscription is cancelled or the job is unlocked as a regular (non-subscriber) job. Not the same as confidential, which keeps the whole job out of public listings.

cv_requiredboolean

Require the candidate's CV file when applying. Only applied when the subscription permits requiring a CV (can_require_resume?). Otherwise silently ignored; the request still succeeds.

linkedin_requiredboolean

Require the candidate's LinkedIn profile URL when applying. Only applied when the subscription permits requiring a CV (can_require_resume?). Otherwise silently ignored; the request still succeeds.

Response

Updates an existing job posting by its slug.

Changes

No recorded changes to this operation across all 1 revision of this API.