REST API v1
| Endpoint | Parameters |
|---|---|
GET /api/v1/search | q, category, place, lat, lon, radius_km, sort, verified_only, limit (≤25), cursor |
GET /api/v1/businesses/{id} | Full public profile |
GET /api/v1/businesses/{id}/locations | Locations |
GET /api/v1/categories | Categories with counts |
GET /api/v1/places?state=NY | States, or cities in a state |
GET /api/v1/compare?ids=a,b | 2–4 businesses side by side |
GET /api/v1/sources | Sources, licenses, last import |
Example
curl "$SITE/api/v1/search?q=dentist&place=Albany,%20NY&limit=3"
Every result has canonical_url, status (owner/verification), last_checked and a license block. Fields we do not know are null or absent — never guessed. Errors use {"error":{"code","message"}}; 429 includes Retry-After. Pagination is by opaque next_cursor. Spec: openapi.json.