REST APIs

Authentication

POST{YOUR_MYG_HOST}/apiv1

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.

Parameters

methodstringrequired

Always "Authenticate"

params.databasestringrequired

Your MyGeotab database name

params.userNamestringrequired

Service account email address

params.passwordstringrequired

Service account password

Response

Both responses return HTTP 200. Check the body for result or error.

MyGeotab Host
Database
Username
Password
cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
    "method": "Authenticate",
    "params": {
      "database": "my_database",
      "userName": "sa@company.com",
      "password": "your_password"
    }
  }'

Camera List

POST{YOUR_MYG_HOST}/apiv1

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.

Body Params

idstring

Camera ID to search for. When specified, all other parameters are ignored.

fromDateISO 8601 date

Start of the date range to search for active cameras — e.g. 2026-06-01T00:00:00Z

toDateISO 8601 date

End of the date range to search for active cameras — e.g. 2026-06-10T00:00:00Z

vendorsstring

Filter by camera vendor(s). Select one or more.

cameraSerialNumbersstring

Filter by camera serial number(s). Separate multiple values with commas.

deviceSerialNumbersstring

Filter by GO device serial number(s). Separate multiple values with commas.

deviceActivityFilterstring

Filter by asset tracker status. Default: Active (only cameras paired to active devices).

cameraStatusSearchobject

The fields below are sent nested inside cameraStatusSearch in the request body.

statusesstring

Filter by camera connectivity status. Select one or more.

deviceSearchobject

The fields below are sent nested inside deviceSearch in the request body.

namestring

Filter by asset name (partial match supported).

vehicleIdentificationNumberstring

Filter by asset VIN.

deviceIdsstring

Filter by asset IDs. Separate multiple values with commas.

groupFilterConditionobject

The fields below are sent nested inside groupFilterCondition in the request body.

groupIdsstring

Company group ID(s) — matches cameras whose paired devices belong to these groups. Separate multiple values with commas. A single ID is sent as { groupId }; multiple IDs become one { groupId } condition each in groupFilterConditions.

relationstring

How the group conditions combine. Defaults to Or. Applies when more than one group ID is set.

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "Get",
      "params": {
          "typeName": "Camera",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!

Camera Feed

POST{YOUR_MYG_HOST}/apiv1

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.

Body Params

fromVersionstringrequired

Version cursor from the previous call's `toVersion`. Use `"0000000000000000"` for the initial call to retrieve all cameras.

resultsLimitinteger

Maximum number of records to return per call. Default: 50000.

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "GetFeed",
      "params": {
          "typeName": "Camera",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!

Camera Status

POST{YOUR_MYG_HOST}/apiv1

Retrieve the connectivity status of cameras in your database. Use the id values returned by the Camera List API as cameraIds.

Body Params

cameraIdsstring

Camera ID(s) to get status for — the id field from the Camera List API. Separate multiple values with commas.

statusesstring

Filter by connectivity status. Select one or more.

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "Get",
      "params": {
          "typeName": "CameraStatus",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!

Camera Event Types

POST{YOUR_MYG_HOST}/apiv1

Retrieve all camera event types available in your database, including associated MyGeotab rules. No search parameters — returns everything.

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "Get",
      "params": {
          "typeName": "CameraEventType",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!

Event List

POST{YOUR_MYG_HOST}/apiv1

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.

Body Params

fromDateISO 8601 daterequired

Start of the time range — e.g. 2026-06-01T00:00:00Z

toDateISO 8601 daterequired

End of the time range — e.g. 2026-06-10T00:00:00Z

cameraSerialNumbersstring

Filter by camera serial number(s). Separate multiple values with commas.

highMagnitudeOnlyboolean

Set to true to return only high-magnitude events. Default: false

pageinteger

Page number, starting at 0. Default: 0

sizeinteger

Number of results per page. Default: 100

sortstring

Sort order: BY_TIMESTAMP_DESC (default) or BY_MAGNITUDE_DESC

eventTypeFilterarray

Filter by event type. Optionally add a magnitude filter: a label plus an aggregator (avg, max, min, countByThreshold or total) with greaterThanEqual and/or lessThanEqual bounds — available for built-in video rules only.

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "Get",
      "params": {
          "typeName": "CameraEvent",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!

Event Recordings

POST{YOUR_MYG_HOST}/apiv1

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.

Body Params

eventIdstringrequired

Event ID(s) to retrieve recordings for — the `id` field from the Event List API. Separate multiple values with commas. Maximum 100 per request.

includeUnblurredboolean

Set to true to include unblurred media alongside the blurred versions. Default: false

mediaTypestring

Filter by media type. Select one or more. Returns all types by default.

sourcestring

Filter by camera source — e.g. road, cabin, rear, auxiliary_1. Separate multiple values with commas. Returns media from all sources by default.

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "Get",
      "params": {
          "typeName": "CameraEventRecording",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!

Overview

Event Capture

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.

How It Works

Capturing footage takes two steps:

  1. Place a request. Call Place a Capture Request with the camera and the time window you want. The API queues your request and returns a request ID. Save this ID — you need it to track the request.
  2. Track the request. Do one of the following:
    • Poll — call Retrieve Request Status with the request ID at an interval that suits you.
    • Webhook — subscribe to the 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.

Request lifecycle

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.

Queue Behavior

Each camera has its own request queue. When your request is delivered depends on the camera's state:

  • Online and on a trip — the request is delivered right away.
  • In light nap mode — the camera wakes up to handle the request.
  • Offline or not on a trip — the request waits in the queue for up to 24 hours (adjustable with queueTimeMinutes). If the camera does not come online in time, the request expires.
Queue limits

A camera's queue holds up to 16 pending requests. A new request is rejected right away (status REJECTED) if:

  • the queue is already full, or
  • the camera has been offline for more than 5 days.

Place a Capture Request

POST{YOUR_MYG_HOST}/apiv1

Submit a request to capture video or a snapshot from a Geotab camera for a specific point in time.

Scope: Works for 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.

Body Params

cameraSerialNumberstringrequired

Serial number of the target Geotab camera

fromDateISO 8601 daterequired

Start of the capture window — e.g. 2026-06-10T14:30:00Z

durationSecondsintegerrequired

Duration of the capture in seconds

requestEventNamestringrequired

Label for this capture request

mediaTypestringrequired

VIDEO — captures video and snapshot; SNAPSHOT — captures snapshot only

queueTimeMinutesinteger

How long to queue the request when the camera is offline or sleeping. Default: 1440 (24 hours)

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "Add",
      "params": {
          "typeName": "CameraEventCaptureRequest",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!

Retrieve Request Status

POST{YOUR_MYG_HOST}/apiv1

Check the current status of one or more previously submitted event capture requests.

Body Params

eventCaptureRequestIdstringrequired

One or more capture request IDs to look up. Separate multiple values with commas.

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "Get",
      "params": {
          "typeName": "CameraEventCaptureRequest",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!

GPS

POST{YOUR_MYG_HOST}/apiv1

Retrieve GPS position records for a device over a time range.

Body Params

deviceSearchobject

The fields below are sent nested inside deviceSearch in the request body.

idstringrequired

MyGeotab device ID — e.g. b4

fromDateISO 8601 daterequired

Start of the time range — e.g. 2026-02-04T22:54:00.000Z

toDateISO 8601 daterequired

End of the time range — e.g. 2026-02-04T23:54:00.000Z

resultsLimitinteger

Maximum number of records to return. Default: 2500

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "Get",
      "params": {
          "typeName": "LogRecord",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!

Other Sensors and CANBus

POST{YOUR_MYG_HOST}/apiv1

Retrieve sensor and CANBus diagnostic data for a device over a time range.

Body Params

deviceSearchobject

The fields below are sent nested inside deviceSearch in the request body.

idstringrequired

MyGeotab device ID — e.g. b1E93

fromDateISO 8601 daterequired

Start of the time range — e.g. 2026-06-17T04:00:00.000Z

toDateISO 8601 daterequired

End of the time range — e.g. 2026-06-18T04:00:00.000Z

resultsLimitinteger

Maximum number of records to return.

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "Get",
      "params": {
          "typeName": "StatusData",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!

Overview

Webhooks

The Geotab Video Platform webhook system lets you register an HTTP endpoint and receive real-time notifications via POST requests when events occur.

How It Works

  1. Use the List Available Topics API to see all available topics.
  2. Register your endpoint using the Register a Webhook API and subscribe to the topics you need.
  3. Update your subscription at any time using the Update a Webhook API.
  4. Remove your endpoint using the Delete a Webhook API.

Notification Format

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

Available Topics

topic.partner.event.capture.request.status

Sent 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.synched

Sent 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"
  }
}

List Available Topics

POST{YOUR_MYG_HOST}/apiv1

Retrieve all webhook topics available for subscription.

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "Get",
      "params": {
          "typeName": "CameraWebhookTopic",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!

Register a Webhook

POST{YOUR_MYG_HOST}/apiv1

Register an HTTP endpoint to receive real-time notifications for one or more topics.

Body Params

namestringrequired

Display name for this webhook endpoint.

urlstringrequired

HTTPS URL that will receive POST notifications.

tokenstring

Optional validation token included in each notification for verification.

topicsstringrequired

Topics to subscribe to. Separate multiple with commas — e.g. topic.partner.event.capture.request.status, topic.partner.event.synched

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "Add",
      "params": {
          "typeName": "CameraWebhook",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!

Get Registered Webhooks

POST{YOUR_MYG_HOST}/apiv1

Retrieve all registered webhook endpoints for your database.

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "Get",
      "params": {
          "typeName": "CameraWebhook",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!

Update a Webhook

POST{YOUR_MYG_HOST}/apiv1

Update the URL, token, or subscribed topics for an existing webhook endpoint.

Body Params

idintegerrequired

ID of the webhook registration to update.

namestringrequired

Display name for this webhook endpoint.

urlstringrequired

HTTPS URL that will receive POST notifications.

tokenstring

Optional validation token.

topicsstringrequired

Updated list of topics — replaces the existing list. Separate multiple with commas.

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "Set",
      "params": {
          "typeName": "CameraWebhook",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!

Delete a Webhook

POST{YOUR_MYG_HOST}/apiv1

Remove a registered webhook endpoint and stop receiving notifications.

Body Params

idintegerrequired

ID of the webhook registration to delete.

Response

CredentialsNot authenticated

Use the Authentication section at the top of this page to sign in. Your session fills in automatically.

cURL Request
curl --request POST \
  --url {YOUR_MYG_HOST}/apiv1 \
  --header 'Content-Type: application/json' \
  --data '{
      "method": "Remove",
      "params": {
          "typeName": "CameraWebhook",
          "credentials": {
              "database": "YOUR_DATABASE",
              "userName": "YOUR_USERNAME",
              "sessionId": "YOUR_SESSION_ID"
          }
      }
  }'
Response

Authenticate in the sidebar, then click Try It!