curl --request GET \
--url https://api.catenatelematics.com/v2/intelligence/movement/vehicles \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.catenatelematics.com/v2/intelligence/movement/vehicles"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.catenatelematics.com/v2/intelligence/movement/vehicles', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.catenatelematics.com/v2/intelligence/movement/vehicles"
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))
}require 'uri'
require 'net/http'
url = URI("https://api.catenatelematics.com/v2/intelligence/movement/vehicles")
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_bodyHttpResponse<String> response = Unirest.get("https://api.catenatelematics.com/v2/intelligence/movement/vehicles")
.header("Authorization", "Bearer <token>")
.asString();using RestSharp;
var options = new RestClientOptions("https://api.catenatelematics.com/v2/intelligence/movement/vehicles");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.catenatelematics.com/v2/intelligence/movement/vehicles",
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;
}{
"items": [
{
"vehicle": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vehicle_name": "<string>",
"oem": "<string>",
"model_type": "<string>",
"model_year": 123,
"vin": "<string>",
"license_plate_region": "<string>",
"license_plate_country": "<string>",
"license_plate_number": "<string>",
"is_active": true,
"status": "<string>",
"eld_id": "<string>",
"eld_serial_number": "<string>",
"source_id": "<string>",
"external_id": "<string>"
},
"fleet_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fleet_ref": "<string>",
"moved": true,
"distance_traveled_meters": 123,
"method": "odometer",
"last_location_ping": "2023-11-07T05:31:56Z"
}
],
"total": 1,
"current_page": "<string>",
"current_page_backwards": "<string>",
"previous_page": "<string>",
"next_page": "<string>"
}{
"code": 400,
"message": "Bad Request",
"detail": "<string>"
}{
"code": 401,
"message": "Unauthorized",
"detail": "<string>"
}{
"code": 403,
"message": "Forbidden",
"detail": "<string>"
}{
"code": 404,
"message": "Not Found",
"detail": "<string>"
}{
"code": 405,
"message": "Method Not Allowed",
"detail": "<string>"
}{
"code": 409,
"message": "Conflict",
"detail": "<string>"
}{
"code": 422,
"message": "Invalid Request Body",
"detail": [
{
"path": "<string>",
"input": "<string>",
"message": "<string>",
"error_type": "<string>"
}
]
}{
"code": 429,
"message": "Too Many Requests",
"detail": {
"retry_after_seconds": 123,
"message": "<string>"
}
}{
"message": "Internal Server Error"
}{
"code": 501,
"message": "Not Implemented",
"detail": "<string>"
}🧪 List Vehicle Movement Status
Retrieve movement status for vehicles in your accessible fleets over the trailing 30 days. A vehicle is considered to have moved when it traveled at least 1000 meters in that window. Movement is determined from odometer readings when available, falling back to a GPS-derived spatial extent when odometer data is not reported. At least one of fleet_ids, fleet_refs, connection_id, or vehicle_ids must be provided. Use moved to filter the result to only vehicles that did or didn’t move. Each row carries a vehicle object with the vehicle’s identifying details, and last_location_ping reports when the vehicle was last seen, regardless of the 30-day window. moved/distance_traveled_meters/method reflect data through the end of yesterday (UTC), not today — this is a compliance/pattern signal, not a real-time tracking view.
curl --request GET \
--url https://api.catenatelematics.com/v2/intelligence/movement/vehicles \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.catenatelematics.com/v2/intelligence/movement/vehicles"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.catenatelematics.com/v2/intelligence/movement/vehicles', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.catenatelematics.com/v2/intelligence/movement/vehicles"
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))
}require 'uri'
require 'net/http'
url = URI("https://api.catenatelematics.com/v2/intelligence/movement/vehicles")
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_bodyHttpResponse<String> response = Unirest.get("https://api.catenatelematics.com/v2/intelligence/movement/vehicles")
.header("Authorization", "Bearer <token>")
.asString();using RestSharp;
var options = new RestClientOptions("https://api.catenatelematics.com/v2/intelligence/movement/vehicles");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.catenatelematics.com/v2/intelligence/movement/vehicles",
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;
}{
"items": [
{
"vehicle": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vehicle_name": "<string>",
"oem": "<string>",
"model_type": "<string>",
"model_year": 123,
"vin": "<string>",
"license_plate_region": "<string>",
"license_plate_country": "<string>",
"license_plate_number": "<string>",
"is_active": true,
"status": "<string>",
"eld_id": "<string>",
"eld_serial_number": "<string>",
"source_id": "<string>",
"external_id": "<string>"
},
"fleet_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fleet_ref": "<string>",
"moved": true,
"distance_traveled_meters": 123,
"method": "odometer",
"last_location_ping": "2023-11-07T05:31:56Z"
}
],
"total": 1,
"current_page": "<string>",
"current_page_backwards": "<string>",
"previous_page": "<string>",
"next_page": "<string>"
}{
"code": 400,
"message": "Bad Request",
"detail": "<string>"
}{
"code": 401,
"message": "Unauthorized",
"detail": "<string>"
}{
"code": 403,
"message": "Forbidden",
"detail": "<string>"
}{
"code": 404,
"message": "Not Found",
"detail": "<string>"
}{
"code": 405,
"message": "Method Not Allowed",
"detail": "<string>"
}{
"code": 409,
"message": "Conflict",
"detail": "<string>"
}{
"code": 422,
"message": "Invalid Request Body",
"detail": [
{
"path": "<string>",
"input": "<string>",
"message": "<string>",
"error_type": "<string>"
}
]
}{
"code": 429,
"message": "Too Many Requests",
"detail": {
"retry_after_seconds": 123,
"message": "<string>"
}
}{
"message": "Internal Server Error"
}{
"code": 501,
"message": "Not Implemented",
"detail": "<string>"
}This endpoint is available for early access. The core schema is stable, but minor details — such as field names or added fields — may change before it becomes generally available. Backward compatibility is not guaranteed.
See API Stability & Versioning for details on provisional endpoints.
Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Query Parameters
Filter by movement status. true returns only vehicles that traveled at least 1000 meters in the trailing 30 days; false returns only vehicles confirmed to have stayed under that threshold. Omit to return every vehicle regardless of status, including those with insufficient data (moved: null).
Limit results to specific fleets using Catena's fleet IDs. For your own fleet identifiers, use fleet_refs instead To specify multiple values, repeat the parameter for each value (e.g., ?fleet_ids=id1&fleet_ids=id2).
100Limit results to specific fleets using your organization's fleet reference identifiers. To specify multiple values, repeat the parameter for each value (e.g., ?fleet_refs=ref1&fleet_refs=ref2).
100Limit results to a specific provider connection. This is the UUID assigned by Catena when your fleet connects to a TSP.
Limit results to specific vehicles. Maximum: 100 IDs To specify multiple values, repeat the parameter for each value (e.g., ?vehicle_ids=id1&vehicle_ids=id2).
100Cursor for the next page
Page size
1 <= x <= 1000Response
Successful Response
Show child attributes
Show child attributes
x >= 0Cursor to refetch the current page
Cursor to refetch the current page starting from the last item
Cursor for the previous page
Cursor for the next page
Was this page helpful?