curl --request PATCH \
--url https://cloud.memsource.com/web/api2/v3/jobs \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"jobs": [
{
"uid": "3HYnHHLkTPJfMxBCDbPXFe"
}
],
"clearDateDue": true,
"customFields": {
"addInstances": [
{
"customField": {
"uid": "3HYnHHLkTPJfMxBCDbPXFe"
},
"selectedOptions": [
{
"uid": "3HYnHHLkTPJfMxBCDbPXFe"
}
],
"value": "<string>"
}
],
"removeInstances": [
{
"uid": "3HYnHHLkTPJfMxBCDbPXFe"
}
],
"updateInstances": [
{
"customFieldInstance": {
"uid": "3HYnHHLkTPJfMxBCDbPXFe"
},
"selectedOptions": [
{
"uid": "3HYnHHLkTPJfMxBCDbPXFe"
}
],
"value": "<string>"
}
]
},
"dateDue": "2023-11-07T05:31:56Z",
"providers": [
{
"type": "<string>",
"id": "<string>"
}
]
}
'import requests
url = "https://cloud.memsource.com/web/api2/v3/jobs"
payload = {
"jobs": [{ "uid": "3HYnHHLkTPJfMxBCDbPXFe" }],
"clearDateDue": True,
"customFields": {
"addInstances": [
{
"customField": { "uid": "3HYnHHLkTPJfMxBCDbPXFe" },
"selectedOptions": [{ "uid": "3HYnHHLkTPJfMxBCDbPXFe" }],
"value": "<string>"
}
],
"removeInstances": [{ "uid": "3HYnHHLkTPJfMxBCDbPXFe" }],
"updateInstances": [
{
"customFieldInstance": { "uid": "3HYnHHLkTPJfMxBCDbPXFe" },
"selectedOptions": [{ "uid": "3HYnHHLkTPJfMxBCDbPXFe" }],
"value": "<string>"
}
]
},
"dateDue": "2023-11-07T05:31:56Z",
"providers": [
{
"type": "<string>",
"id": "<string>"
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
jobs: [{uid: '3HYnHHLkTPJfMxBCDbPXFe'}],
clearDateDue: true,
customFields: {
addInstances: [
{
customField: {uid: '3HYnHHLkTPJfMxBCDbPXFe'},
selectedOptions: [{uid: '3HYnHHLkTPJfMxBCDbPXFe'}],
value: '<string>'
}
],
removeInstances: [{uid: '3HYnHHLkTPJfMxBCDbPXFe'}],
updateInstances: [
{
customFieldInstance: {uid: '3HYnHHLkTPJfMxBCDbPXFe'},
selectedOptions: [{uid: '3HYnHHLkTPJfMxBCDbPXFe'}],
value: '<string>'
}
]
},
dateDue: '2023-11-07T05:31:56Z',
providers: [{type: '<string>', id: '<string>'}]
})
};
fetch('https://cloud.memsource.com/web/api2/v3/jobs', 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://cloud.memsource.com/web/api2/v3/jobs",
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([
'jobs' => [
[
'uid' => '3HYnHHLkTPJfMxBCDbPXFe'
]
],
'clearDateDue' => true,
'customFields' => [
'addInstances' => [
[
'customField' => [
'uid' => '3HYnHHLkTPJfMxBCDbPXFe'
],
'selectedOptions' => [
[
'uid' => '3HYnHHLkTPJfMxBCDbPXFe'
]
],
'value' => '<string>'
]
],
'removeInstances' => [
[
'uid' => '3HYnHHLkTPJfMxBCDbPXFe'
]
],
'updateInstances' => [
[
'customFieldInstance' => [
'uid' => '3HYnHHLkTPJfMxBCDbPXFe'
],
'selectedOptions' => [
[
'uid' => '3HYnHHLkTPJfMxBCDbPXFe'
]
],
'value' => '<string>'
]
]
],
'dateDue' => '2023-11-07T05:31:56Z',
'providers' => [
[
'type' => '<string>',
'id' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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://cloud.memsource.com/web/api2/v3/jobs"
payload := strings.NewReader("{\n \"jobs\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"clearDateDue\": true,\n \"customFields\": {\n \"addInstances\": [\n {\n \"customField\": {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n },\n \"selectedOptions\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"value\": \"<string>\"\n }\n ],\n \"removeInstances\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"updateInstances\": [\n {\n \"customFieldInstance\": {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n },\n \"selectedOptions\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"value\": \"<string>\"\n }\n ]\n },\n \"dateDue\": \"2023-11-07T05:31:56Z\",\n \"providers\": [\n {\n \"type\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "<api-key>")
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://cloud.memsource.com/web/api2/v3/jobs")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"jobs\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"clearDateDue\": true,\n \"customFields\": {\n \"addInstances\": [\n {\n \"customField\": {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n },\n \"selectedOptions\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"value\": \"<string>\"\n }\n ],\n \"removeInstances\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"updateInstances\": [\n {\n \"customFieldInstance\": {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n },\n \"selectedOptions\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"value\": \"<string>\"\n }\n ]\n },\n \"dateDue\": \"2023-11-07T05:31:56Z\",\n \"providers\": [\n {\n \"type\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud.memsource.com/web/api2/v3/jobs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"jobs\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"clearDateDue\": true,\n \"customFields\": {\n \"addInstances\": [\n {\n \"customField\": {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n },\n \"selectedOptions\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"value\": \"<string>\"\n }\n ],\n \"removeInstances\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"updateInstances\": [\n {\n \"customFieldInstance\": {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n },\n \"selectedOptions\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"value\": \"<string>\"\n }\n ]\n },\n \"dateDue\": \"2023-11-07T05:31:56Z\",\n \"providers\": [\n {\n \"type\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"errors": [
{
"args": {},
"code": "<string>",
"message": "<string>"
}
],
"updated": 123
}Edit jobs (with possible partial updates)
Bulk update up to 100 jobs across multiple projects in a single call. Supports setting dateDue (due date), status, providers, and custom fields. Use this endpoint to update due dates or reassign jobs in bulk without iterating project-by-project. Allows partial update, not breaking the whole batch if a single job fails. Per-job failures are collected in the response errors list with codes: AccessDenied, NotFound, JobImportFailed, JobCannotAssignProviders. Assigning providers through this call does NOT send a notification email to the assigned providers. To notify providers of their assignment, call Notify assigned users with the emailTemplate.id of the template to send.
curl --request PATCH \
--url https://cloud.memsource.com/web/api2/v3/jobs \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"jobs": [
{
"uid": "3HYnHHLkTPJfMxBCDbPXFe"
}
],
"clearDateDue": true,
"customFields": {
"addInstances": [
{
"customField": {
"uid": "3HYnHHLkTPJfMxBCDbPXFe"
},
"selectedOptions": [
{
"uid": "3HYnHHLkTPJfMxBCDbPXFe"
}
],
"value": "<string>"
}
],
"removeInstances": [
{
"uid": "3HYnHHLkTPJfMxBCDbPXFe"
}
],
"updateInstances": [
{
"customFieldInstance": {
"uid": "3HYnHHLkTPJfMxBCDbPXFe"
},
"selectedOptions": [
{
"uid": "3HYnHHLkTPJfMxBCDbPXFe"
}
],
"value": "<string>"
}
]
},
"dateDue": "2023-11-07T05:31:56Z",
"providers": [
{
"type": "<string>",
"id": "<string>"
}
]
}
'import requests
url = "https://cloud.memsource.com/web/api2/v3/jobs"
payload = {
"jobs": [{ "uid": "3HYnHHLkTPJfMxBCDbPXFe" }],
"clearDateDue": True,
"customFields": {
"addInstances": [
{
"customField": { "uid": "3HYnHHLkTPJfMxBCDbPXFe" },
"selectedOptions": [{ "uid": "3HYnHHLkTPJfMxBCDbPXFe" }],
"value": "<string>"
}
],
"removeInstances": [{ "uid": "3HYnHHLkTPJfMxBCDbPXFe" }],
"updateInstances": [
{
"customFieldInstance": { "uid": "3HYnHHLkTPJfMxBCDbPXFe" },
"selectedOptions": [{ "uid": "3HYnHHLkTPJfMxBCDbPXFe" }],
"value": "<string>"
}
]
},
"dateDue": "2023-11-07T05:31:56Z",
"providers": [
{
"type": "<string>",
"id": "<string>"
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
jobs: [{uid: '3HYnHHLkTPJfMxBCDbPXFe'}],
clearDateDue: true,
customFields: {
addInstances: [
{
customField: {uid: '3HYnHHLkTPJfMxBCDbPXFe'},
selectedOptions: [{uid: '3HYnHHLkTPJfMxBCDbPXFe'}],
value: '<string>'
}
],
removeInstances: [{uid: '3HYnHHLkTPJfMxBCDbPXFe'}],
updateInstances: [
{
customFieldInstance: {uid: '3HYnHHLkTPJfMxBCDbPXFe'},
selectedOptions: [{uid: '3HYnHHLkTPJfMxBCDbPXFe'}],
value: '<string>'
}
]
},
dateDue: '2023-11-07T05:31:56Z',
providers: [{type: '<string>', id: '<string>'}]
})
};
fetch('https://cloud.memsource.com/web/api2/v3/jobs', 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://cloud.memsource.com/web/api2/v3/jobs",
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([
'jobs' => [
[
'uid' => '3HYnHHLkTPJfMxBCDbPXFe'
]
],
'clearDateDue' => true,
'customFields' => [
'addInstances' => [
[
'customField' => [
'uid' => '3HYnHHLkTPJfMxBCDbPXFe'
],
'selectedOptions' => [
[
'uid' => '3HYnHHLkTPJfMxBCDbPXFe'
]
],
'value' => '<string>'
]
],
'removeInstances' => [
[
'uid' => '3HYnHHLkTPJfMxBCDbPXFe'
]
],
'updateInstances' => [
[
'customFieldInstance' => [
'uid' => '3HYnHHLkTPJfMxBCDbPXFe'
],
'selectedOptions' => [
[
'uid' => '3HYnHHLkTPJfMxBCDbPXFe'
]
],
'value' => '<string>'
]
]
],
'dateDue' => '2023-11-07T05:31:56Z',
'providers' => [
[
'type' => '<string>',
'id' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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://cloud.memsource.com/web/api2/v3/jobs"
payload := strings.NewReader("{\n \"jobs\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"clearDateDue\": true,\n \"customFields\": {\n \"addInstances\": [\n {\n \"customField\": {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n },\n \"selectedOptions\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"value\": \"<string>\"\n }\n ],\n \"removeInstances\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"updateInstances\": [\n {\n \"customFieldInstance\": {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n },\n \"selectedOptions\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"value\": \"<string>\"\n }\n ]\n },\n \"dateDue\": \"2023-11-07T05:31:56Z\",\n \"providers\": [\n {\n \"type\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "<api-key>")
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://cloud.memsource.com/web/api2/v3/jobs")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"jobs\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"clearDateDue\": true,\n \"customFields\": {\n \"addInstances\": [\n {\n \"customField\": {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n },\n \"selectedOptions\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"value\": \"<string>\"\n }\n ],\n \"removeInstances\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"updateInstances\": [\n {\n \"customFieldInstance\": {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n },\n \"selectedOptions\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"value\": \"<string>\"\n }\n ]\n },\n \"dateDue\": \"2023-11-07T05:31:56Z\",\n \"providers\": [\n {\n \"type\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud.memsource.com/web/api2/v3/jobs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"jobs\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"clearDateDue\": true,\n \"customFields\": {\n \"addInstances\": [\n {\n \"customField\": {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n },\n \"selectedOptions\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"value\": \"<string>\"\n }\n ],\n \"removeInstances\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"updateInstances\": [\n {\n \"customFieldInstance\": {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n },\n \"selectedOptions\": [\n {\n \"uid\": \"3HYnHHLkTPJfMxBCDbPXFe\"\n }\n ],\n \"value\": \"<string>\"\n }\n ]\n },\n \"dateDue\": \"2023-11-07T05:31:56Z\",\n \"providers\": [\n {\n \"type\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"errors": [
{
"args": {},
"code": "<string>",
"message": "<string>"
}
],
"updated": 123
}Authorizations
Get a token from auth/login endpoint and then pass it in the Authorization HTTP header in every subsequent API call. For more information visit our help center.
Body
Job parts to update and the changes to apply
Job parts to update.
1 - 100 elementsShow child attributes
Show child attributes
When true, clears the due date on the jobs.
Batch update of custom field instances
Show child attributes
Show child attributes
Due date to set on the jobs. Accepts an ISO 8601 date-time with a time zone designator (Z or a numeric offset such as +00:00/-05:00, e.g. 2026-08-29T15:50:00+00:00); the same format without a designator (e.g. 2026-08-29T15:50:00) returns 400 Bad Request. A space-separated yyyy-MM-dd HH:mm value (e.g. 2026-08-29 15:50) has no offset and is interpreted as UTC. A legacy MMM d, yyyy h:mm:ss a value (e.g. Aug 29, 2026 3:50:00 PM) is also accepted and parsed in the server's default time zone, not UTC.
Providers to assign to the jobs.
Show child attributes
Show child attributes
Status to set on the jobs.
NEW, ACCEPTED, DECLINED, REJECTED, DELIVERED, EMAILED, COMPLETED, CANCELLED Was this page helpful?