Punk API

Punk API is a free, no-auth REST API exposing BrewDog's "DIY Dog" open-source beer recipe collection — 325 detailed homebrew recipes crowdsourced and transcribed from the BrewDog DIY Dog PDF. The v2 surface (api.punkapi.com/v2) offered three read-only endpoints: list beers (with rich query filtering on ABV, IBU, EBC, brew date, beer name, hops, malt, yeast, and food pairing), get a beer by id, and get a random beer. Each beer carries a full recipe — ABV, IBU, EBC/SRM colour, target gravities, mash temperature schedule, fermentation temperature, twist, malt and hop bills, yeast strain, food pairings, brewer's tips, and contributor attribution. STATUS — DEPRECATED. BrewDog decommissioned the public api.punkapi.com endpoint in 2023 and the source repositories (sammdec/punkapi-db, sammdec/punkapi-server) were archived on 2023-06-28. The dataset and server source remain MIT-licensed and available; community-hosted mirrors and the `punkapi-db` npm package preserve the contract documented here.

1 APIs 9 Features
Food And DrinkBeerBrewDogDIY DogRecipesOpen SourcePublic APIsRESTDeprecated

APIs

Punk API — Beers

Read-only REST surface over the 325 BrewDog DIY Dog beer recipes. Three operations — list (with ABV/IBU/EBC/date/ingredient filters and page/per_page pagination up to 80 items),...

Collections

Pricing Plans

Punkapi Plans Pricing

1 plans

PLANS

Rate Limits

Punkapi Rate Limits

3 limits

RATE LIMITS

Features

325 BrewDog DIY Dog Recipes

Crowdsourced transcription of the complete BrewDog DIY Dog PDF — every recipe from Punk IPA (#001) through the final published batch.

Full Brewing Recipe

Each beer carries ABV, IBU, EBC, SRM, target gravities, mash schedule, fermentation temperature, malt bill, hop bill, yeast strain, food pairings, and brewer's tips.

Recipe-Oriented Query Filters

List endpoint supports filters on ABV (gt/lt), IBU (gt/lt), EBC (gt/lt), brewed-before/after dates, and substring search on beer name, hops, malt, yeast, and food pairing.

Pagination

page (>=1) and per_page (1-80, default 25) on the list endpoint.

Random Beer

/beers/random returns a uniformly random recipe — useful for "beer of the day" demos.

No Authentication

Fully public — no API keys, OAuth, or signup required.

No Rate Limits Documented

Best-effort public service while it was live. Only the per_page ceiling of 80 is enforced.

MIT-Licensed Source

Both punkapi-db (dataset) and punkapi-server (Express app) are MIT-licensed — self-host or fork freely.

npm Distribution

The complete dataset is published as the `punkapi-db` package for direct in-process use without HTTP.

Use Cases

Homebrewing Reference

Look up a recipe by ABV, hop, or malt to replicate or adapt a BrewDog beer at home-batch scale.

Sample / Tutorial API

Front-end and mobile tutorials use Punk API as a fun, schema-rich, no-auth REST target.

Beer Discovery App

Power beer recommendation apps, food-pairing tools, and BrewDog fan sites.

Search by Ingredient

Filter by hop (e.g. `hops=simcoe`) or malt (e.g. `malt=maris_otter`) to discover recipes using a specific ingredient.

Food Pairing Lookup

Filter by `food=spicy_food` to find beers explicitly recommended for spicy cuisine.

HTTP Client QA

Stable, well-defined schema makes Punk API a good fixture for codegen tools, OpenAPI tooling, and SDK builders.

Integrations

BrewDog DIY Dog

The upstream source of every recipe — BrewDog's open-source DIY Dog homebrew PDF.

punkapi-db (npm)

The recipe dataset packaged for direct npm install — no HTTP needed.

punkapi-server (Express)

The reference Express + node server that exposes the dataset as the v2 REST API.

Community Mirrors

Several community-run instances of punkapi-server keep the v2 contract reachable after BrewDog's 2023 decommission.

Public APIs Catalog

Listed in github.com/public-apis/public-apis under the Food & Drink category.

Solutions

Self-Host the Server

Clone sammdec/punkapi-server, run `npm i` then `npm run dev` — get the full v2 contract on http://localhost:3333.

Embed the Dataset

Run `npm i --save punkapi-db` to pull the full 325-recipe data.json into your application without HTTP.

Static JSON Mirror

For purely read use cases, host data.json on a CDN and serve clients directly.

Semantic Vocabularies

Punkapi Context

8 classes · 34 properties

JSON-LD

API Governance Rules

Punk API API Rules

36 rules · 11 errors 21 warnings 4 info

SPECTRAL

JSON Structure

Punkapi Beer Structure

21 properties

JSON STRUCTURE

Punkapi Error Structure

3 properties

JSON STRUCTURE

Example Payloads

Punkapi Beer Example

21 fields

EXAMPLE

Punkapi Error Example

3 fields

EXAMPLE

Resources

🔗
Website
Website
👥
punkapi-db (Recipe Dataset — archived 2023-06-28)
GitHubRepository
👥
punkapi-server (Express server — archived 2023-06-28)
GitHubRepository
👥
GitHubOrganization
GitHubOrganization
📦
punkapi-db (npm — recipe dataset)
SDKs
📦
punkapi (C client)
SDKs
📦
punkapi-ruby (Ruby client)
SDKs
📦
PunkApi (PHP client)
SDKs
📦
brewdog.js (JavaScript client)
SDKs
📦
PunkAPI (Swift/iOS client)
SDKs
📦
VueDogs-API (Vue.js client)
SDKs
📦
brewdog-recipe (Docker mirror)
SDKs
📦
brewdogr (R client)
SDKs
🔗
PublicAPIsListing
PublicAPIsListing
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
SpectralRules
SpectralRules
🔗
Vocabulary
Vocabulary

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Punk API — Brewdog DIY Dog Beer Recipes
  version: 2.0.0
items:
- info:
    name: Beers
    type: folder
  items:
  - info:
      name: Punk API List Beers
      type: http
    http:
      method: GET
      url: https://api.punkapi.com/v2/beers
      params:
      - name: page
        value: '1'
        type: query
        description: Page number (1-indexed).
      - name: per_page
        value: '25'
        type: query
        description: Number of items per page (1-80).
      - name: abv_gt
        value: '5'
        type: query
        description: Return beers with an ABV strictly greater than the supplied number.
      - name: abv_lt
        value: '10'
        type: query
        description: Return beers with an ABV strictly less than the supplied number.
      - name: ibu_gt
        value: '40'
        type: query
        description: Return beers with an IBU (bitterness) strictly greater than the supplied number.
      - name: ibu_lt
        value: '100'
        type: query
        description: Return beers with an IBU strictly less than the supplied number.
      - name: ebc_gt
        value: '20'
        type: query
        description: Return beers with an EBC (colour) strictly greater than the supplied number.
      - name: ebc_lt
        value: '80'
        type: query
        description: Return beers with an EBC strictly less than the supplied number.
      - name: beer_name
        value: punk_ipa
        type: query
        description: Substring match on beer name. Use underscores in place of spaces (e.g. `beer_name=punk_ipa`).
      - name: hops
        value: simcoe
        type: query
        description: Substring match on hop name. Use underscores in place of spaces (e.g. `hops=simcoe`).
      - name: malt
        value: maris_otter
        type: query
        description: Substring match on malt name. Use underscores in place of spaces (e.g. `malt=maris_otter`).
      - name: yeast
        value: wyeast
        type: query
        description: Substring match on yeast strain name. Use underscores for spaces.
      - name: food
        value: spicy_food
        type: query
        description: Substring match against a beer's food-pairing list. Use underscores in place of spaces (e.g. `food=spicy_food`).
      - name: brewed_before
        value: 12-2010
        type: query
        description: 'Return beers first brewed before the supplied date. Format: `mm-yyyy` (e.g. `12-2010`).'
      - name: brewed_after
        value: 01-2015
        type: query
        description: 'Return beers first brewed after the supplied date. Format: `mm-yyyy` (e.g. `01-2015`).'
    docs: Returns a paginated list of BrewDog beer recipes. Supports a rich family of recipe-oriented query filters — ABV
      / IBU / EBC ranges, brewed-before/after date ranges, and substring lookups on beer name, hops, malt, yeast, and food
      pairing. Underscores are used in place of spaces inside multi-word filter values (e.g. `hops=simcoe` or `food=spicy_food`).
      Pagination uses `page` (>=1) and `per_page` (1-80, default 25).
  - info:
      name: Punk API Get Beer
      type: http
    http:
      method: GET
      url: https://api.punkapi.com/v2/beers/:beerId
      params:
      - name: beerId
        value: '1'
        type: path
        description: Beer identifier (integer >= 1).
    docs: Returns a single beer recipe by its integer id. The id range is roughly 1-325 (matching the 325 DIY Dog recipes
      in the dataset). Returns 404 when no beer matches the supplied id.
  - info:
      name: Punk API Get Random Beer
      type: http
    http:
      method: GET
      url: https://api.punkapi.com/v2/beers/random
    docs: Returns a single random beer recipe sampled uniformly from the 325 DIY Dog entries. Useful for "beer of the day"
      demos and for sampling the shape of the dataset.
bundled: true