Publish a job listing
Transitions the listing from `DRAFT` (or `CLOSED`) to `ACTIVE` (or `UNDER_REVIEW` if moderation is enabled). Optionally activates paid addons such as featured placement. Requires scope: `jobs:write`
Transitions the listing from DRAFT (or CLOSED) to ACTIVE (or UNDER_REVIEW if moderation is enabled). Optionally activates paid addons such as featured placement.
Requires scope: jobs:write
Authorization
ApiKeyAuth API key issued by Jobiflow. Pass it in the X-API-Key request header.
Create keys via the company dashboard (Settings → API Keys) or via POST /settings/api-keys.
In: header
Path Parameters
UUID of the job listing to publish.
uuidRequest Body
application/json
Optional addon selection for this listing. Omit the body if no addons are needed.
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/public/v1/job-listings/497f6eca-6276-4993-bfeb-53cbbbba6f08/publish" \ -H "Content-Type: application/json" \ -d '{}'{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"companyId": "8bb73d03-06b4-47c7-80c7-59301f770eda",
"status": "DRAFT",
"sectorId": "3274bbb4-3f99-4800-8405-d01f8a71a05d",
"position": {
"value": "string",
"original": "string",
"sourceLanguage": "en",
"translated": true,
"translationType": "AI"
},
"positionType": "FULL_TIME",
"workPlaceType": "REMOTE",
"address": {
"street": "Marienplatz 1",
"city": "Munich",
"state": "Bavaria",
"country": "DE",
"postalCode": "80331",
"latitude": 48.1374,
"longitude": 11.5755
},
"isStartDate": true,
"startDate": "2019-08-24",
"jobDescription": {
"value": "string",
"original": "string",
"sourceLanguage": "en",
"translated": true,
"translationType": "AI"
},
"requirementsSummary": {
"value": "string",
"original": "string",
"sourceLanguage": "en",
"translated": true,
"translationType": "AI"
},
"personalQualitiesSummary": {
"value": "string",
"original": "string",
"sourceLanguage": "en",
"translated": true,
"translationType": "AI"
},
"skills": [
{
"value": {
"value": "string",
"original": "string",
"sourceLanguage": "en",
"translated": true,
"translationType": "AI"
},
"type": "SKILL",
"expertType": "BEGINNER",
"languageProficiency": "A1",
"drivingClass": "AM"
}
],
"currency": "string",
"salaryBase": 0,
"isSalaryMax": true,
"salaryMax": 0,
"salaryType": "GROSS",
"paymentInterval": "HOURLY",
"salaryDescription": {
"value": "string",
"original": "string",
"sourceLanguage": "en",
"translated": true,
"translationType": "AI"
},
"benefits": [
{
"value": "string",
"original": "string",
"sourceLanguage": "en",
"translated": true,
"translationType": "AI"
}
],
"educationLevel": "NONE",
"fieldOfStudy": {
"value": "string",
"original": "string",
"sourceLanguage": "en",
"translated": true,
"translationType": "AI"
},
"yearsOfExperience": 0,
"availableForEveryCountry": true,
"numberOfPositionsOpened": 0,
"jobListingEndDate": "2019-08-24",
"referenceNumber": "string",
"hiringProcessSteps": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"jobListingId": "a7d01775-e611-4288-b8c1-442852b8ff39",
"stepOrder": 1,
"stepName": {
"value": "string",
"original": "string",
"sourceLanguage": "en",
"translated": true,
"translationType": "AI"
},
"description": {
"value": "string",
"original": "string",
"sourceLanguage": "en",
"translated": true,
"translationType": "AI"
}
}
],
"jobListingTags": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"jobListingId": "a7d01775-e611-4288-b8c1-442852b8ff39",
"tagId": "f69eb9f1-ae9f-4086-b25c-c39758a43fb3"
}
],
"jobListingRequirements": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"jobListingId": "a7d01775-e611-4288-b8c1-442852b8ff39",
"requirementText": "string"
}
],
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z",
"publishedAt": "2019-08-24T14:15:22Z",
"expiresAt": "2019-08-24T14:15:22Z",
"closedAt": "2019-08-24T14:15:22Z"
}{
"status": 400,
"error": "BAD_REQUEST",
"message": "Malformed JSON body",
"timestamp": "2026-05-17T12:00:00Z",
"path": "/public/v1/job-listings"
}{
"status": 401,
"error": "UNAUTHORIZED",
"message": "Invalid or missing API key",
"timestamp": "2026-05-17T12:00:00Z",
"path": "/public/v1/job-listings"
}{
"status": 403,
"error": "FORBIDDEN",
"message": "Scope 'jobs:write' is required",
"timestamp": "2026-05-17T12:00:00Z",
"path": "/public/v1/job-listings"
}{
"status": 404,
"error": "NOT_FOUND",
"message": "Job listing not found",
"timestamp": "2026-05-17T12:00:00Z",
"path": "/public/v1/job-listings/00000000-0000-0000-0000-000000000000"
}{
"status": 409,
"error": "CONFLICT",
"message": "Cannot delete an ACTIVE job listing",
"timestamp": "2026-05-17T12:00:00Z",
"path": "/public/v1/job-listings/abc"
}Update a job listing PUT
Replaces all updatable fields of an existing job listing. Provide the full desired state — omitted optional fields are cleared. Requires scope: `jobs:write`
Update job listing status PATCH
Directly sets the status of a job listing. Only valid status transitions are allowed — attempting an invalid transition returns `409 Conflict`. Valid transitions: `DRAFT` → `ACTIVE`, `ACTIVE` → `CLOSED`, `CLOSED` → `ACTIVE`. Requires scope: `jobs:write`