API
The GRIDSMART API allows you to retrieve data and images from GRIDSMART Processors using HTTP. You can, for example, see camera images in any web browser, or even automate the retrieval of count and/or realtime data. You can also get the site history, current configuration, and camera status returned in XML (default) or JSON (by appending .json
to the request).
In the documentation below you will find several live links to specific API calls. These links will work only if you are connected to a configured GRIDSMART Processor over the local port. If you can connect to a remote GRIDSMART Processor, you can replace the IP address in those URLs appropriately and query your own site.
The GRIDSMART API requires a defined User-Agent in the request headers to return results. Browsers supply this with requests made from the address bar, but most programmatic solutions don't necessarily provide this header value natively.
Important Release Notes
Please see the special note regarding speed data and reporting at the end of this document.
We have made available some open source Python code that demonstrates interacting with the GRIDSMART API, in particular downloading and parsing traffic data from the GRIDSMART System.
With the GRIDSMART 6.4, the previously unused Confidence data element was removed from the count lines and new elements will be appended. If you parse count and/or realtime data files from the GRIDSMART System, we strongly advise that you write code that can gracefully handle the addition of new data elements. After GRIDSMART 6.4, we will not remove or re-order data elements in the count or realtime data lines; we may, however, append additional elements.
With GRIDSMART 6.0, the count file format and the structure of the downloaded data changed significantly. Please see Counts by date below for more detailed info.
API version
Get version of the GRIDSMART API that is running on the queried GRIDSMART Processor.
Example
http://ip:port/api
Parameters
None.
Returns
Plain text version number.
Camera image
Get an image for the specified camera.
Example
The best way to see an example camera image URL is to use the GRIDSMART Client. Select the site of interest and open Info on the Site Menu. The appropriate URLs can be found therein.
http://ip:port/api/camera/CAMERA_MAC_ADDRESS?SEND_NULL_IMAGE
Parameters
CAMERA_MAC_ADDRESS
: MAC address of camera (see Camera status below).SEND_NULL_IMAGE
(optional) : Send null camera image (question mark) for offline camera. Defaults to true.
Returns
JPEG encoded image.
Camera status
Get the current camera status of all known cameras.
Examples
http://ip:port/api/camera
http://ip:port/api/camera.json
Parameters
None.
Returns
XML or JSON string. Contains up to three collections of cameras: Active, Missing and/or Unknown. Active cameras are those that are configured and operating. Missing cameras are those that are configured but not operating. Unknown cameras are those that are not configured but are operating.
Client
Downloads the Client installer from the Processor. The version of the Client downloaded will correspond to the Processor Firmware.
Examples
http://ip:port/api/client
Parameters
None.
Returns
Client EXE installer
Counts available
Get list of dates for which count data is available. (Requires valid license for Counts Module.)
Example
http://ip:port/api/counts
http://ip:port/api/counts.json
Parameters
None.
Returns
XML or JSON string.
Counts by date
Get zip-compressed, raw data for requested dates. Available dates can be queried using the Counts available API. Requires that the Processor be licensed for the Performance Module or the now-deprecated Counts Module. If the Processor being queried is licensed for the Performance Module, the returned package will also include performance data files for the requested days.
Important Note: As of GRIDSMART 6.0, the count file format and the structure of the downloaded data have changed significantly; please continue reading for more detail or contact Support for further clarification.
Example
http://ip:port/api/counts/bydate/DATE?ZIPNAME
Parameters
None.
DATE
: Date in YYYY-MM-DD form.ZIPNAME
(optional): Name for zip file. Defaults tocounts.zip
.
Returns
Zip file containing counts folder structure as described below for the different versions.
v8 (new data types added with GRIDSMART 6.6)
In addition to events and realtime, the zip will have arrivals
and states
folders containing a YYYY-MM-DD.zip
file with a GUID.csv
for each zone. The arrivals file has a list of timestamps for arrivals for the zone GUID in the file name. The states file has a list of timestamps and the beginning and end state that the zone transitioned between for the zone GUID in file name. Please contact Support if you would like more detailed specifications on the contents of these files.
v8 (released with GRIDSMART 6.4)
Zipped folder structure: Returned zip archive contains one folder for each camera MAC. Inside that folder is one zipped YYYY-MM-DD.zip
. Unzipping that archive will produce a GUID.csv
for each zone, where the zone GUID can be found in the Site configuration for the appropriate revision, which contains columns as described below.
Additionally, with the Performance Module, the zip archive will contain two additional folders, events
and realtime
, each containing a YYYY-MM-DD.csv
file. The events file contains timestamps, codes, and data for certain system events such as reboot, publish, flash, and phase changes. The realtime file contains minute-by-minute data, the same as that returned by the Realtime data by phase API, but for each minute the entire day rather than just the past hour. Please contact Support if you would like more detailed specifications on the contents of these files.
Zone count file CSV columns: Count Version (8), Site Version, Local Timestamp (HHMMSS.f format), UTC Offset In Minutes, Turn, Vehicle Length in Feet, Vehicle Speed in MPH (uncalibrated), Light State, Seconds in Zone, Vehicles Remaining in Zone, Seconds of Light State, Seconds Since Green, Zone Recent Free Flow Speed (-1 if unavailable), Zone Calibration Free Flow Speed (-1 if unavailable)
v7 (released with GRIDSMART 6.0)
Zipped folder structure: Returned zip archive contains one folder for each camera MAC. Inside that folder is one zipped YYYY-MM-DD.zip
. Unzipping that archive will produce a GUID.csv
for each zone, where the zone GUID can be found in the Site configuration for the appropriate revision, which contains columns as described below.
Additionally, with the Performance Module, the zip archive will contain two additional folders, events
and realtime
, each containing a YYYY-MM-DD.csv
file. The events file contains timestamps, codes, and data for certain system events such as reboot, publish, flash, and phase changes. The realtime file contains minute-by-minute data, the same as that returned by the Realtime data by phase API, but for each minute the entire day rather than just the past hour. Please contact Support if you would like more detailed specifications on the contents of these files.
Zone count file CSV columns: Count Version (7), Site Version, Local Timestamp (HHMMSS.f format), UTC Offset In Minutes, Turn, Vehicle Length in Feet, Vehicle Speed in MPH (uncalibrated), Light State, Seconds in Zone, Vehicles Remaining in Zone, Confidence.
v4 (through GRIDSMART 5.4)
Zipped folder structure: Returned zip archive contains one folder for each camera MAC. Inside that folder is one GUID.csv
file for each zone, where the zone GUID can be found in the Site configuration for the appropriate revision.
Zone count file CSV columns: CountFileVersion (4.0), SiteVersion, UtcTimestamp, InternalVehicleId, InternalVehicleType, VehicleLengthFeet, VehicleSpeedMph (uncalibrated), Turn, AllowableTurns, SecondsInZone, SecondsSinceLastExit, EstimatedQueueLength, LightStateOnExit, SecondsSinceGreen, InternalFrameCount, DayOrNight
Older versions
Please contact Support for information on older count file formats.
Date-time
Get current date, time and timezone setting.
Example
http://ip:port/api/datetime
http://ip:port/api/datetime.json
Parameters
None.
Returns
XML or JSON string. Also includes list of possible timezones.
Diagnostic data
Get diagnostic data such as temperature, voltages, tracking mode, camera gain, camera exposure and system uptime.
Examples
http://ip:port/api/diagnosticdata
http://ip:port/api/diagnosticdata.json
Parameters
None.
Returns
XML or JSON string.
Hardware ID
Get the hardware identifier.
Examples
http://ip:port/api/system/hardwareid
http://ip:port/api/system/hardwareid.json
Parameters
None.
Returns
XML or JSON string.
Hardware info
Get the hardware identifier and serial number.
Examples
http://ip:port/api/system/hardwareinfo
http://ip:port/api/system/hardwareinfo.json
Parameters
None.
Returns
XML or JSON string.
History hash
Get SHA 256 hash of the site history. Can be cached and used to determine if the site history has changed since last checked.
Examples
http://ip:port/api/historyhash
http://ip:port/api/historyhash.json
Parameters
None.
Returns
XML or JSON string.
License file
Get the license file.
Example
http://ip:port/api/license
Parameters
None.
Returns
XML string or 404 if no license file exists. License file will contain information about licensed modules such as Performance or Performance Plus.
Log files (Deprecated in v19.3)
Get the log files.
Example
http://ip:port/api/logs
Parameters
None.
Returns
Zipped archive of the system log files that might be requested for technical support issues.
Network Settings
Get the network settings.
Example
http://ip:port/api/network/settings
http://ip:port/api/network/settings.json
Parameters
None.
Returns
XML or JSON string.
Network Reachability
Get the reachability of network services from the Server.
Example
http://ip:port/api/network/reachability
http://ip:port/api/network/reachability.json
Parameters
None.
Returns
XML or JSON string.
NTP Settings
Gets the NTP Settings being used on the processor.
Example
http://ip:port/api/ntp
http://ip:port/api/ntp.json
Parameters
None.
Returns
XML or JSON string.
Output states
Get states for each of the possible 64 outputs.
Examples
http://ip:port/api/outputstates
http://ip:port/api/outputstates.json
Parameters
None.
Returns
XML or JSON string. The integer value for the output states is 1 to indicate the output is ON, 0 to indicate OFF.
Phases
Get current phases.
Examples
http://ip:port/api/phases
http://ip:port/api/phases.json
Parameters
None.
Returns
XML or JSON string. Phase state is indicated as an integer from 0 to 5 with the enumeration {UNKNOWN=0, RED=1, YELLOW=2, NOT_GREEN=3, CURRENTLY_UNUSED=4, GREEN=5}.
Realtime data by phase
Get last hour realtime data for each phase. Requires Performance or Performance Plus Module. Historical data can be downloaded using the Counts by date API.
Example
http://ip:port/api/realtimedata/phase
http://ip:port/api/realtimedata/phase.json
Parameters
None.
Returns
XML or JSON string of realtime data for each of the 16 possible phases for each minute of the last hour. Data includes minute-by-minute arrays of arrivals, arrivals on green, green occupancy time (seconds), green time (seconds), greens received (usually 0 or 1), occupancy time (seconds), percent arrivals on green, red occupancy time (second), red time (seconds), and turning movement counts by turn type. The arrays are ordered from 0 to 59 minutes past the hour. Also included is a current snapshot of the zone that includes current green time (seconds) and estimated occupancy count (number of vehicles in zone).
Realtime data by zone
Get last hour realtime data for each zone. Requires Performance or Performance Plus Module.
Example
http://ip:port/api/realtimedata/zone
http://ip:port/api/realtimedata/zone.json
Parameters
None.
Returns
XML or JSON string of realtime data for each zone for each minute of the last hour. The zone is described with approach (ZoneApproach), zone name (ZoneName), assigned phases (ProtectedPhases, PermittedPhases), assigned outputs (Outputs), and assigned turn types (ZoneTurnType).
Data includes minute-by-minute arrays of Exits, GreenOccupancyTime (seconds), GreensReceived (usually 0 or 1), GreenTime (seconds), MedianSpeedKph (-1 indicates no data), MedianSpeedMph (-1 indicates no data), OccupancyTime (seconds), PercentArrivalsOnGreen, PercentArrivalsOnRed, RedOccupancyTime (seconds), RedTime (seconds), and turning movement counts by turn type (TurnsLeft, TurnsRight, TurnsThrough, TurnsUturn). The arrays are ordered from 0 to 59 minutes past the hour according to the processor local time, which is provided as the Timestamp field for each zone.
Also included is a current Snapshot of the zone that includes CurrentGreenTime (seconds), current MedianSpeedKph (-1 indicates no data), current MedianSpeedMph (-1 indicates no data), and estimated OccupancyCount (number of vehicles in zone).
Other fields that may appear represent unused and/or unsupported data that may be from legacy applications or preserved for future use.
Realtime total volume
Get total volume counts. (Requires valid license for Realtime Data Module.)
Example
http://ip:port/api/realtimedata/volume
http://ip:port/api/realtimedata/volume.json
Parameters
None.
Returns
XML or JSON string of total volume counts. The data is returned in a list of 96 15 minute intervals that are in order from 00:00 to 24:00. The first entry is for 00:00-00:15, the second is for 00:15-00:30, so on and so forth until 23:45-24:00.
Realtime approach volume
Get total volume counts by approach. (Requires valid license for Realtime Data Module.)
Example
http://ip:port/api/realtimedata/approachvolume
http://ip:port/api/realtimedata/approachvolume.json
Parameters
None.
Returns
XML or JSON string of total volume counts, grouped by approach. The data is returned in a 5 element dictionary, one for each approach plus unassigned. Each approach entry has a list of 96 15 minute intervals that are in order from 00:00 to 24:00. The first entry is for 00:00-00:15, the second is for 00:15-00:30, so on and so forth until 23:45-24:00.
Realtime volume data
Gets all volume data. (Requires valid license for Realtime Data Module.)
Example
http://ip:port/api/realtimedata/volumedata
http://ip:port/api/realtimedata/volumedata.json
Parameters
None.
Returns
XML or JSON string of total volume counts as well as volume counts for each approach. This is a combination of the realtime total volume and the realtime approach volume API calls.
Realtime zone volume
Gets total volume counts by zone. (Requires valid license for Realtime Data Module.)
Example
http://ip:port/api/realtimedata/zonevolume
http://ip:port/api/realtimedata/zonevolume.json
Parameters
None.
Returns
XML or JSON string of total volume counts, grouped by zone. The data is returned as a dictionary with each entry representing a zone. Each zone entry has a list of 96 15 minute intervals that are in order from 00:00 to 24:00. The first entry is for 00:00-00:15, the second is for 00:15-00:30, so on and so forth until 23:45-24:00.
Site configuration
Get the current site configuration.
Example
http://ip:port/api/site
http://ip:port/api/site.json
Parameters
None.
Returns
XML or JSON string.
Site configuration at revision
Get site configuration for the specified revision.
Examples
http://ip:port/api/site/REVISION
http://ip:port/api/site/REVISION.json
Parameters
REVISION
: Revision number of requested site configuration.
Returns
XML or JSON string.
Site history
Get full history of site configurations.
Examples
http://ip:port/api/history
http://ip:port/api/history.json
Parameters
None.
Returns
XML or JSON string.
Site ID
Get the site identifier.
Examples
http://ip:port/api/system/siteid
http://ip:port/api/system/siteid.json
Parameters
None.
Returns
XML or JSON string.
Site name
Get the site name that appears in the client (street1 & street2).
Examples
http://ip:port/api/sitename
http://ip:port/api/sitename.json
Parameters
None.
Returns
XML or JSON string.
Site revision info
Get site configuration information, including the site and publish data, for the specified revision.
Examples
http://ip:port/api/history/REVISION
http://ip:port/api/history/REVISION.json
Parameters
REVISION
: Revision number of requested site configuration.
Returns
XML or JSON string.
Vehicle zone states
Get states for each of the possible 64 vehicle zones according to the specified camera.
Examples
http://ip:port/api/zonestates/vehicle/CAMERA_MAC_ADDRESS
http://ip:port/api/zonestates/vehicle/CAMERA_MAC_ADDRESS.json
Parameters
CAMERA_MAC_ADDRESS
: MAC address of camera (see Camera status above).
Returns
XML or JSON string. The order of the zones in the returned value corresponds to the order of the zones in the current site configuration. The integer value for the zone state is a bit mask defined by the following enumeration {OFF = 0, ON = 1, LEARNING = 2, DETECTION = 4, TIME = 8, LATCHING = 16, LOSS_OF_VISIBILITY = 32, USER_SET = 256, USER = 512}
where USER_SET
implies the zone state was affected by a user and then the state of the USER
bit defines whether or not the user activated or deactivated the zone.
Speed Data and reporting in GRIDSMART
GRIDSMART has developed an approach to compute normalized speeds without resorting to complicated, error-prone, and potentially dangerous camera calibration methods. The user enters the approximate free flow speed for each zone in its Zone Options dialog. Generally, this should be approximately the posted speed limit, perhaps a little higher. The default value is 40mph, or 40kph if metric units have been selected in the Site Settings.
Why and how does GRIDSMART normalize speed?
The raw speed measurement computed by the Engine is subject to significant bias by very small camera tilt and/or road surface deviation from level. This, however, can be corrected statistically using a known, approximate free flow speed.
GRIDSMART observes the zones over a learning period of 14 days and equates the raw free flow speed during that time to the user-entered free flow speed to compute a normalization factor. The raw calibration free flow speed from the first 14 days, along with the most recent free flow speed over the last 14 days, are both recorded in each count line as noted in the count file documentation. Speeds written to the realtime data files and/or returned by the realtime data APIs are already normalized. Note that the computed normalization can be applied to generate accurate speed reports on historical data. Also note that a value of -1 for any speed data element means that no speed data is available.
Speed Reports
Speed reports are done by cycle for stop-line zones - i.e., those assigned to phases - with a user configurable Start-Up Lost Time. For zones without assigned phases, the speed reports are presented using the selected time interval. No data is shown for cycles or intervals with less than 3 measurements. Speed reports are not shown for zones without allowed thru movements.