PunkAPI is gone — your beer-app tutorial now fails at DNS

For years, PunkAPI was one of the friendliest first APIs on the internet: BrewDog published their entire DIY Dog homebrew recipe catalogue for free, someone turned it into a keyless REST API, and a thousand "build a beer finder" tutorials, bootcamp exercises, and portfolio apps were born. Search by name, filter by ABV, page through Punk IPA and Tactical Nuclear Penguin — it was a genuinely fun dataset with real numeric fields to filter on. Credit where it's due.

It announced its shutdown for May 1st, 2024. Two years on it's not just the API that's dead — the entire domain is gone (verified September 2026):

curl "https://api.punkapi.com/v2/beers?page=1"
# curl: (6) Could not resolve host: api.punkapi.com

curl https://images.punkapi.com/v2/001.png
# curl: (6) Could not resolve host: images.punkapi.com

curl https://punkapi.com/
# curl: (6) Could not resolve host: punkapi.com   ← even the shutdown notice

NXDOMAIN, all three. In a browser that's a TypeError: Failed to fetch before any HTTP happens. Every tutorial that opens with that curl — and every old project whose saved beer objects embed images.punkapi.com URLs — is broken at the DNS level, with no error page left to explain why.

1. The good news: a community successor exists

Alexander Ivanovsky's punkapi rebuilt the API from the DIY Dog V8 catalogue and hosts it at punkapi-alxiw.amvera.io — keyless, CORS-open (access-control-allow-origin: *), with 415 recipes (the original served 325), images included, and the classic filters intact (all verified September 2026):

curl "https://punkapi-alxiw.amvera.io/v3/beers?page=1&beer_name=punk"
# → 6 beers: Punk IPA 2007-2010, Punk Monk, Sunk Punk…

curl "https://punkapi-alxiw.amvera.io/v3/beers?page=1&abv_gt=10"
# → the strong stuff, just like the old ?abv_gt=

curl https://punkapi-alxiw.amvera.io/v3/beers/random   # still a thing
curl https://punkapi-alxiw.amvera.io/v3/images/001.png # images live here now

If you just want your beer app reading live again, point it there and thank the maintainer. But porting an old tutorial, you'll meet these edges (each one live-verified):

2. Own the catalogue: all 415 beers in one import

The full recipes with brewing method run ~1.3MB, but the fields a beer app renders — name, tagline, description, ABV/IBU/EBC, food pairing, brewers' tips — fit in one import. Capture once, host your own copy, no signup:

for p in 1 2 3 4 5 6; do
  curl -s "https://punkapi-alxiw.amvera.io/v3/beers?page=$p&per_page=80"
done | jq -s '{beers: [add[] | del(.method,.ingredients,.boil_volume,.volume)]}' > db.json

curl -s -X POST "https://mockbird.mockbird.workers.dev/api/projects/import?name=punk" \
  -H 'content-type: application/json' --data-binary @db.json
# → {"id":"YOUR_ID","adminKey":"YOUR_ADMIN_KEY",
#    "resources":[{"name":"beers","records":415,…}]}

Ids are preserved verbatim — /beers/1 is still Punk IPA 2007–2010, so hardcoded ids from old tutorials keep resolving. The image field survives too; hotlink https://punkapi-alxiw.amvera.io/v3/images/001.png and the bottles still render.

3. The old queries, plus the ones PunkAPI never had

Every command below ran against a live import while writing this guide:

BASE=https://mockbird.mockbird.workers.dev/m/YOUR_ID

curl "$BASE/beers?name_like=punk"        # 6 beers — same set as beer_name=punk
curl "$BASE/beers?abv_gte=10"            # X-Total-Count: 84 — ranges, with a count
curl "$BASE/beers?q=grapefruit"          # full-text: 36 beers mention grapefruit
curl "$BASE/beers?sortBy=abv&order=desc&limit=3&select=name,abv"
# → The End Of History (55%), Sink The Bismarck! (41%),
#   Tactical Nuclear Penguin (32%) — numeric sort, field projection

No required page param (but ?page=2&limit=10 works, down to a teaser row of 1), X-Total-Count on every list, and writes are real:

curl -X PATCH "$BASE/beers/1" \
  -H 'content-type: application/json' -d '{"favourite":true}'
# → persists; GET-back shows favourite:true — your button has a backend

curl -X POST "$BASE/beers" -H 'content-type: application/json' \
  -d '{"name":"My Homebrew","tagline":"First batch.","abv":5.2}'
# → id 416 — X-Total-Count is now 416

/m/YOUR_ID/types.ts generates a TypeScript Beer interface from your records (?format=zod for Zod), and failure drills are a query param away: ?mock_delay=3000, ?mock_status=503, ?mock_ratelimit=5 — the outage story you just lived through, reproducible on demand for your error-state tests.

4. Honest comparison

PunkAPI (original)punkapi-alxiw /v3Your import
Reachable✘ NXDOMAIN since 2024✔ keyless, CORS *✔ keyless, CORS *
Catalogue325 beers (was)✔ 415 — DIY Dog V8✔ the same 415, yours
Bare list requestworked✘ 422 — page required✔ works
Name search?beer_name=✔ ?beer_name=✔ ?name_like=, ?q= full-text
ABV/IBU ranges?abv_gt=✔ ?abv_gt=✔ ?abv_gte= on any numeric field
Sorting✘✘✔ ?sortBy=abv&order=desc
Total count✘✘✔ X-Total-Count
Images✘ CDN dead✔ /v3/images/✔ hotlink the successor's
Writes persist✘✘ 405✔ POST/PATCH/DELETE are real
Full brewing method—✔ hops, mash, twists✘ trimmed to fit (by choice, above)

The fair split: for live browsing of the full recipes — mash temperatures, hop schedules, the lot — use the successor and be glad someone rebuilt it. The moment you're building or testing a beer app — sorting by strength, paginating freely, wiring a favourites button, keeping CI green when a free-tier host has a bad day — spend the one curl and own the copy. Current status of the successor: /status/punkapi. The meta-lesson of PunkAPI's death is the lesson of this whole guides series: tutorial APIs are gifts with no uptime contract. Related: Studio Ghibli API (dead Heroku), GitHub Jobs (dead since 2021), CoinDesk BPI (dead), deterministic test data.

⚡ Skip the terminal: paste your db.json in the dashboard importer (CSV, OpenAPI, Postman, and HAR work too) — or create a seeded sandbox in one click. No signup.