Publish a draft
curl --request POST \
--url https://www.sorce.jobs/api/external/v1/jobs/{id}/publish \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.sorce.jobs/api/external/v1/jobs/{id}/publish"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.sorce.jobs/api/external/v1/jobs/{id}/publish', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.sorce.jobs/api/external/v1/jobs/{id}/publish",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.sorce.jobs/api/external/v1/jobs/{id}/publish"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.sorce.jobs/api/external/v1/jobs/{id}/publish")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.sorce.jobs/api/external/v1/jobs/{id}/publish")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": 123,
"title": "<string>",
"status": "DRAFT",
"description": "<string>",
"remoteOption": "REMOTE",
"remoteCountry": "<string>",
"jobType": "FULL_TIME",
"jobLevel": "ENTRY",
"salaryMin": 123,
"salaryMax": 123,
"salaryPeriod": "ANNUAL",
"bidPerQualifiedApplicantCents": 123,
"opportunityId": "<string>",
"atsJobUrl": "<string>",
"companyId": "<string>",
"locations": [
{
"locationId": 17024,
"displayName": "San Francisco, California, United States",
"city": "San Francisco",
"stateProvince": "California",
"country": "United States"
}
],
"qualifications": [
{
"text": "5+ years of product design experience",
"kind": "REQUIRED",
"order": 0,
"id": "<string>"
}
],
"questions": [
{
"prompt": "Why do you want to work here?",
"answerFormat": "TEXT",
"order": 123,
"options": [
"<string>"
],
"id": "<string>"
}
],
"budgets": [
{
"window": "DAILY",
"budgetCents": 50000,
"notes": "<string>"
}
],
"applicationCounts": {
"pending": 123,
"accepted": 123,
"rejected": 123
},
"isFrozen": true,
"newApplicantCount": 123,
"publishedAt": "2023-11-07T05:31:56Z",
"expiresAt": "2023-11-07T05:31:56Z",
"closedAt": "2023-11-07T05:31:56Z"
}{
"error": {
"code": "INVALID_SERVICE_KEY",
"message": "Invalid service key."
}
}{
"error": {
"code": "PAYMENT_METHOD_REQUIRED",
"message": "Add a payment method before publishing."
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Job not found."
}
}{
"error": {
"code": "AGREEMENT_OUTDATED",
"message": "Your organization must accept the current terms in the Sorce dashboard before publishing via the API."
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "Validation failed.",
"fields": {
"salaryMin": "Add a minimum salary."
}
}
}Jobs
Publish a draft
DRAFT → ACTIVE. Runs the three publish gates: completeness (422 with a field map), terms accepted in the dashboard (409 AGREEMENT_OUTDATED), and a card on file (402). The listing runs for 30 days.
POST
/
jobs
/
{id}
/
publish
Publish a draft
curl --request POST \
--url https://www.sorce.jobs/api/external/v1/jobs/{id}/publish \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.sorce.jobs/api/external/v1/jobs/{id}/publish"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.sorce.jobs/api/external/v1/jobs/{id}/publish', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.sorce.jobs/api/external/v1/jobs/{id}/publish",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.sorce.jobs/api/external/v1/jobs/{id}/publish"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.sorce.jobs/api/external/v1/jobs/{id}/publish")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.sorce.jobs/api/external/v1/jobs/{id}/publish")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": 123,
"title": "<string>",
"status": "DRAFT",
"description": "<string>",
"remoteOption": "REMOTE",
"remoteCountry": "<string>",
"jobType": "FULL_TIME",
"jobLevel": "ENTRY",
"salaryMin": 123,
"salaryMax": 123,
"salaryPeriod": "ANNUAL",
"bidPerQualifiedApplicantCents": 123,
"opportunityId": "<string>",
"atsJobUrl": "<string>",
"companyId": "<string>",
"locations": [
{
"locationId": 17024,
"displayName": "San Francisco, California, United States",
"city": "San Francisco",
"stateProvince": "California",
"country": "United States"
}
],
"qualifications": [
{
"text": "5+ years of product design experience",
"kind": "REQUIRED",
"order": 0,
"id": "<string>"
}
],
"questions": [
{
"prompt": "Why do you want to work here?",
"answerFormat": "TEXT",
"order": 123,
"options": [
"<string>"
],
"id": "<string>"
}
],
"budgets": [
{
"window": "DAILY",
"budgetCents": 50000,
"notes": "<string>"
}
],
"applicationCounts": {
"pending": 123,
"accepted": 123,
"rejected": 123
},
"isFrozen": true,
"newApplicantCount": 123,
"publishedAt": "2023-11-07T05:31:56Z",
"expiresAt": "2023-11-07T05:31:56Z",
"closedAt": "2023-11-07T05:31:56Z"
}{
"error": {
"code": "INVALID_SERVICE_KEY",
"message": "Invalid service key."
}
}{
"error": {
"code": "PAYMENT_METHOD_REQUIRED",
"message": "Add a payment method before publishing."
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Job not found."
}
}{
"error": {
"code": "AGREEMENT_OUTDATED",
"message": "Your organization must accept the current terms in the Sorce dashboard before publishing via the API."
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "Validation failed.",
"fields": {
"salaryMin": "Add a minimum salary."
}
}
}Authorizations
Partner key (sk_ext_…) bound to your company.
Path Parameters
The job's stable cross-service id (svcAtsId).
Response
The job, now ACTIVE.
The full job, as the dashboard sees it.
Stable cross-service job id (svcAtsId).
Available options:
DRAFT, ACTIVE, PAUSED, CLOSED, EXPIRED Available options:
REMOTE, HYBRID, IN_PERSON, null Available options:
FULL_TIME, PART_TIME, CONTRACT, INTERNSHIP, null Available options:
ENTRY, MID, SENIOR, null Available options:
ANNUAL, HOURLY, null Partner id for this opening on the source ATS.
Canonical job URL on the source ATS.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
True once the job has applications. Qualifications/questions locked.