Skip to main content
PUT
/
job
cURL
curl --request PUT \
  --url https://api.collective.work/{environment}/v1/job \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "id": "<string>",
  "companyLogoUrl": "https://openai.com/logo.png",
  "companyName": "OpenAI.com",
  "title": "Senior Fullstack Developer",
  "description": "I am searching for a talented developer to join our team! The stack includes javascript, react, and nodejs.",
  "profileWanted": "We are looking for a senior engineer with 5+ years of experience in distributed systems and a strong background in cloud infrastructure.",
  "isSalaryAccordingToProfile": true,
  "budget": "1250€/day or 80-100K€/year",
  "startingDate": "IN_2_TO_4_WEEKS",
  "expirationDate": "2026-11-29",
  "notifyByEmailForEveryApplication": false,
  "applicationUrl": "https://openai.com/aply",
  "requirePhoneNumber": false,
  "requireResume": true,
  "skills": [
    "javascript",
    "react",
    "node.js"
  ],
  "workPreferences": "ON_SITE",
  "location": "San Francisco, CA",
  "contractType": "FREELANCE",
  "language": "fr"
}
'
{
  "jobId": "<string>",
  "jobUrl": "<string>",
  "accountEmail": "<string>",
  "internalJobId": "<string>"
}

Authorizations

Authorization
string
header
required

API key given to you (If you don't have one, check this section)

Body

application/json
id
string
required

Unique identifier of the job (automatically generated by Collective) or Internal identifier of the job posting (provided by you when you created the job)

companyLogoUrl
string<uri>

URL of the company logo

Example:

"https://openai.com/logo.png"

companyName
string

Name of the company

Example:

"OpenAI.com"

title
string

Job title

Example:

"Senior Fullstack Developer"

description
string

Job description

It can be plain text or HTML (we sanitise it to keep only basic tags)

Example:

"I am searching for a talented developer to join our team! The stack includes javascript, react, and nodejs."

profileWanted
string

Description of the ideal candidate profile - ⚠️ If you want your offer to perform and be multi posted well, we highly recommend filling this field.

It can be plain text or HTML (we sanitise it to keep only basic tags)

Example:

"We are looking for a senior engineer with 5+ years of experience in distributed systems and a strong background in cloud infrastructure."

isSalaryAccordingToProfile
boolean

Whether the salary is open to negotiation and based on the candidate profile - ⚠️ We don't recommend setting this to true as jobs without salary perform way worse.

When set to true, the salary/budget will be displayed as "According to profile" on the job posting, overriding any budget value specified.

budget
string

Salary for the position - ⚠️ If you want your offer to perform and be multi posted well, we highly recommend filling this field.

Note: there is no need to set this field when isSalaryAccordingToProfile is true.

Example:

"1250€/day or 80-100K€/year"

startingDate
enum<string>

Start date for the position

If not specified, we will try to infer it or default to IN_2_TO_4_WEEKS

Available options:
ASAP,
IN_2_TO_4_WEEKS,
IN_4_TO_8_WEEKS,
IN_8_WEEKS_OR_MORE
Example:

"IN_2_TO_4_WEEKS"

expirationDate
string<date>

Max date until which users can apply to the job

Date should be in "YYYY-MM-DD" format.

If not specified, we will try to infer it or default to "In 2 weeks from now".

Example:

"2026-11-29"

notifyByEmailForEveryApplication
boolean
default:false

Controls whether the recruiter who posted the job will be notified by email for every application. Defaults to false. Ignored when applicationUrl is provided.

applicationUrl
string<uri>

External application URL

Use only this value in certain cases where you want to redirect users to your own application form.

⚠️ When this option is used, the job is not considered "premium" and Collective does not push the job in its own supply. We don't recommend using it for the best performance.

Example:

"https://openai.com/aply"

requirePhoneNumber
boolean
default:false

Whether phone number is required for application

Note: this field is not used when redirecting to an external application url.

requireResume
boolean
default:true
deprecated

Whether resume is required for application (deprecated - resume is always required now)

skills
string[]

Required skills for the position

We will match it also with our skills database to improve the job visibility, which may result in skills being added or tweaked.

Example:
["javascript", "react", "node.js"]
workPreferences
string

Work arrangement preferences (remote, hybrid, on-site)

Values should be one of ON_SITE (no remote allowed at all), HYBRID (some remote allowed, but still ne to come onsite), or REMOTE (no need to come to the office).

Example:

"ON_SITE"

location
string

Job location. We only accept a city (no region, or country, and we don't accept multiple cities - create 2 different jobs for that).

If not specified, we will try to infer it.

This field is a string but will be automatically remapped to an exact location in the google maps API.

Example:

"San Francisco, CA"

contractType
enum<string>

The contract type for the job

Values should be one of FREELANCE or PERMANENT_CONTRACT.

Available options:
FREELANCE,
PERMANENT_CONTRACT
Example:

"FREELANCE"

language
enum<string>

Language of the job posting

Values should be one of en (English) or fr (French).

If not specified, the language will be automatically detected.

Available options:
en,
fr
Example:

"fr"

Response

Job successfully updated

jobId
string
required

Unique identifier of the job posting (automatically generated by Collective)

jobUrl
string<uri>
required

Public URL of the job on Collective

accountEmail
string
required

Email of the account on Collective under which this job will be posted.

internalJobId
string

Internal identifier of the job posting (provided by you when you created the job). It is returned only if it was provided at creation.