GoRoute API Documentation
GoRoute is AttriX's routing and delivery management system that integrates your TMS with Geotab devices. Send routes to drivers, receive real-time status updates, exchange messages, and collect proof of delivery data.
GoRoute connects your Transportation Management System (TMS) with drivers in the field via Geotab devices. Routes published to GoRoute appear on drivers' devices, and all status changes, completed activities, and messages flow back to your system in real-time.
Key Capabilities
- 📍 Route Management - Send waypoints to drivers
- 📊 Status Updates - OTW, Arrived, Departed tracking
- ✅ Activity Completion - Signatures, photos, forms
- 💬 Messaging - Two-way driver communication
- 📄 Documents - Receive uploaded files from drivers
- 🔔 Real-time Sync - Instant updates via webhooks
Authentication
GoRoute uses Geotab credentials for authentication. All API calls include database and user identification.
All communication must occur over HTTPS. Your TMS endpoints (in Push Mode) must be publicly accessible and secured with valid SSL certificates.
Common Parameters
| Parameter | Description | Example |
|---|---|---|
database |
Your Geotab database name | acme_transport |
geotabUserId |
The Geotab user ID for a specific driver | b4CE1BF8 |
Integration Modes
GoRoute supports two integration approaches. Choose based on your infrastructure and requirements.
🔄 Poll Mode
Simpler SetupYour TMS polls AttriX endpoints at regular intervals to fetch updates and push route changes.
Advantages
- ✅ No public endpoints required
- ✅ Works behind firewalls
- ✅ Simpler to implement
- ✅ You control update frequency
You Will Use
- POST
/api/go-route/poll/route/{database}/{driver} - GET
/api/go-route/poll/route-changes/{database}/{fromDate} - GET
/api/go-route/poll/messages/{database}/{fromDate} - POST
/api/go-route/message/{database}/{driver}
⚡ Push Mode
Real-timeAttriX pushes updates to your TMS endpoints in real-time via webhooks.
Advantages
- ✅ Instant updates
- ✅ Lower latency
- ✅ Event-driven architecture
- ✅ No polling overhead
You Will Implement
- GET
{your-base}/waypoints - POST
{your-base}/waypoints/{id} - POST
{your-base}/activities/{id} - POST
{your-base}/message
Waypoint
A destination to visit along a route. Waypoints are presented in order to drivers.
Properties
| Property | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Unique identifier for this waypoint. Numbers are accepted but treated as strings. |
name |
string | Yes | Waypoint description shown to the driver (usually customer name or location) |
address |
string | Yes | Address for this waypoint. If lat/lon omitted, must be accurate for geocoding. |
vehicleName |
string | No | The name of the vehicle planned for this route |
lat |
string | No | Latitude coordinate. Preferred but not required if address is accurate. |
lon |
string | No | Longitude coordinate. Preferred but not required if address is accurate. |
activities |
Activity[] | No | List of activities to perform once on site. Can be empty. |
trailer1Name |
string | No | Assigned trailer name for the trip |
trailer2Name |
string | No | Assigned 2nd trailer name if applicable |
phoneNumber |
string | No | Contact phone number at this waypoint |
notBefore |
string | No | Earliest arrival time (ISO8601 Zulu/UTC) |
notBeforeLocal |
string | No | Earliest arrival time (ISO8601 local timezone) |
notAfter |
string | No | Latest arrival time (ISO8601 Zulu/UTC) |
notAfterLocal |
string | No | Latest arrival time (ISO8601 local timezone) |
note |
string | No | Additional information for the driver |
noteHtml |
string | No | HTML-formatted notes (no JS, avoid fancy CSS) |
ref |
string | No | Internal reference for this trip |
po |
string | No | Purchase order number |
pb |
string | No | Pro bill number |
shipper |
string | No | Shipper for this trip |
consignee |
string | No | Consignee for this trip |
seal1 |
string | No | Seal number on 1st trailer |
seal2 |
string | No | Seal number on 2nd trailer |
autoStatusRadius |
string | No | Override km radius for auto status (0.5 = 500m) |
bumpable |
boolean | No | Allow bump requests for this waypoint |
navigateOnExit |
boolean | No | Auto-open routing app on waypoint OUT |
copilotProfile |
string | No | CoPilot routing profile to use |
lateStatus |
string | No | Late status: normal, late_carrier, late_consignee, late_shipper, late_weather_traffic |
startTime |
string | No | OTW event time (ISO8601 Zulu), null if not started |
arrivalTime |
string | No | IN event time (ISO8601 Zulu), null if not arrived |
departureTime |
string | No | OUT event time (ISO8601 Zulu), null if not departed |
driverActivities |
string[] | No | List of activity actions the driver can publish for this waypoint |
Activity
An action or task to complete at a waypoint. Activities are completed after arrival (IN) and before departure (OUT).
DONE
CANCELLED
pickup
drop
switch
stop
pin-trailer
drop-trailer
dispatch
customs
Properties
| Property | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Unique identifier for this activity. Numbers are accepted but treated as strings. |
action |
string | Yes | Action type: pickup, drop, switch, stop, pin-trailer, drop-trailer, dispatch, customs |
info |
string | No | Description of what is expected (trailer name for pin/drop, commodity for pickup/drop) |
label |
string | No | Custom label for this activity (defaults to translated action) |
outfields |
Outfield[] | No | List of outfields to fill when completing. Can be empty. |
note |
string | No | Extra notes for the driver |
noteHtml |
string | No | HTML-formatted notes (no JS, avoid fancy CSS) |
infoHtml |
string | No | HTML-formatted info display |
signatureRequired |
boolean | No | If true, signature required to complete. Default false. |
signatureMode |
string | No | How the signature is delivered back. "base64" (default): GoRoute posts the raw PNG data-URI in the signature field. "signed_url": GoRoute generates a signed PDF via its PDF microservice and posts a short-lived GCS URL in signature_url instead. |
signatureHtml |
string | No | HTML content for signature screen summary |
signatureDocuments |
object[] | No | BETA BETA (in spec, subject to change). Only used when signatureMode is "signed_url". One entry per POD document to produce, each { id, html, externalRef }: id identifies the document within the activity and is echoed back, html is the body printed on that document (same restricted HTML as signatureHtml), externalRef is the name the finished PDF should be filed under. A stop covering several orders handed over together is signed once and produces one PDF per entry. Omit the field for the ordinary single-document case. When supplied, every document must be produced or the driver is blocked — no partial filing. |
signature |
string | No | Base64 PNG data-URI posted back when signatureMode is "base64" (null if not completed or if signatureMode is "signed_url") |
completionTime |
string | No | Completion timestamp (ISO8601 Zulu), null if not completed |
allowCompletionOverride |
boolean | No | Allow driver to edit completion time. Default false. |
inspectionRequired |
string | No | Force inspection before completion: "truck" or "trailer" |
Outfield
A data field to collect from the driver when completing an activity.
text
email
integer
float
boolean
selection
time
datetime
date
image
document
Properties
| Property | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Unique identifier for this outfield within the activity |
label |
string | Yes | Field label shown to the driver |
type |
string | Yes | Field data type (see types list above) |
required |
boolean | Yes | If true, driver cannot complete activity without filling this field. Never mark boolean fields as required. |
value |
string | No | Value as previously posted by GoRoute, or null if not filled |
choices |
string[] | No | Required for selection type. List of possible values. |
documentType |
string | No | For document type: POD, BOL, or fuel-receipt |
lookForStrings |
string[] | No | For document type: strings to look for in scanned document |
group |
string | No | Group name for applying min/max validation across fields |
groupMin |
integer | No | Minimum fields in group that must have values |
groupMax |
integer | No | Maximum fields in group that can have values |
requiredIf |
string | No | Name of boolean outfield that makes this field required when checked |
visibleIf |
string | No | Name of boolean outfield that makes this field visible when checked |
hideFromSig |
boolean | No | If true, this outfield's name and value will not be shown on the activity's signature screen. Default is false when omitted — all outfields are shown on the signature screen by default. |
documentIds |
string[] | No | BETA BETA (in spec, subject to change). Only applies when the activity carries signatureDocuments. Scopes this answer to particular documents: list the id of each document it belongs on and it is printed on those PDFs only. Omitted means it is printed on every document of the activity. The field stays visible on the signature screen either way — the same person signs for all of them. |
Driver Activity Template
Defines an action type that drivers can proactively publish themselves.
Properties
| Property | Type | Required | Description |
|---|---|---|---|
action |
string | Yes | Internal identifier for this activity type. TMS must accept published activities of this type. |
description |
string | Yes | Brief name or description shown to the driver |
durationRequired |
boolean | Yes | If true, driver must submit duration in minutes |
photoRequired |
boolean | Yes | If true, driver must upload a picture |
infoRequired |
boolean | Yes | If true, driver must supply textual information |
signatureRequired |
boolean | Yes | If true, driver must submit a signature |
midTrip |
boolean | Yes | If true, can be published between waypoints (waypointId will be null) |
outfields |
Outfield[] | No | List of outfields to fill when completing. Can be empty. |
AttriX Endpoints
These endpoints are hosted by AttriX. Your TMS calls these to interact with GoRoute.
https://goroute.attrix.ca/api/go-route/notify/{database}/{driver}
Notify Route Changed
Notify AttriX of a route change for a driver. Routes will be resynched if needed. Used in Push Mode only.
URL Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
database |
string | Yes | The Geotab database name Example: acme_transport |
driver |
string | Yes | The Geotab user ID for this driver Example: b4CE1BF8 |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
force |
boolean | No | Force a hard refresh (default: false) Example: true |
Response Example
"ok"
https://goroute.attrix.ca/api/go-route/message/{database}/{driver}
Send Message to Driver
Send a message from the TMS to a driver using GoRoute. Can be used in both Poll Mode and Push Mode implementations.
This endpoint can be used in both Poll Mode and Push Mode implementations.
URL Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
database |
string | Yes | The Geotab database name Example: acme_transport |
driver |
string | Yes | The Geotab user ID, or "all" for broadcast Example: b4CE1BF8 |
Body Parameters
Content-Type: multipart/form-data
| Parameter | Type | Required | Description |
|---|---|---|---|
message |
string | Yes | The message text to deliver Example: Please call dispatch when you arrive |
language |
string | No | Language code (en/fr). Auto-detected if omitted Example: en |
files[] |
file[] | No | File attachments (max 10MB each) |
Response Example
"ok"
Poll Mode Endpoints
Use these endpoints if you chose Poll Mode integration. Your TMS calls these at regular intervals.
https://goroute.attrix.ca/api/go-route/poll/route-changes/{database}/{fromDate}
Get Route Changes
Fetch updates to waypoints since the last sync. Returns an object where keys are driver IDs and values are arrays of changed waypoints.
URL Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
database |
string | Yes | The customer database name Example: acme_transport |
fromDate |
string | Yes | Last sync timestamp (ISO8601 Zulu) Example: 2024-01-15T01:23:45Z |
X-Date-Time: The server timestamp to use as fromDate in next request
Response
Returns Waypoint[] . See data model for field details.
https://goroute.attrix.ca/api/go-route/poll/route/{database}/{driver}
Post Route
Send an updated route to AttriX for a driver. Replaces /notify and /waypoints endpoints for poll implementations.
URL Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
database |
string | Yes | The customer database name Example: acme_transport |
driver |
string | Yes | The Geotab user ID Example: b4CE1BF8 |
Body Parameters
Content-Type: application/json
| Parameter | Type | Required | Description |
|---|---|---|---|
waypoints |
Waypoint[] | Yes | Array of waypoints for this driver |
https://goroute.attrix.ca/api/go-route/poll/messages/{database}/{fromDate}
Get Messages
Get messages received from drivers since the last sync.
URL Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
database |
string | Yes | The customer database name Example: acme_transport |
fromDate |
string | Yes | Last sync timestamp (ISO8601 Zulu) Example: 2024-01-15T01:23:45Z |
X-Date-Time: The server timestamp to use as fromDate in next request
https://goroute.attrix.ca/api/go-route/poll/templates/{database}
Post Driver Activity Templates
Send updated driver activity templates. Replaces all previous templates for this database.
URL Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
database |
string | Yes | The customer database name Example: acme_transport |
Body Parameters
Content-Type: application/json
| Parameter | Type | Required | Description |
|---|---|---|---|
(array) |
DriverActivityTemplate[] | Yes | Array of driver activity templates |
https://goroute.attrix.ca/api/go-route/poll/files/{database}
Upload File
Upload a file to attach to a waypoint. Returns a file ID to use in post-route.
URL Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
database |
string | Yes | The customer database name Example: acme_transport |
Body Parameters
Content-Type: multipart/form-data
| Parameter | Type | Required | Description |
|---|---|---|---|
file |
file | Yes | The file to upload |
https://goroute.attrix.ca/api/go-route/poll/get-work-summary/{database}/{geotabUserId}
Get Work Summary
Get a summary of work done in the last 7 days for a driver.
URL Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
database |
string | Yes | The customer database name Example: acme_transport |
geotabUserId |
string | Yes | The Geotab user ID Example: b4CE1BF8 |
Push Mode - Your Endpoints
If you chose Push Mode, you must implement these endpoints. GoRoute will call them to deliver updates.
The base URL is configured in your AttriX account (e.g., https://api.yourcompany.com/goroute).
Your endpoints must be publicly accessible via HTTPS with valid SSL certificates. The paths shown below are appended to your configured base URL.
{your-base-url}/waypoints
Get Waypoints
Main endpoint by which GoRoute fetches an up-to-date route for a driver. Order matters - waypoints are presented in array order.
You implement this endpoint. GoRoute calls it when drivers need route updates.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
geotabUserId |
string | Yes | The Geotab user ID for this driver Example: b4CE1BF8 |
database |
string | Yes | The Geotab database name Example: acme_transport |
force |
boolean | No | Hard reload flag from notify or user action Example: true |
manual |
boolean | No | Driver manually triggered refresh Example: false |
Response
Returns Waypoint[] . See data model for field details.
{your-base-url}/waypoints/{id}
Update Waypoint
Receive waypoint status updates. Expect OTW, IN, OUT in order. Update start_time (OTW), arrival_time (IN), departure_time (OUT).
You implement this endpoint. GoRoute calls it when waypoint status changes.
URL Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Yes | The waypoint ID from GET /waypoints Example: 5 |
Body Parameters
Content-Type: multipart/form-data
| Parameter | Type | Required | Description |
|---|---|---|---|
geotabUserId |
string | Yes | The Geotab user ID Example: b4CE1BF8 |
database |
string | Yes | The Geotab database name Example: acme_transport |
status |
string | Yes | New status: OTW, IN, OUT, or LATE Example: IN |
eventTime |
string | Yes | Event timestamp (ISO8601 Zulu) Example: 2024-01-15T14:30:00.000Z |
eventTimeLocal |
string | Yes | Event timestamp (ISO8601 local) Example: 2024-01-15T09:30:00.000-05:00 |
distance |
number | No | Distance from waypoint in km Example: 14.4 |
geotabDeviceId |
string | No | Current vehicle device ID Example: b38A |
odometer |
number | No | Vehicle odometer in km Example: 26568.7 |
lat |
number | No | Current latitude Example: 45.5518227 |
lon |
number | No | Current longitude Example: -73.219017 |
lateStatus |
string | No | Late reason (if status=LATE) Example: late_weather_traffic |
eta |
string | No | ETA to next waypoint (if status=OTW) Example: 2024-01-15T15:00:00.000Z |
{your-base-url}/activities/{id}
Update Activity
Receive activity completion updates. Sent after waypoint IN and before OUT. Return 422 with field errors to reject.
You implement this endpoint. GoRoute calls it when activities are completed.
URL Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Yes | The activity ID from GET /waypoints Example: 8 |
Body Parameters
Content-Type: multipart/form-data
| Parameter | Type | Required | Description |
|---|---|---|---|
geotabUserId |
string | Yes | The Geotab user ID Example: b4CE1BF8 |
database |
string | Yes | The Geotab database name Example: acme_transport |
waypointId |
integer | Yes | Parent waypoint ID Example: 5 |
status |
string | Yes | Status: DONE or CANCELLED Example: DONE |
eventTime |
string | Yes | Event timestamp (ISO8601 Zulu) Example: 2024-01-15T14:35:00.000Z |
eventTimeLocal |
string | Yes | Event timestamp (ISO8601 local) Example: 2024-01-15T09:35:00.000-05:00 |
signature |
string | No | Base64 PNG data-URI of the drawn signature. Present only when signatureMode is "base64" (the default). Example: data:image/png;base64,... |
signature_url |
string | No | Short-lived GCS signed URL pointing to the generated PDF (~24 h). Present only when signatureMode is "signed_url". Store or forward promptly — the receiver can scan a QR code to retrieve their copy. When the activity carried several signatureDocuments this is the first document's URL, so a TMS that files one POD per activity needs no further handling. Example: https://storage.googleapis.com/goroute-pods/... |
signature_documents |
object[] | No | BETA BETA (in spec, subject to change). Sent only when the activity carried signatureDocuments. One entry per produced document — { id, ref, url } where id is the identifier you supplied, ref is the externalRef to file that PDF under, and url is its short-lived link. Posted as form fields signature_documents[0][id], signature_documents[0][ref], signature_documents[0][url], signature_documents[1][id], and so on. All of them came from one signature. Example: [{"id":"POD-1","ref":"PO-88421","url":"https://storage.googleapis.com/..."}] |
outfields |
object | No | Collected field values as name:value pairs Example: {"odometer": 1213} |
odometer |
number | No | Vehicle odometer in km Example: 26570.2 |
lat |
number | No | Current latitude Example: 45.5518227 |
lon |
number | No | Current longitude Example: -73.219017 |
cancelReason |
string | No | Reason if CANCELLED Example: closed |
cancelReasonNotes |
string | No | Additional cancel notes Example: Location was closed early |
{your-base-url}/activities
Publish Activity
Receive driver-initiated activities. Sent after waypoint IN and before OUT (or mid-trip if midTrip=true).
You implement this endpoint. GoRoute calls it when drivers add unplanned activities.
Body Parameters
Content-Type: multipart/form-data
| Parameter | Type | Required | Description |
|---|---|---|---|
geotabUserId |
string | Yes | The Geotab user ID Example: b4CE1BF8 |
database |
string | Yes | The Geotab database name Example: acme_transport |
waypointId |
integer | No | Parent waypoint ID (null if midTrip) Example: 5 |
activity_id |
string | Yes | GoRoute-generated activity ID Example: 5-d-1 |
action |
string | Yes | Activity type from templates Example: wait-time |
info |
string | No | Driver-supplied info |
duration |
number | No | Not sent as a body parameter. A template declaring durationRequired makes GoRoute collect the duration as an outfield named "duration" (integer, minutes), so it arrives inside outfields. photoRequired likewise becomes a "photo" outfield, posted to receive-document. |
nextWaypointId |
string | No | The next waypoint the driver is heading to. Sent so a mid-trip activity (waypointId null) can still be placed in the day, between the previous stop and that one. Example: 6 |
start_time |
string | No | Start timestamp (ISO8601 Zulu). Sent when the activity was started before being completed. Example: 2024-01-15T14:00:00.000Z |
completion_time |
string | Yes | Completion timestamp (ISO8601 Zulu) Example: 2024-01-15T14:45:00.000Z |
signature |
string | No | Base64 signature if required |
outfields |
object | No | Collected field values |
{your-base-url}/driver-activity-templates
Get Driver Activity Templates
Return the list of possible driver-initiated activities for this customer.
You implement this endpoint. GoRoute calls it to get available activity types.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
database |
string | Yes | The Geotab database name Example: acme_transport |
Response
Returns DriverActivityTemplate[] . See data model for field details.
{your-base-url}/document
Receive Document
Receive files for image outfields. Sent before activity DONE event. Document outfields with advanced scanning are sent as URLs in update-activity instead.
You implement this endpoint. GoRoute calls it when drivers upload images.
Body Parameters
Content-Type: multipart/form-data
| Parameter | Type | Required | Description |
|---|---|---|---|
geotabUserId |
string | Yes | The Geotab user ID Example: b4CE1BF8 |
database |
string | Yes | The Geotab database name Example: acme_transport |
activityId |
integer | Yes | The activity ID Example: 8 |
waypointId |
integer | Yes | The waypoint ID Example: 5 |
outfield |
string | Yes | The outfield name requesting the image Example: pod |
files[] |
file[] | Yes | Image file(s) uploaded |
{your-base-url}/message
Receive Message
Receive messages sent from drivers using GoRoute.
You implement this endpoint. GoRoute calls it when drivers send messages.
Body Parameters
Content-Type: multipart/form-data
| Parameter | Type | Required | Description |
|---|---|---|---|
driver |
string | Yes | The Geotab user ID Example: b4CE1BF8 |
database |
string | Yes | The Geotab database name Example: acme_transport |
message |
string | Yes | The message text Example: Running 30 minutes late |
{your-base-url}/bump-request
Bump Request
Receive a request to bump a waypoint in priority order. If accepted, send a notify.
You implement this endpoint. GoRoute calls it when drivers request to reorder stops.
Body Parameters
Content-Type: multipart/form-data
| Parameter | Type | Required | Description |
|---|---|---|---|
geotabUserId |
string | Yes | The Geotab user ID Example: b4CE1BF8 |
database |
string | Yes | The Geotab database name Example: acme_transport |
waypointId |
integer | Yes | The waypoint ID to bump Example: 7 |
{your-base-url}/shipment-logs
Get Shipment Logs
Return currently loaded shipment document numbers. Feature flag enabled. Return 503 if unknown.
Optional endpoint. Only implement if shipment log tracking is enabled.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
database |
string | Yes | The Geotab database name Example: acme_transport |
geotabUserId |
string | Yes | The Geotab user ID Example: b4CE1BF8 |