List jobs
GET /dn/jobs returns a paginated list of delivery and collection jobs with filters for date, status, assignee, and DO number.
curl --request GET \
--url https://app.detrack.com/api/v2/dn/jobs \
--header 'X-API-KEY: <api-key>'import requests
url = "https://app.detrack.com/api/v2/dn/jobs"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
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 => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://app.detrack.com/api/v2/dn/jobs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.detrack.com/api/v2/dn/jobs")
.header("X-API-KEY", "<api-key>")
.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::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "5b22055510c92b1a046ece04",
"type": "Delivery",
"do_number": "DO-10001",
"date": "2026-09-15",
"status": "dispatched",
"primary_job_status": "dispatched",
"tracking_status": "Info received",
"attempt": 1,
"detrack_number": "DET2000001",
"tracking_number": "T0",
"order_number": "ORN12345678",
"address": "Singapore 470140",
"postal_code": "470140",
"deliver_to_collect_from": "James Li",
"phone_number": "65432178",
"notify_email": "test@example.com",
"items_count": 2,
"created_at": "2026-09-15T06:04:06.017Z",
"items": [
{
"id": "5b22055510c92b1a046ece05",
"sku": "12345678",
"description": "iPad",
"quantity": 10,
"checked": false
}
],
"milestones": [
{
"status": "info_recv",
"assign_to": null,
"reason": null,
"pod_at": "2026-09-15T06:04:06.017Z",
"created_at": "2026-09-15T06:04:06.017Z",
"user_name": "Simon"
}
]
}
],
"links": {
"first": "<string>",
"last": "<string>",
"next": "<string>",
"prev": "<string>"
}
}{
"code": "invalid_key",
"message": "Invalid key"
}{
"code": "forbidden"
}{
"code": "error",
"message": "Error while retrieving data"
}created_at.
For what status, primary_job_status, and tracking_status mean, see Status fields.Authorizations
Your Detrack API key, from Integrations > API Key in the dashboard.
Query Parameters
Page number.
Records per page. The API doesn't cap it, but keep it to 100 or fewer.
Comma-separated fields to sort by. Prefix a field with - for descending, for example -created_at. Allowed: do_number, start_date, date, created_at, assign_to, status, job_sequence, job_time, customer. Other fields are ignored.
Filter by job date (YYYY-MM-DD).
Filter by job type.
Delivery, Collection Filter by assigned driver name. Send it empty to list unassigned jobs.
Filter by status. Separate several with commas, for example dispatched,completed.
Filter by exact DO number.
Free-text search. With date, it matches DO number, recipient name, address, assignee, zone, and item description (partial, case-insensitive) or the exact tracking number; email isn't searched, and status must be a single exact value (or unassigned). When query is set, do_number, assign_to, and sort are ignored, and type and status only apply with date.
curl --request GET \
--url https://app.detrack.com/api/v2/dn/jobs \
--header 'X-API-KEY: <api-key>'import requests
url = "https://app.detrack.com/api/v2/dn/jobs"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
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 => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://app.detrack.com/api/v2/dn/jobs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.detrack.com/api/v2/dn/jobs")
.header("X-API-KEY", "<api-key>")
.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::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "5b22055510c92b1a046ece04",
"type": "Delivery",
"do_number": "DO-10001",
"date": "2026-09-15",
"status": "dispatched",
"primary_job_status": "dispatched",
"tracking_status": "Info received",
"attempt": 1,
"detrack_number": "DET2000001",
"tracking_number": "T0",
"order_number": "ORN12345678",
"address": "Singapore 470140",
"postal_code": "470140",
"deliver_to_collect_from": "James Li",
"phone_number": "65432178",
"notify_email": "test@example.com",
"items_count": 2,
"created_at": "2026-09-15T06:04:06.017Z",
"items": [
{
"id": "5b22055510c92b1a046ece05",
"sku": "12345678",
"description": "iPad",
"quantity": 10,
"checked": false
}
],
"milestones": [
{
"status": "info_recv",
"assign_to": null,
"reason": null,
"pod_at": "2026-09-15T06:04:06.017Z",
"created_at": "2026-09-15T06:04:06.017Z",
"user_name": "Simon"
}
]
}
],
"links": {
"first": "<string>",
"last": "<string>",
"next": "<string>",
"prev": "<string>"
}
}{
"code": "invalid_key",
"message": "Invalid key"
}{
"code": "forbidden"
}{
"code": "error",
"message": "Error while retrieving data"
}