curl --request PATCH \
--url https://www.sorce.jobs/api/external/v1/jobs/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Senior Product Designer",
"description": "<string>",
"remoteCountry": "<string>",
"locations": [
{
"locationId": 17024,
"city": "San Francisco",
"stateProvince": "California",
"country": "United States"
}
],
"salaryMin": 123,
"salaryMax": 123,
"bidPerQualifiedApplicantCents": 123,
"opportunityId": "<string>",
"atsJobUrl": "<string>",
"qualifications": [
{
"text": "5+ years of product design experience",
"order": 0
}
],
"questions": [
{
"prompt": "Why do you want to work here?",
"order": 123,
"options": [
"<string>"
]
}
],
"budgets": [
{
"budgetCents": 50000,
"notes": "<string>"
}
]
}
'import requests
url = "https://www.sorce.jobs/api/external/v1/jobs/{id}"
payload = {
"title": "Senior Product Designer",
"description": "<string>",
"remoteCountry": "<string>",
"locations": [
{
"locationId": 17024,
"city": "San Francisco",
"stateProvince": "California",
"country": "United States"
}
],
"salaryMin": 123,
"salaryMax": 123,
"bidPerQualifiedApplicantCents": 123,
"opportunityId": "<string>",
"atsJobUrl": "<string>",
"qualifications": [
{
"text": "5+ years of product design experience",
"order": 0
}
],
"questions": [
{
"prompt": "Why do you want to work here?",
"order": 123,
"options": ["<string>"]
}
],
"budgets": [
{
"budgetCents": 50000,
"notes": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Senior Product Designer',
description: '<string>',
remoteCountry: '<string>',
locations: [
{
locationId: 17024,
city: 'San Francisco',
stateProvince: 'California',
country: 'United States'
}
],
salaryMin: 123,
salaryMax: 123,
bidPerQualifiedApplicantCents: 123,
opportunityId: '<string>',
atsJobUrl: '<string>',
qualifications: [{text: '5+ years of product design experience', order: 0}],
questions: [{prompt: 'Why do you want to work here?', order: 123, options: ['<string>']}],
budgets: [{budgetCents: 50000, notes: '<string>'}]
})
};
fetch('https://www.sorce.jobs/api/external/v1/jobs/{id}', 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}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Senior Product Designer',
'description' => '<string>',
'remoteCountry' => '<string>',
'locations' => [
[
'locationId' => 17024,
'city' => 'San Francisco',
'stateProvince' => 'California',
'country' => 'United States'
]
],
'salaryMin' => 123,
'salaryMax' => 123,
'bidPerQualifiedApplicantCents' => 123,
'opportunityId' => '<string>',
'atsJobUrl' => '<string>',
'qualifications' => [
[
'text' => '5+ years of product design experience',
'order' => 0
]
],
'questions' => [
[
'prompt' => 'Why do you want to work here?',
'order' => 123,
'options' => [
'<string>'
]
]
],
'budgets' => [
[
'budgetCents' => 50000,
'notes' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.sorce.jobs/api/external/v1/jobs/{id}"
payload := strings.NewReader("{\n \"title\": \"Senior Product Designer\",\n \"description\": \"<string>\",\n \"remoteCountry\": \"<string>\",\n \"locations\": [\n {\n \"locationId\": 17024,\n \"city\": \"San Francisco\",\n \"stateProvince\": \"California\",\n \"country\": \"United States\"\n }\n ],\n \"salaryMin\": 123,\n \"salaryMax\": 123,\n \"bidPerQualifiedApplicantCents\": 123,\n \"opportunityId\": \"<string>\",\n \"atsJobUrl\": \"<string>\",\n \"qualifications\": [\n {\n \"text\": \"5+ years of product design experience\",\n \"order\": 0\n }\n ],\n \"questions\": [\n {\n \"prompt\": \"Why do you want to work here?\",\n \"order\": 123,\n \"options\": [\n \"<string>\"\n ]\n }\n ],\n \"budgets\": [\n {\n \"budgetCents\": 50000,\n \"notes\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://www.sorce.jobs/api/external/v1/jobs/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Senior Product Designer\",\n \"description\": \"<string>\",\n \"remoteCountry\": \"<string>\",\n \"locations\": [\n {\n \"locationId\": 17024,\n \"city\": \"San Francisco\",\n \"stateProvince\": \"California\",\n \"country\": \"United States\"\n }\n ],\n \"salaryMin\": 123,\n \"salaryMax\": 123,\n \"bidPerQualifiedApplicantCents\": 123,\n \"opportunityId\": \"<string>\",\n \"atsJobUrl\": \"<string>\",\n \"qualifications\": [\n {\n \"text\": \"5+ years of product design experience\",\n \"order\": 0\n }\n ],\n \"questions\": [\n {\n \"prompt\": \"Why do you want to work here?\",\n \"order\": 123,\n \"options\": [\n \"<string>\"\n ]\n }\n ],\n \"budgets\": [\n {\n \"budgetCents\": 50000,\n \"notes\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.sorce.jobs/api/external/v1/jobs/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Senior Product Designer\",\n \"description\": \"<string>\",\n \"remoteCountry\": \"<string>\",\n \"locations\": [\n {\n \"locationId\": 17024,\n \"city\": \"San Francisco\",\n \"stateProvince\": \"California\",\n \"country\": \"United States\"\n }\n ],\n \"salaryMin\": 123,\n \"salaryMax\": 123,\n \"bidPerQualifiedApplicantCents\": 123,\n \"opportunityId\": \"<string>\",\n \"atsJobUrl\": \"<string>\",\n \"qualifications\": [\n {\n \"text\": \"5+ years of product design experience\",\n \"order\": 0\n }\n ],\n \"questions\": [\n {\n \"prompt\": \"Why do you want to work here?\",\n \"order\": 123,\n \"options\": [\n \"<string>\"\n ]\n }\n ],\n \"budgets\": [\n {\n \"budgetCents\": 50000,\n \"notes\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"title": "<string>",
"description": "<string>",
"remoteCountry": "<string>",
"salaryMin": 123,
"salaryMax": 123,
"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",
"order": 0,
"id": "<string>"
}
],
"questions": [
{
"prompt": "Why do you want to work here?",
"order": 123,
"options": [
"<string>"
],
"id": "<string>"
}
],
"budgets": [
{
"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": "NOT_FOUND",
"message": "Job not found."
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"fields": {}
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "Validation failed.",
"fields": {
"salaryMin": "Add a minimum salary."
}
}
}Update a job
Partial update; only the fields you send change. The arrays (locations, qualifications, questions, budgets) are replace-sets: what you send becomes the entire new set. Live (ACTIVE/PAUSED) jobs are re-validated after the patch and the whole change is rejected if it would leave the listing incomplete. Once a job has applications, qualifications and questions are frozen.
curl --request PATCH \
--url https://www.sorce.jobs/api/external/v1/jobs/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Senior Product Designer",
"description": "<string>",
"remoteCountry": "<string>",
"locations": [
{
"locationId": 17024,
"city": "San Francisco",
"stateProvince": "California",
"country": "United States"
}
],
"salaryMin": 123,
"salaryMax": 123,
"bidPerQualifiedApplicantCents": 123,
"opportunityId": "<string>",
"atsJobUrl": "<string>",
"qualifications": [
{
"text": "5+ years of product design experience",
"order": 0
}
],
"questions": [
{
"prompt": "Why do you want to work here?",
"order": 123,
"options": [
"<string>"
]
}
],
"budgets": [
{
"budgetCents": 50000,
"notes": "<string>"
}
]
}
'import requests
url = "https://www.sorce.jobs/api/external/v1/jobs/{id}"
payload = {
"title": "Senior Product Designer",
"description": "<string>",
"remoteCountry": "<string>",
"locations": [
{
"locationId": 17024,
"city": "San Francisco",
"stateProvince": "California",
"country": "United States"
}
],
"salaryMin": 123,
"salaryMax": 123,
"bidPerQualifiedApplicantCents": 123,
"opportunityId": "<string>",
"atsJobUrl": "<string>",
"qualifications": [
{
"text": "5+ years of product design experience",
"order": 0
}
],
"questions": [
{
"prompt": "Why do you want to work here?",
"order": 123,
"options": ["<string>"]
}
],
"budgets": [
{
"budgetCents": 50000,
"notes": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Senior Product Designer',
description: '<string>',
remoteCountry: '<string>',
locations: [
{
locationId: 17024,
city: 'San Francisco',
stateProvince: 'California',
country: 'United States'
}
],
salaryMin: 123,
salaryMax: 123,
bidPerQualifiedApplicantCents: 123,
opportunityId: '<string>',
atsJobUrl: '<string>',
qualifications: [{text: '5+ years of product design experience', order: 0}],
questions: [{prompt: 'Why do you want to work here?', order: 123, options: ['<string>']}],
budgets: [{budgetCents: 50000, notes: '<string>'}]
})
};
fetch('https://www.sorce.jobs/api/external/v1/jobs/{id}', 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}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Senior Product Designer',
'description' => '<string>',
'remoteCountry' => '<string>',
'locations' => [
[
'locationId' => 17024,
'city' => 'San Francisco',
'stateProvince' => 'California',
'country' => 'United States'
]
],
'salaryMin' => 123,
'salaryMax' => 123,
'bidPerQualifiedApplicantCents' => 123,
'opportunityId' => '<string>',
'atsJobUrl' => '<string>',
'qualifications' => [
[
'text' => '5+ years of product design experience',
'order' => 0
]
],
'questions' => [
[
'prompt' => 'Why do you want to work here?',
'order' => 123,
'options' => [
'<string>'
]
]
],
'budgets' => [
[
'budgetCents' => 50000,
'notes' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.sorce.jobs/api/external/v1/jobs/{id}"
payload := strings.NewReader("{\n \"title\": \"Senior Product Designer\",\n \"description\": \"<string>\",\n \"remoteCountry\": \"<string>\",\n \"locations\": [\n {\n \"locationId\": 17024,\n \"city\": \"San Francisco\",\n \"stateProvince\": \"California\",\n \"country\": \"United States\"\n }\n ],\n \"salaryMin\": 123,\n \"salaryMax\": 123,\n \"bidPerQualifiedApplicantCents\": 123,\n \"opportunityId\": \"<string>\",\n \"atsJobUrl\": \"<string>\",\n \"qualifications\": [\n {\n \"text\": \"5+ years of product design experience\",\n \"order\": 0\n }\n ],\n \"questions\": [\n {\n \"prompt\": \"Why do you want to work here?\",\n \"order\": 123,\n \"options\": [\n \"<string>\"\n ]\n }\n ],\n \"budgets\": [\n {\n \"budgetCents\": 50000,\n \"notes\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://www.sorce.jobs/api/external/v1/jobs/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Senior Product Designer\",\n \"description\": \"<string>\",\n \"remoteCountry\": \"<string>\",\n \"locations\": [\n {\n \"locationId\": 17024,\n \"city\": \"San Francisco\",\n \"stateProvince\": \"California\",\n \"country\": \"United States\"\n }\n ],\n \"salaryMin\": 123,\n \"salaryMax\": 123,\n \"bidPerQualifiedApplicantCents\": 123,\n \"opportunityId\": \"<string>\",\n \"atsJobUrl\": \"<string>\",\n \"qualifications\": [\n {\n \"text\": \"5+ years of product design experience\",\n \"order\": 0\n }\n ],\n \"questions\": [\n {\n \"prompt\": \"Why do you want to work here?\",\n \"order\": 123,\n \"options\": [\n \"<string>\"\n ]\n }\n ],\n \"budgets\": [\n {\n \"budgetCents\": 50000,\n \"notes\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.sorce.jobs/api/external/v1/jobs/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Senior Product Designer\",\n \"description\": \"<string>\",\n \"remoteCountry\": \"<string>\",\n \"locations\": [\n {\n \"locationId\": 17024,\n \"city\": \"San Francisco\",\n \"stateProvince\": \"California\",\n \"country\": \"United States\"\n }\n ],\n \"salaryMin\": 123,\n \"salaryMax\": 123,\n \"bidPerQualifiedApplicantCents\": 123,\n \"opportunityId\": \"<string>\",\n \"atsJobUrl\": \"<string>\",\n \"qualifications\": [\n {\n \"text\": \"5+ years of product design experience\",\n \"order\": 0\n }\n ],\n \"questions\": [\n {\n \"prompt\": \"Why do you want to work here?\",\n \"order\": 123,\n \"options\": [\n \"<string>\"\n ]\n }\n ],\n \"budgets\": [\n {\n \"budgetCents\": 50000,\n \"notes\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"title": "<string>",
"description": "<string>",
"remoteCountry": "<string>",
"salaryMin": 123,
"salaryMax": 123,
"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",
"order": 0,
"id": "<string>"
}
],
"questions": [
{
"prompt": "Why do you want to work here?",
"order": 123,
"options": [
"<string>"
],
"id": "<string>"
}
],
"budgets": [
{
"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": "NOT_FOUND",
"message": "Job not found."
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"fields": {}
}
}{
"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).
Body
All fields optional; arrays use replace semantics (the set you send becomes the entire new set).
"Senior Product Designer"
REMOTE, HYBRID, IN_PERSON, null Where remote employees may work (REMOTE jobs).
FULL_TIME, PART_TIME, CONTRACT, INTERNSHIP, null ENTRY, MID, SENIOR, null Show child attributes
Show child attributes
Whole dollars
ANNUAL, HOURLY, null What you pay per qualified applicant, in cents.
Your id for this opening on your source ATS. Optional; used by post-application flows to route submitted applications back.
Canonical job URL on your source ATS. Optional; used by post-application flows alongside opportunityId.
Show child attributes
Show child attributes
Custom screening questions only. The applicant basics - first and last name, email, phone, location, and resume - are collected automatically on every application; never send them as questions.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Response
The updated job.
The full job, as the dashboard sees it.
Stable cross-service job id (svcAtsId).
DRAFT, ACTIVE, PAUSED, CLOSED, EXPIRED REMOTE, HYBRID, IN_PERSON, null FULL_TIME, PART_TIME, CONTRACT, INTERNSHIP, null ENTRY, MID, SENIOR, null 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.