Logr Pub API

Access 18,041 breweries, 167,372 beers, and 254 styles via a simple REST API.

API Traffic (30 days)

Total Requests
3,022
API: 149
Website: 1,706
Other: 1,167
API Requests
149
4.9% of total traffic
Total Visits
258
Website: 207
Other: 34
Bandwidth
25 MB
Data transferred
API
149 requests
4.9%
Website
1,706 requests
56.5%
Other
1,167 requests
38.6%

Quick Start

# Search breweries
curl https://discord.logr.beer/api/breweries?search=dogfish
# Get a specific brewery
curl https://discord.logr.beer/api/breweries/e68e9bec-3f76-4505-8752-128a1eba77b1
# Search everything
curl "https://discord.logr.beer/api/search?q=hazy+ipa"
# With authentication (full results)
curl -H "Authorization: Bearer YOUR_TOKEN" \
    https://discord.logr.beer/api/breweries

Base URL

https://discord.logr.beer/api

The root endpoint returns a JSON self-discovery document with links to all available resources.

Authentication

Public endpoints work without authentication but return sample data (max 10 results). Register for a free API key to get full paginated access.

1. Register

curl -X POST https://discord.logr.beer/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com", "password": "secret123", "password_confirmation": "secret123"}'

2. Get a token

curl -X POST https://discord.logr.beer/api/auth/token \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com", "password": "secret123", "device_name": "my-app"}'

3. Use the token

curl -H "Authorization: Bearer YOUR_TOKEN" https://discord.logr.beer/api/breweries

Rate Limits

60
requests/minute
General endpoints
10
requests/minute
Auth endpoints

Endpoints

Breweries

GET /api/breweries

List and search breweries. Returns sample data (max 10) without auth.

Params: search, country, state, per_page (max 100, default 25)
Example request & response
curl "https://discord.logr.beer/api/breweries?search=dogfish&per_page=2"
{
  "data": [
    {
      "id": "e68e9bec-3f76-4505-8752-128a1eba77b1",
      "name": "Dogfish Head Craft Brewery",
      "slug": "dogfish-head-craft-brewery",
      "city": "Milton",
      "state": "Delaware",
      "country": "United States",
      "website": "http://www.dogfish.com",
      "brewery_type": "large",
      "sources": ["catalog_beer", "open_brewery_db"],
      "beers_count": 42,
      "created_at": "2026-05-14T12:00:00.000000Z",
      "updated_at": "2026-05-14T12:00:00.000000Z"
    }
  ],
  "links": { "first": "...", "last": "...", "prev": null, "next": "..." },
  "meta": { "current_page": 1, "last_page": 1, "per_page": 2, "total": 1 }
}
GET /api/breweries/{uuid}

Get a single brewery by UUID.

Example request & response
curl https://discord.logr.beer/api/breweries/e68e9bec-3f76-4505-8752-128a1eba77b1
{
  "data": {
    "id": "e68e9bec-3f76-4505-8752-128a1eba77b1",
    "name": "Dogfish Head Craft Brewery",
    "slug": "dogfish-head-craft-brewery",
    "city": "Milton",
    "state": "Delaware",
    "country": "United States",
    "address": "6 Cannery Village Center",
    "postal_code": "19968",
    "phone": "(302) 684-1000",
    "latitude": 38.7776,
    "longitude": -75.3105,
    "website": "http://www.dogfish.com",
    "description": "An off-centered place for off-centered people.",
    "brewery_type": "large",
    "untappd_id": "459",
    "catalog_beer_id": "abc123",
    "open_brewery_db_id": "dogfish-head-craft-brewery-milton",
    "sources": ["catalog_beer", "open_brewery_db", "untappd"],
    "beers_count": 42,
    "created_at": "2026-05-14T12:00:00.000000Z",
    "updated_at": "2026-05-14T12:00:00.000000Z"
  }
}
GET /api/breweries/{uuid}/beers

List beers for a brewery. Returns sample data (max 10) without auth.

Params: per_page (max 100, default 25)
Example response
{
  "data": [
    {
      "id": "a1b2c3d4-...",
      "name": "60 Minute IPA",
      "slug": "60-minute-ipa",
      "styles": ["American IPA"],
      "abv": 6.0,
      "ibu": 60,
      "description": "Continually hopped for 60 minutes.",
      "brewery_name": "Dogfish Head Craft Brewery",
      "brewery_id": "e68e9bec-...",
      "sources": ["untappd", "catalog_beer"],
      "created_at": "2026-05-14T12:00:00.000000Z",
      "updated_at": "2026-05-14T12:00:00.000000Z"
    }
  ],
  "links": { ... },
  "meta": { "current_page": 1, "per_page": 25, "total": 42 }
}

Beers

GET /api/beers

List and search beers. Searches beer names, brewery names, and aliases. Returns sample data (max 10) without auth.

Params: search, brewery_id (uuid), style (slug or name), per_page (max 100, default 25)
Example request & response
curl "https://discord.logr.beer/api/beers?search=60+minute&per_page=2"
{
  "data": [
    {
      "id": "a1b2c3d4-...",
      "name": "60 Minute IPA",
      "slug": "60-minute-ipa",
      "styles": ["American IPA"],
      "abv": 6.0,
      "ibu": 60,
      "description": "Continually hopped for 60 minutes.",
      "untappd_id": "3839",
      "untappd_rating": 3.78,
      "sources": ["untappd", "catalog_beer"],
      "brewery_name": "Dogfish Head Craft Brewery",
      "brewery_id": "e68e9bec-...",
      "brewery": {
        "id": "e68e9bec-...",
        "name": "Dogfish Head Craft Brewery",
        "slug": "dogfish-head-craft-brewery",
        "city": "Milton",
        "state": "Delaware",
        "country": "United States"
      },
      "created_at": "2026-05-14T12:00:00.000000Z",
      "updated_at": "2026-05-14T12:00:00.000000Z"
    }
  ],
  "links": { ... },
  "meta": { "current_page": 1, "per_page": 2, "total": 1 }
}
GET /api/beers/{uuid}

Get a single beer by UUID. Includes brewery and styles.

Example response
{
  "data": {
    "id": "a1b2c3d4-...",
    "name": "60 Minute IPA",
    "slug": "60-minute-ipa",
    "styles": ["American IPA"],
    "abv": 6.0,
    "ibu": 60,
    "release_year": null,
    "description": "Continually hopped for 60 minutes.",
    "untappd_id": "3839",
    "untappd_rating": 3.78,
    "untappd_url": "https://untappd.com/b/dogfish-head-60-minute-ipa/3839",
    "catalog_beer_id": "abc123",
    "sources": ["untappd", "catalog_beer"],
    "brewery_name": "Dogfish Head Craft Brewery",
    "brewery_id": "e68e9bec-...",
    "brewery": {
      "id": "e68e9bec-...",
      "name": "Dogfish Head Craft Brewery",
      "slug": "dogfish-head-craft-brewery",
      "city": "Milton",
      "state": "Delaware",
      "country": "United States"
    },
    "created_at": "2026-05-14T12:00:00.000000Z",
    "updated_at": "2026-05-14T12:00:00.000000Z"
  }
}

Search

GET /api/search

Search across beers and breweries. Matches names, aliases, and location fields. Returns sample data (max 10 per type) without auth.

Params: q (required, min 2 chars), type (beer or brewery), per_page (max 25, default 25)
Example request & response
curl "https://discord.logr.beer/api/search?q=hazy+ipa&type=beer&per_page=2"
{
  "beers": {
    "data": [
      {
        "id": "f5e6d7c8-...",
        "name": "Hazy Little Thing IPA",
        "slug": "hazy-little-thing-ipa",
        "styles": ["Hazy IPA"],
        "abv": 6.7,
        "brewery_name": "Sierra Nevada Brewing Co.",
        "brewery_id": "b2c3d4e5-...",
        "sources": ["untappd"]
      }
    ],
    "links": { ... },
    "meta": { "current_page": 1, "per_page": 2, "total": 15 }
  },
  "meta": {
    "sample": true,
    "notice": "Unauthenticated requests return sample data. Register for full access."
  }
}

Authentication

POST /api/auth/register

Register a new account. Returns a Sanctum API token.

Body: email, password, password_confirmation
Example request & response
curl -X POST https://discord.logr.beer/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com","password":"secret123","password_confirmation":"secret123"}'
{
  "token": "1|abc123def456..."
}
POST /api/auth/token

Get an API token for an existing account.

Body: email, password, device_name
Example response
{
  "token": "2|xyz789ghi012..."
}
POST /api/auth/token/reset

Request a token reset email. Revokes all existing tokens and emails a new one.

Body: email
GET /api/auth/user auth

Get the currently authenticated user.

Example response
{
  "id": 1,
  "email": "you@example.com",
  "is_admin": false,
  "created_at": "2026-05-14T12:00:00.000000Z"
}
DELETE /api/auth/token auth

Revoke the current API token.

Submissions auth required

GET /api/submissions auth

List your submissions. Paginated, most recent first.

POST /api/submissions auth

Submit a new beer or brewery for review.

Example: submit a beer
curl -X POST https://discord.logr.beer/api/submissions \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "beer",
    "data": {
      "name": "Haze Bomb IPA",
      "brewery_name": "Sierra Nevada Brewing Co.",
      "style": ["Hazy IPA"],
      "abv": 6.7,
      "description": "A hazy, juicy IPA."
    }
  }'
{
  "data": {
    "id": "c4d5e6f7-...",
    "type": "beer",
    "data": {
      "name": "Haze Bomb IPA",
      "brewery_name": "Sierra Nevada Brewing Co.",
      "brewery_id": "b2c3d4e5-...",
      "style": ["Hazy IPA"],
      "abv": 6.7,
      "description": "A hazy, juicy IPA."
    },
    "status": "pending",
    "notes": null,
    "resolved_at": null,
    "created_at": "2026-05-20T12:00:00.000000Z"
  }
}
Example: submit a brewery
curl -X POST https://discord.logr.beer/api/submissions \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "brewery",
    "data": {
      "name": "New Local Brewing",
      "city": "Portland",
      "state": "Oregon",
      "country": "United States",
      "website": "https://newlocalbrewing.com"
    }
  }'
Beer fields: name (required), brewery_name, brewery_id (uuid), style (array), abv, ibu, description
Brewery fields: name (required), city, state, country, website, description
GET /api/submissions/{uuid} auth

Get a single submission by UUID. Must be the submission owner.

Utility

GET /api/traffic

API traffic statistics.

GET /api/docs

API documentation as JSON (self-discovery).

Response Format

All responses are JSON. Brewery and beer resources resolve canonical values from multiple data sources (Untappd, Open Brewery DB, catalog.beer, and more). Paginated endpoints return standard Laravel pagination with data, links, and meta keys.

JSON Self-Discovery → API Stats → Browse Database →