Service version: 1
Last edit: 2022.08.25

Purpose

The Traffic Density service gives insight to the amount of data available for an area. This service is ** asynchronous**. There are two endpoints consuming two types of requests. The first one is only for ordering jobs with POST requests. In its response the user receives a jobId , which should be used in the second endpoint with a GET request to the check job's status. When the job is successfully finished, the user via the response will receive links to download results.

Using this service

There are some important notes about using this service:

  • The latitude and longitude coordinates are in EPSG4326 / WGS84 format for both input and output. Other coordinate systems are not supported.
  • The current API version is 1.
  • The maximum length of date range is 366 days.
  • The maximum number of time sets is 24.
  • Network size, calculated as size of bounding box of defined geometry, cannot be greater than 20 000 km².
  • As the service is asynchronous it can take a while before results are available, depending on how busy the service is. Do not repost your request multiple times if you do not get feedback within seconds, we will ensure that the results are delivered.
  • At the same time you can have only 5 jobs in CALCULATIONS and SCHEDULED statuses per each developer key. When you reach this limit you can still create new jobs as they will be queued until at least one of currently running jobs is done.

Request data

HTTPS method: POST

Constants and parameters enclosed in curly brackets { } must be replaced with their values.

URL format

POST
URL request format
https://{baseURL}/traffic/trafficstats/trafficdensity/{versionNumber}?key={Your_API_Key}

Required headers

Header

Value

Content-Type

application/json

Request parameters

The following table describes all of the parameters that can be used in a request. Required parameters _ must_ be used or the call will fail. Optional parameters may be used.

Required parameters

Description

baseURL
string

Base URL for calling the API.
Value: api.tomtom.com

versionNumber
string

Service version number.
Value: The current value is 1.

key
string

Authorization key for access to the API.
Value: Your valid API Key.

POST body request parameters

The following JSON parameters refer to the POST request body.

Required parameters

Description

jobName
string

Job name. Given for the user's convenience.
Value: The job name.

distanceUnit
string

Base unit used for distance and speed.
Values: KILOMETERS , MILES

network
object

Network for calculations. See the Structure of network section.
Value:

dateRange
object

Range of dates for calculations. See the Structure of dateRange section.
Value: An object containing dates.

timeSets
array

Time sets for calculations. See the Structure of timeSets section.
Value: An array containing timeSets.

Optional parameters

Description

mapVersion
string

What map should be used. A list of currently available maps in all Traffic Stats API services can be checked at Available Maps.
Value: Example: 2021.12
You can skip this parameter and we will pick map version for you based on selected date ranges in request.

acceptMode
string

Defines whether the job should be accepted manually or automatically.
Default value: AUTO
Other value: MANUAL

averageSampleSizeThreshold
integer

If the average sample size for any combination of network, date range, and time set will be lower than the given value, then the output will not be generated and the job will be moved into the REJECTED state and user will not be charged for such report. If not specified the output will be always generated no matter how many samples were available.
Value: A sample size.

Structure of network

Required parameters

Description

name
string

Name of the network.
Value: A network name.

timeZoneId
string

In which time zone all times are given.
Value: A time zone like: Europe/Amsterdam or UTC. See time zone names from the tz database for more.

frcs
array (of integers)

Functional road classes.
Value: range 0-8

geometry
object

Geometry of the network in GeoJSON format. Supported geometry types are Polygon and MultiPolygon. See RFC 7946.
Value: Geometry types.

Optional parameters

Description

probeSource
object

Determines from what devices data will be used.
Default value: PASSENGER
Other values:

  • PASSENGER - Passenger Vehicles

  • TELEMATICS - Fleet Management Vehicles

  • ALL - All Vehicles (Passenger and Fleet combined)

boundingBox
object

Bounding box of the network. Mutually exclusive with geometry. Deprecated, please use geometry.
Value: An object containing a boundingBox.

Structure of dateRange

Parameter

Description

name
string

Date range name. Given for the user's convenience.
Value: A date range name. For example: "Last working week of January".

from
date

The date from (inclusive).
Value: Date in the format: YYYY-MM-DD

to
date

The date to (inclusive).
Value: Date in the format: YYYY-MM-DD.

exclusions
array

List of days excluded from date range.
Value: List of dates in the format: YYYY-MM-DD.

excludedDaysOfWeek
array

List of days of the week to be excluded.
Values:

  • MON

  • TUE

  • WED

  • THU

  • FRI

  • SAT

  • SUN

Structure of timeSets

Required parameters

Description

name
string

Time set name.
Value: Name given for the user's convenience.

timeGroups
array

Time groups in the time set.
Values:

  • days : Days of week for the time group list of values:

    • MON

    • TUE

    • WED

    • THU

    • FRI

    • SAT

    • SUN

  • times : Time ranges for time group, list of values in format: HH:mm-HH:mm (required).

POST body request example - JSON

POST
POST request body example - JSON
1{
2 "jobName": "Test job",
3 "distanceUnit": "KILOMETERS",
4 "mapVersion": "2021.12",
5 "acceptMode": "AUTO",
6 "network": {
7 "name": "test",
8 "geometry": {
9 "type": "MultiPolygon",
10 "coordinates": [
11 [
12 [
13 [19.44305, 51.75612],
14 [19.44992, 51.75612],
15 [19.44992, 51.75947],
16 [19.44305, 51.75947],
17 [19.44305, 51.75612]
18 ]
19 ],
20 [
21 [
22 [19.45011, 51.75789],
23 [19.45687, 51.75789],
24 [19.45687, 51.75946],
25 [19.45011, 51.75946],
26 [19.45011, 51.75789]
27 ]
28 ]
29 ]
30 },
31 "timeZoneId": "Europe/Warsaw",
32 "frcs": ["0", "1", "2", "3", "4", "5", "6", "7", "8"],
33 "probeSource": "ALL"
34 },
35 "dateRange": {
36 "name": "Last working week of January",
37 "from": "2021-01-25",
38 "to": "2021-01-29",
39 "exclusions": ["2021-01-26", "2021-01-27"]
40 },
41 "timeSets": [
42 {
43 "name": "Monday morning hour",
44 "timeGroups": [
45 {
46 "days": ["MON"],
47 "times": ["7:00-8:00"]
48 }
49 ]
50 }
51 ]
52}

Response data

In response to the request a jobId is provided, which is required for further communication about the query. A JSON response content example:

POST
Response body - JSON
1{
2 "jobId": "677",
3 "responseStatus": "OK",
4 "messages": ["Job created. Processing started."]
5}

Check job status

When a job has been initiated via the API request, it is possible to check the status.

JSON request

GET
Job status URL request example
https://{baseURL}/traffic/trafficstats/status/{versionNumber>/{job_id}?key={Your_API_Key}

Job status parameters

The table below describes all of the parameters that can be used in a request. Required parameters must be used or the call will fail. Optional parameters may be used.

Parameter

Description

baseURL
string

Base URL for calling the API.
Value: api.tomtom.com

versionNumber
string

Service version number.
Value: The current value is 1.

jobId
integer

The job ID.
Value: Example: 123

key
string

Authorization key for access to the API.
Value: Your valid API Key.

JSON response

Response body - JSON
1{
2 "jobId": "{job_id}",
3 "jobState": "{job_status}",
4 "responseStatus": "OK"
5}

Job status flow

During the process there are different stages applicable. Via the get state request you can see what the state of your job is. The following table shows the different stages of the process.

Status

Description

NEW

The job is waiting for mapmatching to start.

SCHEDULED

Job is scheduled for calculations.

MAPMATCHING

Mapmatching is in progress.

MAPMATCHED

Mapmatching is done and the job is waiting for Geobase reading.

READING_GEOBASE

Geobase reading is in progress.

CALCULATIONS

Calculations are in progress.

NEED_CONFIRMATION

Occurs only if manual acceptance mode was used. The results are waiting to be accepted or rejected. In this state sample summaries for the job are provided when checking job status.

DONE

Calculations are done. The results are waiting to be downloaded.

ERROR

The job stopped due to the fact that something went wrong. This can occur at any place in the flow.

REJECTED

The job is rejected. During processing it turned out that the job exceeds set limits, bounding box cannot be processed (it is effectively empty because there are no roads with selected frcs or it is defined on area which is not supported), or there are less samples than required (see averageSampleSizeThreshold ). This can occur at any place in the flow.

CANCELLED

The job is cancelled. The owner of the job stopped processing it. It can be done at any time before the job is processed.

EXPIRED

The job is older than a year and all data has been removed.

Confirming job results

When the job's state is NEED_CONFIRMATION , then a summary URL will be available in the response.

Response with summary URL - JSON
1{
2 "jobId": "{job_id}",
3 "jobState": "NEED_CONFIRMATION",
4 "sampleDetailsUrl": "{url_for_sample_details_file}",
5 "responseStatus": "OK",
6 "messages": ["For more details see: {url_for_sample_details_file}"]
7}

A sample details file looks like this:

1{
2 "summaries": [
3 {
4 "locationName": "test",
5 "dateRangeName": "Last working week of January",
6 "timeSetName": "Monday morning hour",
7 "averageSampleSize": 17.06,
8 "frcDetails": [
9 {
10 "frc": 0,
11 "averageSampleSize": 0,
12 "networkLength": 0,
13 "distanceUnit": "KILOMETERS"
14 },
15 {
16 "frc": 1,
17 "averageSampleSize": 0,
18 "networkLength": 0,
19 "distanceUnit": "KILOMETERS"
20 },
21 {
22 "frc": 2,
23 "averageSampleSize": 0,
24 "networkLength": 0,
25 "distanceUnit": "KILOMETERS"
26 },
27 {
28 "frc": 3,
29 "averageSampleSize": 0,
30 "networkLength": 0,
31 "distanceUnit": "KILOMETERS"
32 },
33 {
34 "frc": 4,
35 "averageSampleSize": 30.08,
36 "networkLength": 5.41,
37 "distanceUnit": "KILOMETERS"
38 },
39 {
40 "frc": 5,
41 "averageSampleSize": 11.96,
42 "networkLength": 0.78,
43 "distanceUnit": "KILOMETERS"
44 },
45 {
46 "frc": 6,
47 "averageSampleSize": 5.63,
48 "networkLength": 1.22,
49 "distanceUnit": "KILOMETERS"
50 },
51 {
52 "frc": 7,
53 "averageSampleSize": 0.77,
54 "networkLength": 4.55,
55 "distanceUnit": "KILOMETERS"
56 },
57 {
58 "frc": 8,
59 "averageSampleSize": 0,
60 "networkLength": 0,
61 "distanceUnit": "KILOMETERS"
62 }
63 ]
64 }
65 ]
66}

If you wish to accept the job make the following request:

POST
URL request example - accept the job
https://{baseURL}/traffic/trafficstats/status/{versionNumber}/{job_id}/accept?key={Your_API_Key}

Otherwise reject the job with the following request:

POST
URL request example - reject the job
https://{baseURL}/traffic/trafficstats/status/{versionNumber}/{job_id}/reject?key={Your_API_Key}

Response data

Final DONE response

1{
2 "jobId":"{job_id}",
3 "jobState":"DONE",
4 "responseStatus":"OK",
5 "urls":{
6 "for_json_result_file}",
7 "{url_for_geojson_result_file}",
8 "{url_for_shape_result_file}"
9 ]
10}

Results

Output of Traffic Density is available in the following formats:

JSON and GeoJSON results are provided in a gzip compressed format. SHAPE files are packed into zip archives. If you want to get an example of these files please click the applicable link names.

JSON result description

Field(s)

Description

jobName
string

From the request.
Value: As in the request.

creationTime
datetime

The job creation time.
Value: Timestamp in the format: yyyy-MM-ddTHH:mm:ss.SSSZ

userPreference
object

Requested preference.
Value: distanceUnit as in the request.

dateRanges
array

From the request
Values:

  • @id - Helper reference for further use (in network.segmentResults.segmentProbeCounts).

  • name, from, to, exclusions - as in request.

  • excludedDaysOfWeek - as in request, value from: MONDAY , TUESDAY , WEDNESDAY , THURSDAY , FRIDAY , SATURDAY , SUNDAY.

timeSets
array

From the request.
Value: See the Structure of timeSets section.

List

network
object

Data for requested network.
Value: See the Structure of network section.

Structure of timeSets

Field(s)

Description

@id
integer

Helper reference for further use (in network.segmentResults.segmentProbeCounts).

name
string

From and as in the request.

dayToTimeRanges
array

Time ranges from the request, grouped per day of the week:

  • dayOfWeek : Day of the week for the time group, value from: MONDAY , TUESDAY , WEDNESDAY , THURSDAY , FRIDAY , SATURDAY , SUNDAY.

  • timeRanges : Time ranges for the time group, a list of values in the format: HH:mm-HH:mm.

Structure of network

Field

Description

networkName , zoneId , probeSource
string

From and as in the request

mapsVersions
string

Version of maps used for map matching.

segmentResults
string

Data for each segment in given area. See the segmentResults section.

Structure of segmentResults

Field

Description

segmentId
long

Depending on the map on which job is processed it can be a MultiNet Segment ID (optionally prefixed by - and in such case there could be two segmentId's in the results whose presence indicates both directions: the negative value and the positive value) or a long numeric value.

newSegmentId
string

Depending on the map on which job is processed it can be a MultiNet-R Segment ID (optionally prefixed by - and in such case there could be two newSegmentId's in the results whose presence indicates both directions: one prefixed by - and other not) or stringified numeric value.

speedLimit
integer

Speed limit (in kmph or mph according to userPreference ).

frc
integer (0-8)

Functional Road Class.

streetName
string

The street name.

distance
float

The length of a segment (in meters or feet according to userPreference ).

shape
array

Geometrical shape of segment. A list of pairs: longitude & latitude.

segmentProbeCounts
array

See the segmentProbeCounts section.

Structure of segmentProbeCounts

Field

Description

timeSet
integer

Reference to TimeSet in which calculations were made.

dateRange
string

Reference to DateRange in which calculations were made. Integer

probeCount
integer

The sample size visible on the segment. These are unique vehicles traveling on segment. If several measurements are received from the same vehicle on a single segment it is only counted once in the sample size count.