List vehicles (V2)
curl --request POST \
--url https://api.telemax.com.au/v2/api/vehicles/list \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"vehicleIds": [
88421,
88422
]
}
'import requests
url = "https://api.telemax.com.au/v2/api/vehicles/list"
payload = { "vehicleIds": [88421, 88422] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({vehicleIds: [88421, 88422]})
};
fetch('https://api.telemax.com.au/v2/api/vehicles/list', 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://api.telemax.com.au/v2/api/vehicles/list",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'vehicleIds' => [
88421,
88422
]
]),
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://api.telemax.com.au/v2/api/vehicles/list"
payload := strings.NewReader("{\n \"vehicleIds\": [\n 88421,\n 88422\n ]\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.telemax.com.au/v2/api/vehicles/list")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"vehicleIds\": [\n 88421,\n 88422\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.telemax.com.au/v2/api/vehicles/list")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"vehicleIds\": [\n 88421,\n 88422\n ]\n}"
response = http.request(request)
puts response.read_body{
"items": [
{
"utcTime": "2026-04-28T06:14:22",
"userTime": "2026-04-28T16:14:22",
"userTimeFormatted": "28/04/2026 04:14 PM",
"lat": -33.8688,
"lng": 151.2093,
"speed": 0,
"course": 142,
"ignition": false,
"odometer": 45321.2,
"voltage": 12.8,
"fatigue": "00:00:00",
"engineHours": 1842.5,
"satelliteCoverage": "Excellent",
"satelliteCoverageRawValue": 12,
"networkCoverage": "Excellent",
"networkCoverageRawValue": 18,
"deviceId": 88421,
"ignitionTime": null,
"deviceName": "Delivery Van 07",
"imei": "353148090123456",
"vin": "1HGBH41JXMN109186",
"startMovingTime": null,
"startMovingTimeUser": null,
"lastMovementTime": "2026-04-28T05:50:00",
"lastMovementTimeUser": "2026-04-28T15:50:00",
"lastMovementTimeUserFormatted": "28/04/2026 03:50 PM",
"drivingTime": null,
"fuelLevel": null,
"fuelVolume": null,
"address": "42 George St, Sydney NSW 2000",
"engineEnabled": true,
"timeElapsed": 245.12,
"startedTime": "2026-04-28T06:14:22",
"endTime": "2026-04-28T06:14:22",
"isOnline": false
}
],
"totalResults": 1,
"lastResultIndex": 1,
"currentPage": 1,
"numberOfPages": 1
}Vehicles
List vehicles
Returns last-known positions for a specific set of 1–50 vehicles.
POST
/
v2
/
api
/
vehicles
/
list
List vehicles (V2)
curl --request POST \
--url https://api.telemax.com.au/v2/api/vehicles/list \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"vehicleIds": [
88421,
88422
]
}
'import requests
url = "https://api.telemax.com.au/v2/api/vehicles/list"
payload = { "vehicleIds": [88421, 88422] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({vehicleIds: [88421, 88422]})
};
fetch('https://api.telemax.com.au/v2/api/vehicles/list', 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://api.telemax.com.au/v2/api/vehicles/list",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'vehicleIds' => [
88421,
88422
]
]),
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://api.telemax.com.au/v2/api/vehicles/list"
payload := strings.NewReader("{\n \"vehicleIds\": [\n 88421,\n 88422\n ]\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.telemax.com.au/v2/api/vehicles/list")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"vehicleIds\": [\n 88421,\n 88422\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.telemax.com.au/v2/api/vehicles/list")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"vehicleIds\": [\n 88421,\n 88422\n ]\n}"
response = http.request(request)
puts response.read_body{
"items": [
{
"utcTime": "2026-04-28T06:14:22",
"userTime": "2026-04-28T16:14:22",
"userTimeFormatted": "28/04/2026 04:14 PM",
"lat": -33.8688,
"lng": 151.2093,
"speed": 0,
"course": 142,
"ignition": false,
"odometer": 45321.2,
"voltage": 12.8,
"fatigue": "00:00:00",
"engineHours": 1842.5,
"satelliteCoverage": "Excellent",
"satelliteCoverageRawValue": 12,
"networkCoverage": "Excellent",
"networkCoverageRawValue": 18,
"deviceId": 88421,
"ignitionTime": null,
"deviceName": "Delivery Van 07",
"imei": "353148090123456",
"vin": "1HGBH41JXMN109186",
"startMovingTime": null,
"startMovingTimeUser": null,
"lastMovementTime": "2026-04-28T05:50:00",
"lastMovementTimeUser": "2026-04-28T15:50:00",
"lastMovementTimeUserFormatted": "28/04/2026 03:50 PM",
"drivingTime": null,
"fuelLevel": null,
"fuelVolume": null,
"address": "42 George St, Sydney NSW 2000",
"engineEnabled": true,
"timeElapsed": 245.12,
"startedTime": "2026-04-28T06:14:22",
"endTime": "2026-04-28T06:14:22",
"isOnline": false
}
],
"totalResults": 1,
"lastResultIndex": 1,
"currentPage": 1,
"numberOfPages": 1
}Overview
Returns last-known positions for a specific set of vehicles. The request body is required and must contain between 1 and 50deviceId values — this limit prevents the endpoint from being used to scrape the entire fleet.
The V1 version of this endpoint is Device positions. V2 is paginated.
Rate limit: 10 req/s · 30/min · 6,000/hr · 144,000/day
Endpoint
POST /v2/api/vehicles/list
Query parameters
integer
default:"1"
Page number (1-based).
integer
default:"50"
Records per page.
Request body
{
"vehicleIds": [88421, 88422]
}
| Field | Type | Required | Description |
|---|---|---|---|
| vehicleIds | integer[] | Yes | deviceId values to query. Must contain between 1 and 50 entries. Returns 422 if empty or omitted. |
Response
200 OK —PagedListResult<PositionDto>
Each item in items is a full PositionDto. All fields below are present on every item.
Record & timestamps
| Field | Type | Description |
|---|---|---|
| utcTime | datetime | Record timestamp (UTC, no fractional seconds) |
| userTime | datetime | Record timestamp in the user’s timezone |
| userTimeFormatted | string | Record timestamp formatted per the user’s date format |
| Field | Type | Description |
|---|---|---|
| lat | number | Latitude |
| lng | number | Longitude |
| speed | number | Speed (km/h) |
| course | integer | Compass direction in degrees (N=0, E=90, S=180, W=270) |
| Field | Type | Description |
|---|---|---|
| ignition | boolean | Ignition state |
| odometer | number | null | GPS odometer (km) |
| voltage | number | null | Internal battery voltage (V) |
| fatigue | string | .NET TimeSpan string — time since last rest (e.g. "03:05:00") |
| engineHours | number | Cumulative engine hours |
| Field | Type | Description |
|---|---|---|
| satelliteCoverage | string | Satellite signal status label (e.g. "Wifi-Cell", "GPS") |
| satelliteCoverageRawValue | integer | null | Raw satellite signal integer value |
| networkCoverage | string | Cellular network coverage label (e.g. "No network information") |
| networkCoverageRawValue | integer | null | Raw network coverage integer value |
| Field | Type | Description |
|---|---|---|
| deviceId | integer | Vehicle ID |
| ignitionTime | number | null | Cumulative ignition-on time (seconds) |
| deviceName | string | Vehicle display name |
| imei | string | Device IMEI |
| vin | string | null | Vehicle Identification Number |
| Field | Type | Description |
|---|---|---|
| startMovingTime | datetime | null | When the vehicle started moving (UTC) |
| startMovingTimeUser | datetime | null | When the vehicle started moving (user timezone) |
| lastMovementTime | datetime | null | When the vehicle last stopped (UTC) |
| lastMovementTimeUser | datetime | null | When the vehicle last stopped (user timezone) |
| lastMovementTimeUserFormatted | string | null | Last movement time formatted |
| Field | Type | Description |
|---|---|---|
| drivingTime | integer | null | Driving time within current trip (seconds) |
| Field | Type | Description |
|---|---|---|
| fuelLevel | integer | null | Fuel level (%) |
| fuelVolume | number | null | Fuel volume (litres) |
| Field | Type | Description |
|---|---|---|
| address | string | Reverse-geocoded street address |
| engineEnabled | boolean | Whether engine output is enabled |
| Field | Type | Description |
|---|---|---|
| isOnline | boolean | Whether the device is currently online |
| Field | Type | Description |
|---|---|---|
| timeElapsed | number | Request processing time elapsed (seconds) |
| startedTime | datetime | Request processing start timestamp |
| endTime | datetime | Request processing end timestamp |
Error responses
| Status | Meaning |
|---|---|
| 401 | Missing or invalid token |
| 403 | Token scope does not include access to any company vehicles |
| 422 | Request body is missing, vehicleIds is empty, or contains more than 50 entries |
curl -X POST "https://api.telemax.com.au/v2/api/vehicles/list?page=1&pageSize=50" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"vehicleIds": [88421, 88422]}'
Authorizations
JWT Bearer token obtained from POST /v2/api/authentication/token/api-key.
Lifetime: ~24 hours (86,399 seconds). Cache the token and reuse it. Re-authenticate 5 minutes before expiry.
Scoping: API key tokens are scoped to the company the key belongs to and may restrict access to a vehicle allowlist and/or action set (see token claims).
No refresh endpoint — re-authenticate with your API key when the token expires.
Body
application/json
List of deviceId values to query. Must contain between 1 and 50 entries. Returns 422 if empty or omitted.
Required array length:
1 - 50 elementsResponse
Successful response
Was this page helpful?
⌘I