Jobs
Bulk update jobs
Update up to 100 jobs in one request using PUT /dn/jobs. Partial failures return validation errors per row so you can retry only the affected jobs.
PUT
/
dn
/
jobs
Bulk update jobs
curl --request PUT \
--url https://app.detrack.com/api/v2/dn/jobs \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"data": [
{
"do_number": "DO-10001",
"type": "Delivery",
"overwrite": true,
"data": {
"job_sequence": 1
}
},
{
"do_number": "DO-10002",
"date": "2026-09-15",
"type": "Delivery",
"data": {
"job_sequence": 2
}
}
]
}
'import requests
url = "https://app.detrack.com/api/v2/dn/jobs"
payload = { "data": [
{
"do_number": "DO-10001",
"type": "Delivery",
"overwrite": True,
"data": { "job_sequence": 1 }
},
{
"do_number": "DO-10002",
"date": "2026-09-15",
"type": "Delivery",
"data": { "job_sequence": 2 }
}
] }
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
data: [
{
do_number: 'DO-10001',
type: 'Delivery',
overwrite: true,
data: {job_sequence: 1}
},
{
do_number: 'DO-10002',
date: '2026-09-15',
type: 'Delivery',
data: {job_sequence: 2}
}
]
})
};
fetch('https://app.detrack.com/api/v2/dn/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://app.detrack.com/api/v2/dn/jobs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
[
'do_number' => 'DO-10001',
'type' => 'Delivery',
'overwrite' => true,
'data' => [
'job_sequence' => 1
]
],
[
'do_number' => 'DO-10002',
'date' => '2026-09-15',
'type' => 'Delivery',
'data' => [
'job_sequence' => 2
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$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://app.detrack.com/api/v2/dn/jobs"
payload := strings.NewReader("{\n \"data\": [\n {\n \"do_number\": \"DO-10001\",\n \"type\": \"Delivery\",\n \"overwrite\": true,\n \"data\": {\n \"job_sequence\": 1\n }\n },\n {\n \"do_number\": \"DO-10002\",\n \"date\": \"2026-09-15\",\n \"type\": \"Delivery\",\n \"data\": {\n \"job_sequence\": 2\n }\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-KEY", "<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.put("https://app.detrack.com/api/v2/dn/jobs")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"data\": [\n {\n \"do_number\": \"DO-10001\",\n \"type\": \"Delivery\",\n \"overwrite\": true,\n \"data\": {\n \"job_sequence\": 1\n }\n },\n {\n \"do_number\": \"DO-10002\",\n \"date\": \"2026-09-15\",\n \"type\": \"Delivery\",\n \"data\": {\n \"job_sequence\": 2\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.detrack.com/api/v2/dn/jobs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": [\n {\n \"do_number\": \"DO-10001\",\n \"type\": \"Delivery\",\n \"overwrite\": true,\n \"data\": {\n \"job_sequence\": 1\n }\n },\n {\n \"do_number\": \"DO-10002\",\n \"date\": \"2026-09-15\",\n \"type\": \"Delivery\",\n \"data\": {\n \"job_sequence\": 2\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"do_number": "DO-10001",
"date": "2026-09-15",
"type": "Delivery",
"ok": true
}
]
}{
"code": "invalid_json_format"
}{
"code": "invalid_key",
"message": "Invalid key"
}{
"code": "forbidden"
}{
"code": "update_failed",
"message": "Update failed",
"errors": [
{
"do_number": "DO-10001",
"date": "2026-09-15",
"type": "Delivery",
"field": "job_sequence",
"codes": [
"not_found"
]
}
],
"data": [
{
"do_number": "DO-10001",
"date": "2026-09-15",
"type": "Delivery",
"ok": true
}
]
}Use this endpoint to update up to 100 jobs in a single call. Each entry in the request identifies a job by
do_number (and optionally date and type), then supplies a data object with the fields to change. To overwrite a completed job, set overwrite to true.
For single job updates, see Update job. To delete jobs in bulk, see Bulk delete.Authorizations
Your Detrack API key, from Integrations > API Key in the dashboard.
Body
application/json
Only the first 100 items are processed. Any beyond that are ignored without an error.
Show child attributes
Show child attributes
Response
Every row was updated.
Show child attributes
Show child attributes
Bulk update jobs
curl --request PUT \
--url https://app.detrack.com/api/v2/dn/jobs \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"data": [
{
"do_number": "DO-10001",
"type": "Delivery",
"overwrite": true,
"data": {
"job_sequence": 1
}
},
{
"do_number": "DO-10002",
"date": "2026-09-15",
"type": "Delivery",
"data": {
"job_sequence": 2
}
}
]
}
'import requests
url = "https://app.detrack.com/api/v2/dn/jobs"
payload = { "data": [
{
"do_number": "DO-10001",
"type": "Delivery",
"overwrite": True,
"data": { "job_sequence": 1 }
},
{
"do_number": "DO-10002",
"date": "2026-09-15",
"type": "Delivery",
"data": { "job_sequence": 2 }
}
] }
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
data: [
{
do_number: 'DO-10001',
type: 'Delivery',
overwrite: true,
data: {job_sequence: 1}
},
{
do_number: 'DO-10002',
date: '2026-09-15',
type: 'Delivery',
data: {job_sequence: 2}
}
]
})
};
fetch('https://app.detrack.com/api/v2/dn/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://app.detrack.com/api/v2/dn/jobs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
[
'do_number' => 'DO-10001',
'type' => 'Delivery',
'overwrite' => true,
'data' => [
'job_sequence' => 1
]
],
[
'do_number' => 'DO-10002',
'date' => '2026-09-15',
'type' => 'Delivery',
'data' => [
'job_sequence' => 2
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$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://app.detrack.com/api/v2/dn/jobs"
payload := strings.NewReader("{\n \"data\": [\n {\n \"do_number\": \"DO-10001\",\n \"type\": \"Delivery\",\n \"overwrite\": true,\n \"data\": {\n \"job_sequence\": 1\n }\n },\n {\n \"do_number\": \"DO-10002\",\n \"date\": \"2026-09-15\",\n \"type\": \"Delivery\",\n \"data\": {\n \"job_sequence\": 2\n }\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-KEY", "<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.put("https://app.detrack.com/api/v2/dn/jobs")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"data\": [\n {\n \"do_number\": \"DO-10001\",\n \"type\": \"Delivery\",\n \"overwrite\": true,\n \"data\": {\n \"job_sequence\": 1\n }\n },\n {\n \"do_number\": \"DO-10002\",\n \"date\": \"2026-09-15\",\n \"type\": \"Delivery\",\n \"data\": {\n \"job_sequence\": 2\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.detrack.com/api/v2/dn/jobs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": [\n {\n \"do_number\": \"DO-10001\",\n \"type\": \"Delivery\",\n \"overwrite\": true,\n \"data\": {\n \"job_sequence\": 1\n }\n },\n {\n \"do_number\": \"DO-10002\",\n \"date\": \"2026-09-15\",\n \"type\": \"Delivery\",\n \"data\": {\n \"job_sequence\": 2\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"do_number": "DO-10001",
"date": "2026-09-15",
"type": "Delivery",
"ok": true
}
]
}{
"code": "invalid_json_format"
}{
"code": "invalid_key",
"message": "Invalid key"
}{
"code": "forbidden"
}{
"code": "update_failed",
"message": "Update failed",
"errors": [
{
"do_number": "DO-10001",
"date": "2026-09-15",
"type": "Delivery",
"field": "job_sequence",
"codes": [
"not_found"
]
}
],
"data": [
{
"do_number": "DO-10001",
"date": "2026-09-15",
"type": "Delivery",
"ok": true
}
]
}