Back to the board
Agent-friendly

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