Open Brewery DB API Documentation

Postman collection → OpenAPI spec →

Introduction

Open Brewery DB is a free dataset and API with public information on breweries, cideries, brewpubs, and bottleshops

The Goal

The goal of Open Brewery DB is to maintain an open-source, community-driven dataset and provide a public API for brewery-related data.

The Mission

It is our belief that public information should be freely accessible for the betterment of the community and the happiness of web developers and data analysts.

Model Context Protocol

Open Brewery DB provides a public, read-only Model Context Protocol server so AI agents can search and explore the brewery dataset without translating requests into REST API calls.

The server uses Streamable HTTP and does not require authentication. Requests are limited to 60 per minute per IP address. Paginated tools return 10 results by default and accept at most 50 results per page.

Available tools

Tool Description
list-breweries Browse breweries with structured location, type, name, ID, distance, and sorting filters.
get-brewery Retrieve a brewery by UUID.
search-breweries Perform full-text brewery searches.
get-brewery-metadata Count filtered breweries by state or province, country, and brewery type.

Claude

In Claude Desktop or Claude on the web, open Settings, select Connectors, choose Add custom connector, and enter https://api.openbrewerydb.org/mcp.

Claude Code users can connect from a terminal:

claude mcp add --transport http open-brewery-db https://api.openbrewerydb.org/mcp

OpenCode

Add the remote server to opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "servers": {
      "open-brewery-db": {
        "type": "remote",
        "url": "https://api.openbrewerydb.org/mcp"
      }
    }
  }
}

VS Code

Add the HTTP server to your user or workspace mcp.json:

{
  "servers": {
    "open-brewery-db": {
      "type": "http",
      "url": "https://api.openbrewerydb.org/mcp"
    }
  }
}

Example prompts

  • Find microbreweries in Portland, Oregon.
  • Search for breweries containing "Breakside" in their name.
  • Get the brewery with ID b54b16e1-ac3b-4bff-a11f-f7ae9ddc27e0.
  • Count breweries in Canada by province and brewery type.

If a client receives HTTP 429 Too Many Requests, wait for the Retry-After period before making more requests. MCP clients discover the current input and output schema for each tool directly from the server. HTTP 503 Service Unavailable indicates that the MCP server has been temporarily disabled by the Open Brewery DB operators.

Authenticating requests

This API is not authenticated.

Endpoints

List breweries.

GET
https://api.openbrewerydb.org
/v1/breweries

Returns a paginated list of breweries based on optional filters and sorting.

Headers

Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request GET \
    --get "https://api.openbrewerydb.org/v1/breweries" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"per_page\": 1,
    \"page\": 22,
    \"sort\": \"architecto\",
    \"by_city\": \"n\",
    \"by_country\": \"g\",
    \"by_dist\": \"architecto\",
    \"by_dist_radius\": 22,
    \"by_dist_unit\": \"mi\",
    \"by_ids\": \"g\",
    \"by_name\": \"z\",
    \"by_postal\": \"m\",
    \"by_state\": \"i\",
    \"by_type\": \"architecto\",
    \"exclude_types\": \"architecto\"
}"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 120
x-ratelimit-remaining: 119
vary: Origin
{
    "message": "The sort contains an invalid sort field. Valid fields are: id, name, brewery_type, type, city, state_province, postal_code, country. (and 9 more errors)",
    "errors": {
        "sort": [
            "The sort contains an invalid sort field. Valid fields are: id, name, brewery_type, type, city, state_province, postal_code, country."
        ],
        "by_city": [
            "The by city field must be at least 3 characters."
        ],
        "by_country": [
            "The by country field must be at least 3 characters."
        ],
        "by_dist": [
            "The by dist must be a valid coordinate pair (latitude,longitude)."
        ],
        "by_ids": [
            "The by ids field must be at least 3 characters."
        ],
        "by_name": [
            "The by name field must be at least 3 characters."
        ],
        "by_postal": [
            "The by postal field must be at least 3 characters."
        ],
        "by_state": [
            "The by state field must be at least 3 characters."
        ],
        "by_type": [
            "The by_type contains invalid brewery type: architecto"
        ],
        "exclude_types": [
            "The exclude_types contains invalid brewery type: architecto"
        ]
    }
}

Get metadata about the brewery

GET
https://api.openbrewerydb.org
/v1/breweries/meta

Takes the same filters as List Breweries.

Headers

Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request GET \
    --get "https://api.openbrewerydb.org/v1/breweries/meta" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"per_page\": 1,
    \"page\": 22,
    \"sort\": \"architecto\",
    \"by_city\": \"n\",
    \"by_country\": \"g\",
    \"by_dist\": \"architecto\",
    \"by_dist_radius\": 22,
    \"by_dist_unit\": \"mi\",
    \"by_ids\": \"g\",
    \"by_name\": \"z\",
    \"by_postal\": \"m\",
    \"by_state\": \"i\",
    \"by_type\": \"architecto\",
    \"exclude_types\": \"architecto\"
}"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 120
x-ratelimit-remaining: 118
vary: Origin
{
    "message": "The sort contains an invalid sort field. Valid fields are: id, name, brewery_type, type, city, state_province, postal_code, country. (and 9 more errors)",
    "errors": {
        "sort": [
            "The sort contains an invalid sort field. Valid fields are: id, name, brewery_type, type, city, state_province, postal_code, country."
        ],
        "by_city": [
            "The by city field must be at least 3 characters."
        ],
        "by_country": [
            "The by country field must be at least 3 characters."
        ],
        "by_dist": [
            "The by dist must be a valid coordinate pair (latitude,longitude)."
        ],
        "by_ids": [
            "The by ids field must be at least 3 characters."
        ],
        "by_name": [
            "The by name field must be at least 3 characters."
        ],
        "by_postal": [
            "The by postal field must be at least 3 characters."
        ],
        "by_state": [
            "The by state field must be at least 3 characters."
        ],
        "by_type": [
            "The by_type contains invalid brewery type: architecto"
        ],
        "exclude_types": [
            "The exclude_types contains invalid brewery type: architecto"
        ]
    }
}

Get a random brewery.

GET
https://api.openbrewerydb.org
/v1/breweries/random

Headers

Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request GET \
    --get "https://api.openbrewerydb.org/v1/breweries/random" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"size\": 1
}"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 120
x-ratelimit-remaining: 117
vary: Origin
[
    {
        "id": "44dbdaea-02c1-4459-b259-0605a7a219b8",
        "name": "Sun Up Brewing Co.",
        "brewery_type": "brewpub",
        "address_1": "322 E Camelback Rd",
        "address_2": null,
        "address_3": null,
        "city": "Phoenix",
        "state_province": "Arizona",
        "postal_code": "85012-1614",
        "country": "United States",
        "longitude": -112.0687773,
        "latitude": 33.50950925,
        "phone": "6026708924",
        "website_url": "http://sunup.beer",
        "state": "Arizona",
        "street": "322 E Camelback Rd"
    }
]
GET
https://api.openbrewerydb.org
/v1/breweries/search

The search performs partial, case-insensitive matching against brewery names.

Headers

Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request GET \
    --get "https://api.openbrewerydb.org/v1/breweries/search" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"per_page\": 1,
    \"query\": \"n\"
}"
Example response:

Get a single brewery.

GET
https://api.openbrewerydb.org
/v1/breweries/{id}

Headers

Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

id
string
required

The ID of the brewery.

Example:
ae7b3174-8be8-4d53-a3a5-9b8240970eea
Example request:
curl --request GET \
    --get "https://api.openbrewerydb.org/v1/breweries/ae7b3174-8be8-4d53-a3a5-9b8240970eea" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: max-age=86400, public
content-type: application/json
x-ratelimit-limit: 120
x-ratelimit-remaining: 115
vary: Origin
{
    "id": "ae7b3174-8be8-4d53-a3a5-9b8240970eea",
    "name": "'s",
    "brewery_type": "brewpub",
    "address_1": "Friesener Straße 1",
    "address_2": null,
    "address_3": null,
    "city": "Kronach",
    "state_province": "Bayern",
    "postal_code": "96317",
    "country": "Germany",
    "longitude": 11.327765,
    "latitude": 50.241246,
    "phone": "+49 9261 628000",
    "website_url": "http://www.antla.de",
    "state": "Bayern",
    "street": "Friesener Straße 1"
}