Authenticate with your MyGeotab service account credentials to get a session ID. The session is stored automatically and used for all subsequent API calls on this page.
Both responses return HTTP 200. Check the body for result or error.
Retrieve a list of cameras in your database. The API fetches Geotab native cameras and integrated partner cameras. All search parameters are optional — omit them to return all cameras.
The fields below are sent nested inside cameraStatusSearch in the request body.
The fields below are sent nested inside deviceSearch in the request body.
The fields below are sent nested inside groupFilterCondition in the request body.
Poll for camera additions and changes using a version cursor. Each call returns only the records that changed since your last call, making this efficient for keeping a local camera list in sync. On first call, pass fromVersion: "0000000000000000" to receive all cameras. On subsequent calls, pass the toVersion value returned by the previous response.
Retrieve the connectivity status of cameras in your database. Use the id values returned by the Camera List API as cameraIds.
Retrieve all camera event types available in your database, including associated MyGeotab rules. No search parameters — returns everything.
Retrieve video events from Geotab cameras and partner cameras with Geotab video coaching enabled. Use the GVP Event Tile Grid library to display events and the Video Player library to play them.
Retrieve the media recorded for one or more video events. Pass the id values returned by the Event List API as eventId. Each event returns its recording window, where the media currently lives, and a list of recordings with signed URLs you can play with the Video Player library.
Retrieve the periodic thumbnail packs a camera uploaded during a time window. Each pack is a .thm archive of snapshots, returned with a short-lived signed download URL. See Reading Thumbnail Packs for how to extract them.
Scope: Supports Geotab cameras only.
The window cannot exceed 6 hours. Packs that overlap the window are included, so the first and last can extend past it. An empty packs array means the camera uploaded no thumbnails in that window. Packs with no downloadable file are left out, and failureReason then says how many. Requires the View recorded video permission.
The Trip Thumbnails API returns a signed download URL for each thumbnail pack. Each pack is a .thm file: an uncompressed tar archive of JPEG snapshots. While on a trip, the camera takes a snapshot about once a minute, and each pack covers a few minutes.
| Entry name | Content |
|---|---|
<timestamp>.vid_1 |
Road-facing snapshot (JPEG). <timestamp> is the capture time in epoch milliseconds. |
<timestamp>.vid_2 |
Cabin-facing snapshot (JPEG), present when the camera captures the cabin. |
<timestamp>.<source>.meta |
Internal metadata. Skip these entries. |
Snapshot entries have no .jpg extension, so add one when you save them. Some packs contain an empty 512-byte block between entries; tell your tar reader to skip empty blocks rather than stop at the first one.
packs is the packs array from the Trip Thumbnails response.
import io, os, tarfile
from urllib.request import urlopen
for pack in packs:
data = urlopen(pack["url"], timeout=30).read()
# Some packs have empty blocks between entries
tar = tarfile.open(fileobj=io.BytesIO(data),
ignore_zeros=True)
for entry in tar:
# e.g. 1758200983736.vid_1
name = os.path.basename(entry.name)
if not entry.isfile() or name.endswith(".meta"):
continue
ms, source = name.rsplit(".", 1)
with open(f"{ms}_{source}.jpg", "wb") as f:
f.write(tar.extractfile(entry).read())To read packs in the browser without a tar library, see the View Trip Thumbnails recipe.
Scope: Supports Geotab cameras only. For third-party cameras, use the vendor's native API.
The Event Capture API lets you request video or snapshots from a Geotab camera. You can capture what the camera sees right now, or pull footage it has already recorded.
Capturing footage takes two steps:
topic.partner.event.capture.request.status webhook topic, and status updates are pushed to you as they happen.When the status reaches COMPLETED, your footage is ready.
A request moves through these statuses:
| Status | Description |
|---|---|
QUEUED |
The request is waiting to be sent to the camera. |
SENT |
The request has reached the camera. |
ONGOING |
The camera is recording or retrieving the footage. |
COMPLETED |
The footage is ready to use. |
FAIL |
Something went wrong. Check failureReason in the response for details. |
DUPLICATE |
You already have an identical request for this camera and timestamp. |
EXPIRED |
The camera did not pick up the request in time, so it was discarded. |
REJECTED |
The request was not accepted — see Queue limits below. When this happens, eventCaptureRequestId is empty. |
Each camera has its own request queue. When your request is delivered depends on the camera's state:
queueTimeMinutes). If the camera does not come online in time, the request expires.A camera's queue holds up to 16 pending requests. A new request is rejected right away (status REJECTED) if:
To request footage from many cameras at once, use Place Bulk Capture Requests instead of calling Place a Capture Request once per camera. It accepts up to 100 requests per call and counts as a single API call against your rate limit.
Each request is handled independently, so one rejected request does not affect the others. Track each accepted request with its eventCaptureRequestId exactly as you would for a single request.
cameraSerialNumber, fromDate, durationSeconds, mediaType and requestEventName.DUPLICATE with the original eventCaptureRequestId.Submit a request to capture video or a snapshot from a Geotab camera for a specific point in time.
Scope: Supports Geotab cameras only.
After placing a request, poll its status with the Retrieve Request Status endpoint, or subscribe to the topic.partner.event.capture.request.status webhook topic for real-time updates.
Submit capture requests for up to 100 cameras in a single call. Each entry works like Place a Capture Request, with its own camera, time window and media type.
Scope: Supports Geotab cameras only.
Entries are processed independently. A rejected entry returns status: "REJECTED" and a failureReason without affecting the others. Track each accepted request with Retrieve Request Status using its eventCaptureRequestId.
Fill in the fields below and click + Add request to queue each request. Queued requests and the one being filled in are all sent in entities.
Check the current status of one or more previously submitted event capture requests.
Retrieve GPS position records for a device over a time range.
The fields below are sent nested inside deviceSearch in the request body.
Retrieve sensor and CANBus diagnostic data for a device over a time range.
The fields below are sent nested inside deviceSearch in the request body.
The Geotab Video Platform webhook system lets you register an HTTP endpoint and receive real-time notifications via POST requests when events occur.
All webhook POST requests share the same top-level structure:
| Field | Type | Description |
|---|---|---|
uuid |
string | Unique ID for this notification |
timestamp |
string (ISO 8601) | Timestamp when the notification was dispatched |
topic |
string | Topic identifier for the notification type |
data |
object | Payload specific to the topic |
topic.partner.event.capture.request.statusSent when the status of an event capture request changes.
{
"uuid": "2dcb66ba-ff70-93e6-8f66-ac9ea28df949",
"timestamp": "2025-06-11T15:12:18.124Z",
"topic": "topic.partner.event.capture.request.status",
"data": {
"requestId": "11a0512e-61ad-4937-b270-e02ca5fae9be",
"database": "my_database",
"cameraSerialNumber": "GE02245XNJQ5I",
"deviceSerialNumber": "GA4DM0VP43MY",
"deviceId": "b221",
"status": "COMPLETED",
"failureReason": "",
"fromDate": "2026-06-10T14:30:00Z",
"durationSeconds": 10,
"requestEventName": "Broom Activated",
"mediaType": "VIDEO"
}
}topic.partner.event.synchedSent when a camera event is synced with the MyGeotab driver assignment.
{
"uuid": "2dcb66ba-ff70-93e6-8f66-ac9ea28df949",
"timestamp": "2025-06-11T15:12:18.124Z",
"topic": "topic.partner.event.synched",
"data": {
"id": "1718372943321228",
"exceptionId": "aK7upVD7zbEm5vw179Gk5fw",
"cameraSerialNumber": "GE02245DCXZEM",
"database": "my_database",
"deviceSerialNumber": "GAHF85FP54F",
"deviceId": "b15",
"deviceName": "Ford Ranger - 4512 - California",
"driverId": "b32",
"ruleName": "Harsh Braking",
"eventStart": "2025-06-11T15:12:18.124Z",
"eventEnd": "2025-06-11T15:12:25.781Z",
"recordingStart": "2025-06-11T15:12:15.124Z",
"recordingEnd": "2025-06-11T15:12:26.781Z",
"eventCaptureRequestId": null,
"highMagnitude": false,
"created": "2025-06-11T15:12:19.003Z"
}
}Retrieve all webhook topics available for subscription.
Register an HTTP endpoint to receive real-time notifications for one or more topics.
Retrieve all registered webhook endpoints for your database.
Update the URL, token, or subscribed topics for an existing webhook endpoint.
Remove a registered webhook endpoint and stop receiving notifications.