Back to the board
Agent-friendly

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