curl --request GET \
--url https://api.withterminal.com/tsp/v1/vehicles/locations \
--header 'Authorization: Bearer <token>' \
--header 'Connection-Token: <connection-token>'import requests
url = "https://api.withterminal.com/tsp/v1/vehicles/locations"
headers = {
"Connection-Token": "<connection-token>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'Connection-Token': '<connection-token>', Authorization: 'Bearer <token>'}
};
fetch('https://api.withterminal.com/tsp/v1/vehicles/locations', 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.withterminal.com/tsp/v1/vehicles/locations",
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>",
"Connection-Token: <connection-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.withterminal.com/tsp/v1/vehicles/locations"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Connection-Token", "<connection-token>")
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.withterminal.com/tsp/v1/vehicles/locations")
.header("Connection-Token", "<connection-token>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.withterminal.com/tsp/v1/vehicles/locations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Connection-Token"] = '<connection-token>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"results": [
{
"provider": "geotab",
"vehicle": "vcl_01D8ZQFGHVJ858NBF2Q7DV9MNC",
"locatedAt": "2021-01-06T03:24:53.000Z",
"location": {
"longitude": -122.4194155,
"latitude": 37.7749295
},
"driver": "drv_01D8ZQFGHVJ858NBF2Q7DV9MNC",
"address": {
"formatted": "1.5 miles from Austin, TX"
},
"heading": 25,
"speed": 95.33,
"odometer": 100,
"fuel": {
"primaryPercentage": 50,
"secondaryPercentage": 50
},
"engineState": "on",
"engineRuntime": 0,
"raw": []
}
],
"next": "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw"
}{
"code": "bad_request",
"message": "Invalid request body",
"detail": [
{
"message": "'vehicleId' property must be a valid ulid",
"path": "{requestQuery}.vehicleId",
"suggestion": "Please ensure you submit a valid 'vehicleId' property",
"context": {}
}
]
}{
"code": "unauthorized",
"message": "Unauthorized Request",
"detail": "Please ensure you have a valid API key"
}{
"code": "forbidden",
"message": "Forbidden Request",
"detail": "Please ensure the connection token matches the resource you are attempting to access."
}{
"code": "connection_deleted",
"message": "Connection has been deleted, cannot execute action"
}{
"code": "connection_disconnected",
"message": "Connection must be connected to perform this action",
"detail": []
}{
"code": "too_many_requests",
"message": "Too Many Requests",
"retryAfter": 60,
"detail": "You have exceeded your rate limit. Please try again later."
}{
"code": "internal_server_error",
"message": "Internal Server Error",
"detail": "Something went wrong"
}{
"code": "not_implemented",
"message": "Not Implemented",
"detail": "This endpoint is not yet implemented"
}{
"code": "bad_gateway",
"message": "Provider Unavailable",
"detail": "Error response received from provider with status 500"
}{
"code": "provider_unavailable",
"message": "Provider is not currently available"
}{
"code": "gateway_timeout",
"message": "Gateway Timeout"
}Latest Vehicle Locations
List the latest location of the vehicles in the connected account.
curl --request GET \
--url https://api.withterminal.com/tsp/v1/vehicles/locations \
--header 'Authorization: Bearer <token>' \
--header 'Connection-Token: <connection-token>'import requests
url = "https://api.withterminal.com/tsp/v1/vehicles/locations"
headers = {
"Connection-Token": "<connection-token>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'Connection-Token': '<connection-token>', Authorization: 'Bearer <token>'}
};
fetch('https://api.withterminal.com/tsp/v1/vehicles/locations', 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.withterminal.com/tsp/v1/vehicles/locations",
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>",
"Connection-Token: <connection-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.withterminal.com/tsp/v1/vehicles/locations"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Connection-Token", "<connection-token>")
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.withterminal.com/tsp/v1/vehicles/locations")
.header("Connection-Token", "<connection-token>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.withterminal.com/tsp/v1/vehicles/locations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Connection-Token"] = '<connection-token>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"results": [
{
"provider": "geotab",
"vehicle": "vcl_01D8ZQFGHVJ858NBF2Q7DV9MNC",
"locatedAt": "2021-01-06T03:24:53.000Z",
"location": {
"longitude": -122.4194155,
"latitude": 37.7749295
},
"driver": "drv_01D8ZQFGHVJ858NBF2Q7DV9MNC",
"address": {
"formatted": "1.5 miles from Austin, TX"
},
"heading": 25,
"speed": 95.33,
"odometer": 100,
"fuel": {
"primaryPercentage": 50,
"secondaryPercentage": 50
},
"engineState": "on",
"engineRuntime": 0,
"raw": []
}
],
"next": "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw"
}{
"code": "bad_request",
"message": "Invalid request body",
"detail": [
{
"message": "'vehicleId' property must be a valid ulid",
"path": "{requestQuery}.vehicleId",
"suggestion": "Please ensure you submit a valid 'vehicleId' property",
"context": {}
}
]
}{
"code": "unauthorized",
"message": "Unauthorized Request",
"detail": "Please ensure you have a valid API key"
}{
"code": "forbidden",
"message": "Forbidden Request",
"detail": "Please ensure the connection token matches the resource you are attempting to access."
}{
"code": "connection_deleted",
"message": "Connection has been deleted, cannot execute action"
}{
"code": "connection_disconnected",
"message": "Connection must be connected to perform this action",
"detail": []
}{
"code": "too_many_requests",
"message": "Too Many Requests",
"retryAfter": 60,
"detail": "You have exceeded your rate limit. Please try again later."
}{
"code": "internal_server_error",
"message": "Internal Server Error",
"detail": "Something went wrong"
}{
"code": "not_implemented",
"message": "Not Implemented",
"detail": "This endpoint is not yet implemented"
}{
"code": "bad_gateway",
"message": "Provider Unavailable",
"detail": "Error response received from provider with status 500"
}{
"code": "provider_unavailable",
"message": "Provider is not currently available"
}{
"code": "gateway_timeout",
"message": "Gateway Timeout"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Scopes the request to a Terminal application in the caller's organization. Required for multi-application organizations when using a user session or OAuth access token. API keys are already bound to a single application.
The token returned when a user authenticated their account. This authorizes access to a specific account.
^con_tkn_\S+$"con_tkn_22vUhkC6tgre4kwaYfUkCDA1rzn6eyb4"
Query Parameters
Pagination cursor to start requests from
^[A-Za-z0-9+/=_-]+$"cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw"
The maximum number of results to return in a page.
Include raw responses used to normalize model. Used for debugging or accessing unique properties that are not unified.
Comma separated list of vehicle IDs to filter for. Can filter up to 50 vehicles at a time. Each ID must use the vcl_ prefix.
^vcl_[0-9A-HJKMNP-TV-Z]{26}(\s*,\s*vcl_[0-9A-HJKMNP-TV-Z]{26})*$Comma separated list of driver IDs to filter for. Can filter up to 50 drivers at a time. Each ID must use the drv_ prefix.
^drv_[0-9A-HJKMNP-TV-Z]{26}(\s*,\s*drv_[0-9A-HJKMNP-TV-Z]{26})*$Expand resources in the returned response
vehicle, driver, vehicle,driver, driver,vehicle