Documentation Index
Fetch the complete documentation index at: https://api.docs.onlydrams.app/llms.txt
Use this file to discover all available pages before exploring further.
ENDPOINTS
Overview
This section documents ODIS-only JSON endpoints for the spirits catalog data model: global bottle sizes, producers and logos, brand membership, product lines (with nested variants and per-size fields), and aggregate updates for ODIS UIs. Public read APIs underGET /api/v1/catalog/... are not covered here; they will be documented separately.
Base URL and versioning
All paths are rooted at:Authentication and issuer
Every request must send:iss: "odis" in its payload. Tokens issued for the mobile app or other issuers are rejected by Odis::V1::BaseController with 403 and message “Not an ODIS user” unless the issuer matches.
Obtain a suitable token the way your ODIS client does (for example, mint in Rails with Jwt::Issuer.call(user, "odis") for a known user). See the general Authentication overview for Bearer usage.
Authorization
- Read-only catalog actions (for example
GETon sizes, producers, brands, product lines, variants, andGET .../form) require a valid ODIS token; they do not require admin or editor unless a specific action notes it. - Create, update, and destroy on sizes, producers, brands, product lines, variants, and
PATCH .../aggregaterequire admin or editor. Others receive 403 with “Insufficient privileges”.
Errors
Error bodies generally use a single string field (see Errors):message (for example multiple errors joined with commas, or a variant validation summary).
Pagination
GET list endpoints that return many rows use the same envelope as other ODIS list APIs:
page, per.
Resource hierarchy
Conceptually:- Size — global list of fill volumes (ml + display), referenced by variant size rows.
- Producer — company that produces spirit; can have a logo (Active Storage; see Producers).
- Brand — brand name; HABTM with producers, scoped under a producer in these routes for ODIS.
- Product line — brand-scoped “line” with metadata, category, subcategories, and images; has many variants.
- Variant — batch/SKU/vintage side of a line, tied to a producer, with one row per size (variant size) for UPC, pricing, rarity, and optional platform fields.
- Aggregate —
PATCH .../product_lines/:id/aggregateupdates a line, subcategories, and nested variant / size rows in one request (see Product lines).
Related sections in these docs
Other ODIS areas (communities, tiers, bottles moderation, etc.) live under the same ODIS API group in the sidebar. This Spirits catalog group is only the catalog model above.Pages in this group
- Sizes — list and manage global
Sizerecords. - Producers — CRUD and logo upload.
- Brands — brands under a producer.
- Product lines — CRUD,
form, andaggregate. - Variants — CRUD and size assignment payloads.

