The address resolved. The parcel still came back.
Failed deliveries are not a driver problem. They are an addressing problem that shows up at the end of the route, where it is most expensive to fix.
What breaks
A Thai address that does not resolve does not fail loudly. It geocodes to something — a district centroid, a road midpoint, the wrong province entirely — and your system records a successful lookup. The failure surfaces two hours later as a driver on the phone.
“Soi 15” exists in most districts, and consecutive sois are frequently nowhere near each other. A geocoder that matches on the soi alone returns a confident, wrong point.
There is a Mueang district in nearly every province. Drop the province from the query and the nearest match can be several hundred kilometres from the customer.
There is no street number to fall back on. If the project name is not in the index under the spelling the customer used, there is nothing left to match on.
What it costs
Most operations teams already track the two numbers this needs. The third is usually known and rarely written down.
delivery attempts per month × first-attempt failure rate × fully-loaded cost of a re-attempt
Put your own numbers in the calculatorThe endpoints you would use
GET/v1/geocodeResolve the customer's address to a coordinate, with the province constraining the match.
GET/v1/admin-areas/reverseConfirm which province, district and subdistrict that coordinate is actually in before you dispatch to it.
POST/v1/routeOrder the stops and get real distance and duration, not straight-line estimates.
POST/v1/matrixEvery rider against every order in one call, for dispatch rather than one route at a time.
A request you can run
Geocode with the province in the query, then route the day's stops. Both against the live API.
# 1. Resolve the customer's address, with the province in the query.
# Tambon and amphoe names repeat across provinces — without it you can
# land 400 km away and still get a confident 200.
curl -H "X-MapScale-Key: $MAPSCALE_API_KEY" \
"https://api.mapscale.io/v1/geocode?q=Soi%20Sukhumvit%2031%20Watthana%20Bangkok&lang=th&limit=5"
# 2. Order the day's stops. Coordinates in, distance and duration out.
curl -X POST -H "X-MapScale-Key: $MAPSCALE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"coordinates":[[100.5018,13.7563],[100.5348,13.7466],[100.5601,13.7279]],"profile":"driving"}' \
"https://api.mapscale.io/v1/route"What we can actually claim
Routing and travel times come from Thailand-wide OpenStreetMap road data through Valhalla. Where the road layer is thin, it is thin — see the coverage notes rather than a coverage claim.
Bring us your data.
A 30-minute review against your own addresses — not a demo dataset. You will see the failure rate before you see a price.