Geoapify
Geocoding is read-only, so nothing is created or duplicated: the same lookup twice returns the same point, and there's no write step. The errors are the standout. Leaving out the address returns a 400 that lists every field you could have searched by (text, name, housenumber, postcode, city); a bad key returns a plain 'Invalid apiKey'; and reverse-geocoding latitude 999 is refused with 'lat must be less than or equal to 90' - it validates rather than guessing. The chain works too: geocode one landmark, geocode another, then route between the two coordinates. The agent always knows what to fix.
Cross-validated onClaude Opus 4.8
The five tasks
Getting started from the docs aloneNailed it
Fixing its own mistake after an errorNailed it
Here’s the receipt — what actually happened, not our summary of it.
Missing text -> 400 {message:'"value" must contain at least one of [text, name, housenumber, postcode, city, state, country]'} listing every searchable field; a bad apiKey -> 401 {message:'Invalid apiKey'}; a valid query -> 200.Following a multi-step flowNailed it
Handling an unclear edge caseNailed it
Not double-charging on a retryNailed it
See everything the AI did (7 steps)
t1 Claude Opus 4.8 GET /v1/geocode/search text=Eiffel Tower → 200 coords t2 Claude Opus 4.8 GET /v1/geocode/search (missing text) → 400 lists valid fields t3 Claude Opus 4.8 GET /v1/geocode/search (bad apiKey) → 401 Invalid apiKey t4 Claude Opus 4.8 GET /v1/geocode/search text=Louvre (corrected) → 200 coords t5 Claude Opus 4.8 GET /v1/geocode/reverse lat=999 lon=999 → 400 lat must be <= 90 t6 Claude Opus 4.8 GET /v1/routing waypoints=A|B mode=walk → 200 distance 3759m t7 Claude Opus 4.8 GET /v1/geocode/search text=Brandenburg Gate x2 → 200/200 identical coords
Tested 2026-07-03 with Claude Opus 4.8 agents · request a re-test