Food & Drink — entry 008 of 19

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

Score88out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs14/20Documentation URL provided
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 88 on greatapis.com
<a href="https://greatapis.com/api/open-brewery-db/"><img src="https://greatapis.com/badge/open-brewery-db.svg" alt="Scored 88 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
Rate limit

120 requests per rate-limit window (x-ratelimit-limit: 120, exact window not disclosed in headers), confirmed live on a probe of api.openbrewerydb.org/v1/breweries -- contradicts the project's own "no rate limits" marketing text on openbrewerydb.org/documentation

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.

Availability

Uptime100%
Median latency76 ms
Last checkUp · 200 · Sep 2026

2 checks since Sep 2026. A person runs this check by hand, not an automated monitor.