Food & Drink — entry 008 of 20

Open Brewery DB

Verified Jul 2026

Open Brewery DB is an open, keyless directory of breweries, cideries, and bottle shops across the US and several other countries, searchable by name, city, state, or brewery type. A live GET against the real gateway, api.openbrewerydb.org, returned genuine JSON while carrying an echoed Access-Control-Allow-Origin header, reconfirming both cors yes and auth None in the same probe.

Open Brewery DB is a free, keyless directory of breweries, cideries, and bottle shops -- searchable by name, city, state, or type. A live GET this run against `/breweries/meta` returned `{"total":11822,...}` -- a live, dated counter, not a fixed fact -- spanning the US and several other countries.

breweriesbeeropen-datadirectory
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score74out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs0/20No docs or spec available
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 74 on greatapis.com
<a href="https://greatapis.com/api/open-brewery-db/"><img src="https://greatapis.com/badge/open-brewery-db.svg" alt="Scored 74 on greatapis.com"></a>

Auth quickstart

  1. No API key, signup, or credit card required -- a live GET this run against `/breweries?by_city=san_diego&per_page=1` returned a genuine brewery record with zero credentials, carrying an echoed `Access-Control-Allow-Origin` header so a browser `fetch()` works too.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Search breweries by city

GEThttps://api.openbrewerydb.org/v1/breweries?by_city=san_diego&per_page=1

200 application/json

[{"id":"ef970757-fe42-416f-931d-722451f1f59c","name":"10 Barrel Brewing Co","brewery_type":"large","address_1":"1501 E St","address_2":null,"address_3":null,"city":"San Diego","state_province":"California","postal_code":"92101-6618","country":"United States","longitude":-117.129593,"latitude":32.714813,"phone":"6195782311","website_url":"http://10barrel.com","state":"California","street":"1501 E St"}]

Every filter (`by_city`, `by_state`, `by_type`, `by_name` via `/breweries/search?query=`) returns this same flat array shape -- no wrapping envelope. `brewery_type` is one of a fixed set (`micro`, `regional`, `brewpub`, `large`, `planning`, `bar`, `contract`, `proprietor`, `closed`, ...), confirmed live in `/breweries/meta`'s `by_type` breakdown this run.

Try it

Developer reference

Base URLhttps://api.openbrewerydb.org/v1
Key endpoints
  • GET/breweries
  • GET/breweries/{id}
  • GET/breweries/search
  • GET/breweries/meta

Gotchas & limits

  • The default page size is **50**, not the full result set -- a live GET this run against a filter-less `/breweries` returned exactly 50 records, while `per_page=200` (the documented cap) returned exactly 200. There is no `total` field on the list route itself; get it from `/breweries/meta` instead.
  • An unmatched filter value is **HTTP 200 with an empty array**, not a 404 -- a live GET this run against `/breweries?by_city=zzzznotacity` returned `200 []`. Code that treats an empty array as an error will misreport a simple no-results case.
  • An unknown id at `/breweries/{id}` is a real **HTML 404 page**, not a JSON error envelope -- a live GET this run against `/breweries/not-a-real-id` returned Laravel's default 404 page (`<title>Not Found</title>`) with `content-type: text/html`. Code that always calls `.json()` on the response without checking status first will throw on a bad or stale id.
  • `/breweries/meta` accepts the same `by_city`/`by_state`/`by_type` filters as the list route and returns scoped counts (`total`, `by_state`, `by_country`, `by_type`) instead of records -- it's a separate aggregate endpoint, not a query param on `/breweries`.