TomTom
Mapping is read-only, so nothing is created or duplicated: the same lookup twice returns the same point. The chain is solid: geocode one city, geocode another, then route between the coordinates for a distance and drive time. Bad input is strict: a missing or wrong key returns a clear 401, and reverse-geocoding latitude 999 is refused with 'invalid position: out of range', not a silent empty success. One watch-out: geocoding a landmark by name through the address endpoint can confidently return an unrelated same-named street far away, so use the search endpoint for places, not the geocoder.
Cross-validated onClaude Opus 4.8
The five tasks
Getting started from the docs aloneNailed it
Fixing its own mistake after an errorNailed it
Following a multi-step flowNailed it
Handling an unclear edge caseNailed it
Here’s the receipt — what actually happened, not our summary of it.
Docs don't cover out-of-range coordinates. Probed safely: GET /search/2/reverseGeocode/999,999.json -> 400 {error:'Invalid request: invalid position: latitude/longitude out of range.', detailedError:{code:'BadRequest', target:'position'}} - it validates and points at the position field rather than silently returning an empty success.Not double-charging on a retryNailed it
See everything the AI did (8 steps)
t1 Claude Opus 4.8 GET /search/2/geocode/Amsterdam → 200 position t2 Claude Opus 4.8 GET /search/2/geocode (missing key) → 401 Unauthorized t3 Claude Opus 4.8 GET /search/2/geocode (bad key) → 401 Unauthorized t4 Claude Opus 4.8 GET /search/2/geocode/Louvre (corrected) → 200 position t5 Claude Opus 4.8 GET /search/2/reverseGeocode/999,999 → 400 out of range target:position t6 Claude Opus 4.8 GET /search/2/geocode/Utrecht → 200 position t7 Claude Opus 4.8 GET /routing/1/calculateRoute/A:B car → 200 length 50580m time 2897s t8 Claude Opus 4.8 GET /search/2/geocode/Brandenburg Gate x2 → 200/200 identical
Tested 2026-07-03 with Claude Opus 4.8 agents · request a re-test