Jobs
Bulk delete jobs
Delete up to 100 jobs in one request using DELETE /dn/jobs. The API returns per-row results, and partial failures include a deletion_failed code with specific error reasons.
DELETE
/
dn
/
jobs
Bulk delete jobs
curl --request DELETE \
--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",
"date": "2026-09-15",
"type": "Delivery"
}
]
}
'import requests
url = "https://app.detrack.com/api/v2/dn/jobs"
payload = { "data": [
{
"do_number": "DO-10001",
"date": "2026-09-15",
"type": "Delivery"
}
] }
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.delete(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'DELETE',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({data: [{do_number: 'DO-10001', date: '2026-09-15', type: 'Delivery'}]})
};
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 => "DELETE",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
[
'do_number' => 'DO-10001',
'date' => '2026-09-15',
'type' => 'Delivery'
]
]
]),
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 \"date\": \"2026-09-15\",\n \"type\": \"Delivery\"\n }\n ]\n}")
req, _ := http.NewRequest("DELETE", 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.delete("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 \"date\": \"2026-09-15\",\n \"type\": \"Delivery\"\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::Delete.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": [\n {\n \"do_number\": \"DO-10001\",\n \"date\": \"2026-09-15\",\n \"type\": \"Delivery\"\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": "deletion_failed",
"message": "Deletion 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
}
]
}This endpoint removes up to 100 jobs in a single request. Provide an array of objects that each identify a job by
do_number (and optionally date and type). The API returns a per-row ok status so you can see exactly which deletions succeeded and which failed, along with the reason for any failure.
For deleting a single job, see Delete job. To update jobs in bulk, see Bulk update.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 deleted.
Show child attributes
Show child attributes
Bulk delete jobs
curl --request DELETE \
--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",
"date": "2026-09-15",
"type": "Delivery"
}
]
}
'import requests
url = "https://app.detrack.com/api/v2/dn/jobs"
payload = { "data": [
{
"do_number": "DO-10001",
"date": "2026-09-15",
"type": "Delivery"
}
] }
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.delete(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'DELETE',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({data: [{do_number: 'DO-10001', date: '2026-09-15', type: 'Delivery'}]})
};
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 => "DELETE",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
[
'do_number' => 'DO-10001',
'date' => '2026-09-15',
'type' => 'Delivery'
]
]
]),
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 \"date\": \"2026-09-15\",\n \"type\": \"Delivery\"\n }\n ]\n}")
req, _ := http.NewRequest("DELETE", 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.delete("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 \"date\": \"2026-09-15\",\n \"type\": \"Delivery\"\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::Delete.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": [\n {\n \"do_number\": \"DO-10001\",\n \"date\": \"2026-09-15\",\n \"type\": \"Delivery\"\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": "deletion_failed",
"message": "Deletion 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
}
]
}