The Solvice Maps Distance Matrix service is specifically made for products that use route optimization to power scheduling operations. Route optimization (TSP, PDP, VRP, …) requires the usage of a distance matrix detailing the travel time and distance from every location to every other location in the solve request.

Traffic unaware (OSM)

1

Send coordinates

POST /table

{
    "coordinates": [
        [4.912342132, 50.2123123],
        [4.812341234, 50.4123421],
        [5.012341342, 50.9124312],
        [5.057869730, 50.4940923]
    ]
}
{
    "createdAt": "2025-05-15T12:43:45.756Z",
    "id": 4309631,
    "status": "IN_PROGRESS",
    "tableResponseId": 4309631,
    "updatedAt": "2025-05-15T12:43:45.758Z"
}
If you have small matrices and want to integrate a fast synchronous service, use the /table/sync endpoint.
2

Poll table until ready

GET /table/4309631/status

{
    "createdAt": "2025-05-15T12:43:45.756Z",
    "id": 4309631,
    "status": "COMPLETED",
    "tableResponseId": 4309631,
    "updatedAt": "2025-05-15T12:43:46.012Z"
}
3

Get response (gzipped)

Make sure you test this endpoint with a browser or that supports gzip compression.

GET /table/4309631/response

{
    "destinations": [
{
    "hint": "eX5AgduYjYYsAAAAlAAAAHIAAAAAAAAAxBf6QX7HzELIz51CAAAAACwAAACUAAAAcgAAAAAAAAAVtwAAlMNKAIj__QKgxEoAwP39AgEAXwRPrDVe",
    "distance": 54.20808645369059,
    "name": "Avenue de la Restauration",
    "location": [
    4.899732,
    50.200456
    ]
},
{
    "hint": "o_v2gPMxk4KXAAAAQwAAAJsAAADWAwAA4YOXQ0HtBEOh05pDGnn1RJcAAABDAAAAmwAAANYDAAAVtwAAEyhJAG0BAQMAPkkAAAsBAwMAXxRPrDVe",
    "distance": 483.4921257061384,
    "name": "Route des Trois Communes",
    "location": [
    4.794387,
    50.397549
    ]
},
{
    "hint": "WvwMgrAseoRNAAAAAAAAALwAAAAAAAAAvYZVQgAAAAAK0AFDAAAAAE0AAAAAAAAAvAAAAAAAAAAVtwAAI1ZMAPmtCANAS0wAIKwIAwYAXw9PrDVe",
    "distance": 202.89814553989248,
    "name": "Wittebos",
    "location": [
    5.002787,
    50.900473
    ]
},
{
    "hint": "GtVBggTgEIkDAAAADwAAAMUAAAAAAAAAbWKjQHMstUHaEZlDAAAAAAMAAAAPAAAAxQAAAAAAAAAVtwAA-Q5NAN2rCAOQDk0AIKwIAwsAHw5PrDVe",
    "distance": 10.496399718824598,
    "name": "Tiensestraat",
    "location": [
    5.050105,
    50.899933
    ]
}
    ],
    "durations": [
    [
    0,
    1976.1,
    5772.3,
    5642.6
    ],
    [
    2010.2,
    0,
    4783.9,
    4654.2
    ],
    [
    5817.2,
    4797.4,
    0,
    508.6
    ],
    [
    5705.3,
    4685.5,
    530.2,
    0
    ]
    ],
    "sources": [
{
    "hint": "eX5AgduYjYYsAAAAlAAAAHIAAAAAAAAAxBf6QX7HzELIz51CAAAAACwAAACUAAAAcgAAAAAAAAAVtwAAlMNKAIj__QKgxEoAwP39AgEAXwRPrDVe",
    "distance": 54.20808645369059,
    "name": "Avenue de la Restauration",
    "location": [
    4.899732,
    50.200456
    ]
},
{
    "hint": "o_v2gPMxk4KXAAAAQwAAAJsAAADWAwAA4YOXQ0HtBEOh05pDGnn1RJcAAABDAAAAmwAAANYDAAAVtwAAEyhJAG0BAQMAPkkAAAsBAwMAXxRPrDVe",
    "distance": 483.4921257061384,
    "name": "Route des Trois Communes",
    "location": [
    4.794387,
    50.397549
    ]
},
{
    "hint": "WvwMgrAseoRNAAAAAAAAALwAAAAAAAAAvYZVQgAAAAAK0AFDAAAAAE0AAAAAAAAAvAAAAAAAAAAVtwAAI1ZMAPmtCANAS0wAIKwIAwYAXw9PrDVe",
    "distance": 202.89814553989248,
    "name": "Wittebos",
    "location": [
    5.002787,
    50.900473
    ]
},
{
    "hint": "GtVBggTgEIkDAAAADwAAAMUAAAAAAAAAbWKjQHMstUHaEZlDAAAAAAMAAAAPAAAAxQAAAAAAAAAVtwAA-Q5NAN2rCAOQDk0AIKwIAwsAHw5PrDVe",
    "distance": 10.496399718824598,
    "name": "Tiensestraat",
    "location": [
    5.050105,
    50.899933
    ]
}
    ]
}
Prefer the signed url approach through the /table/{id}/response/url which redirects to Google Cloud Storage over our API.

Traffic aware (TomTom)

Solvice Maps has integrated TomTom road segment information in order to produce Traffic-aware routing. It is based on slices of adjusted travel time information. To get Traffic aware distance matrices, you need to set the departureTime as well as setting the routing "engine": TOMTOM.

At Solvice, we use the following slices:

PeriodFromTo
NIGHT20:3006:30
MORNING_RUSH06:3009:30
MORNING09:3012:00
MIDDAY12:0014:30
AFTERNOON14:3016:30
EVENING_RUSH16:3019:30

In between slices, you can get interpolated values by setting the property "interpolate": true. Like so:

POST /table

{
    "coordinates": [
        [4.912342132, 50.2123123],
        [4.812341234, 50.4123421],
        [5.012341342, 50.9124312],
        [5.057869730, 50.4940923]
    ],
    "departureTime": "2025-06-25T14:30:00",
    "engine": "TOMTOM",
    "interpolate": true

}
{
    "createdAt": "2025-05-15T12:43:45.756Z",
    "id": 4309631,
    "status": "IN_PROGRESS",
    "tableResponseId": 4309631,
    "updatedAt": "2025-05-15T12:43:45.758Z"
}