Last position (V2)
curl --request GET \
--url https://api.telemax.com.au/v2/api/vehicles/{id}/last-position \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.telemax.com.au/v2/api/vehicles/{id}/last-position"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.telemax.com.au/v2/api/vehicles/{id}/last-position', 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/{id}/last-position",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://api.telemax.com.au/v2/api/vehicles/{id}/last-position"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.telemax.com.au/v2/api/vehicles/{id}/last-position")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.telemax.com.au/v2/api/vehicles/{id}/last-position")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"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
}{
"type": "AUTHENTICATION",
"code": "INVALID_CREDENTIALS",
"description": "The provided API key is invalid or does not exist.",
"requestId": "0HNLTALNU4DCO:00000004",
"docUrl": "https://docs.telemax.com.au/errors/invalid-credentials"
}{
"type": "RESOURCE",
"code": "NOT_FOUND",
"description": "Vehicle was not found.",
"requestId": "c9f09b2f-3999-4245-89f5-4556ad775dbb",
"docUrl": "https://docs.telemax.com.au/errors/not-found"
}{
"type": "RATE_LIMIT",
"code": "RATE_LIMIT_EXCEEDED",
"description": "Too many requests. Please slow down.",
"requestId": "req_6d2f8b4a",
"docUrl": "https://docs.telemax.com.au/errors/rate-limit-exceeded"
}{
"type": "SERVER_ERROR",
"code": "INTERNAL_SERVER_ERROR",
"description": "An unexpected error occurred. Please try again later.",
"requestId": "req_1e5a3c7d",
"docUrl": "https://docs.telemax.com.au/errors/internal-server-error"
}Vehicles
Last position
Returns the last known position for a single vehicle.
GET
/
v2
/
api
/
vehicles
/
{id}
/
last-position
Last position (V2)
curl --request GET \
--url https://api.telemax.com.au/v2/api/vehicles/{id}/last-position \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.telemax.com.au/v2/api/vehicles/{id}/last-position"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.telemax.com.au/v2/api/vehicles/{id}/last-position', 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/{id}/last-position",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://api.telemax.com.au/v2/api/vehicles/{id}/last-position"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.telemax.com.au/v2/api/vehicles/{id}/last-position")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.telemax.com.au/v2/api/vehicles/{id}/last-position")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"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
}{
"type": "AUTHENTICATION",
"code": "INVALID_CREDENTIALS",
"description": "The provided API key is invalid or does not exist.",
"requestId": "0HNLTALNU4DCO:00000004",
"docUrl": "https://docs.telemax.com.au/errors/invalid-credentials"
}{
"type": "RESOURCE",
"code": "NOT_FOUND",
"description": "Vehicle was not found.",
"requestId": "c9f09b2f-3999-4245-89f5-4556ad775dbb",
"docUrl": "https://docs.telemax.com.au/errors/not-found"
}{
"type": "RATE_LIMIT",
"code": "RATE_LIMIT_EXCEEDED",
"description": "Too many requests. Please slow down.",
"requestId": "req_6d2f8b4a",
"docUrl": "https://docs.telemax.com.au/errors/rate-limit-exceeded"
}{
"type": "SERVER_ERROR",
"code": "INTERNAL_SERVER_ERROR",
"description": "An unexpected error occurred. Please try again later.",
"requestId": "req_1e5a3c7d",
"docUrl": "https://docs.telemax.com.au/errors/internal-server-error"
}Overview
Returns the most recent position record for the specified vehicle.The V1 version of this endpoint is Vehicle Position.
Rate limit: 10 req/s · 120/min · 6,000/hr · 144,000/day
Endpoint
GET /v2/api/vehicles/{id}/last-position
Path parameters
integer
required
Vehicle ID.
Response
200 OK —PositionDto, or an empty HTTP 200 with no body if the vehicle has no position data yet.
If the vehicle has never reported a position, the API returns HTTP 200 with an empty body (not JSON
null). Check for an empty response before parsing.| 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 | External battery voltage (V) |
| fatigue | string | TimeSpan format (HH:mm:ss) — time since last rest |
| engineHours | number | Cumulative engine hours |
| Field | Type | Description |
|---|---|---|
| satelliteCoverage | string | Satellite signal status label (e.g. "Excellent", "GPS", "Wifi-Cell") |
| 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. Returns "--" if geocoding is unavailable. |
| engineEnabled | boolean | Whether engine output is enabled |
| Field | Type | Description |
|---|---|---|
| isOnline | boolean | Whether the device is currently online. Known issue: this field currently always returns false for this endpoint. Use Last online for accurate online status. |
| Field | Type | Description |
|---|---|---|
| timeElapsed | number | Request processing time elapsed (milliseconds) |
| startedTime | datetime | Request processing start timestamp |
| endTime | datetime | Request processing end timestamp |
Error responses
| Status | Meaning |
|---|---|
| 401 | Token does not have access to this vehicle |
| 403 | Forbidden — token scope does not include this action |
| 404 | Vehicle not found |
curl "https://api.telemax.com.au/v2/api/vehicles/88421/last-position" \
-H "Authorization: Bearer <token>"
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.
Path Parameters
Response
Successful response
Was this page helpful?
⌘I