# Happy Cabbage Analytics > Cannabis retail inventory software. The Happy Buyers platform gives dispensary buyers AI-assisted > inventory management, demand forecasting, replenishment and purchase-order workflows on top of live > point-of-sale data. The Happy Buyers External API (beta since 2026-06-05) exposes organization metadata, > inventory health, product and product-line inventory, packages, daily sales metadata and full order > management over REST, authenticated with an organization-scoped API key. Generated by API Evangelist on 2026-08-22 from the provider's published contract and public site. Happy Cabbage does not publish an llms.txt of its own — https://www.happycabbage.io/llms.txt returns 404. This file is API Evangelist's generation, not a provider artifact. ## API - [Happy Buyers External API — Swagger UI](https://cabbage.pub/swagger-ui/index.html): the entire public developer surface. OpenAPI 3.0.1, 40 operations over 30 paths, 49 schemas. - [OpenAPI document](https://cabbage.pub/v3/api-docs/external): the machine-readable contract. Also served at https://api.happycabbage.ai/v3/api-docs/external. - Base URL: `https://api.happycabbage.ai`, all paths under `/external/v1`. - Auth: API key in the `hca-api-key` request header. Keys are issued by Happy Buyers per organization and every response is scoped to that organization. Call `GET /external/v1/whoami` first to confirm which organization and key you are operating as. - Key permission scopes, discoverable only from each operation's 403 description: `organization_metadata:read`, `inventory:read`, `inventory:write`, `product_lines:read`, `product_lines:write`, `orders:write`. - Pagination: `limit` / `offset` query parameters; every list response is a `{limit, offset, totalCount, hasMore, results[]}` envelope. - No idempotency keys, no documented rate limits, no 429 response, no webhooks, no RFC 9457 problem details. Errors return the Spring Boot default `{timestamp, status, error, path}` JSON. ## Capabilities - Identity: `whoami`. - Organization metadata: `getStores`, `getPosBrands`, `getPosCategories`, `getUniversalBrands`, `getUniversalCategories`. Universal brands and categories are Happy Cabbage's canonical vocabulary mapping POS-specific brand and category names across Dutchie, Flowhub, Blaze, Treez and Meadow. - Inventory: `getProductInventory`, `getProductLineInventory`, `findPackages`, `getDailySalesMetadataForProduct`, `updateCarryStatus`. - Inventory health, current and historical, at store, POS-brand and category level: `getStoreInventoryHealths`, `getStoreInventoryHealthHistories`, `getPosBrandInventoryHealths`, `getPosBrandInventoryHealthHistory`, `getCategoryInventoryHealths`, `getCategoryInventoryHealthHistories`. - Product lines (demand groups): `getProductLines`, `getProductLine`, `createProductLine`, `updateProductLine`, `getProductLineProductInventory`. - Purchase orders: `getOrders`, `createOrder`, `updateOrder`, `getOrderItems`, `addOrderItem`, `removeOrderItem`, `getOrderInvoices`, `addOrderInvoice`, `getOrderInvoice`, `updateOrderInvoice`, `removeOrderInvoice`, `generateTemporaryUploadUrl`, `generateTemporaryDownloadUrl`. - Blockout dates: `getBlockoutDates`, `getBlockoutDate`, `createBlockoutDate`, `updateBlockoutDate`, `deleteBlockoutDate`. ## Before you write - `createOrder` and `createProductLine` are unguarded creates. There is no idempotency key and no cancel, void or delete operation for either — a retry produces a second record that cannot be withdrawn through the API. Confirm with a human before creating. - `updateCarryStatus` is safely reversible: set `continueToCarry` back to `true` to resume a discontinued product, which stays viewable either way. - `removeOrderItem`, `removeOrderInvoice` and `deleteBlockoutDate` reverse their matching creates. Happy Cabbage states no time window for any of them. - Order `status` (`DRAFT`, `READY_TO_SEND`, `SUBMITTED`, `RECEIVED`) is read-only in the external contract. ## Product - [Happy Buyers](https://www.happycabbage.io/happy-buyers) - [AI Hub](https://www.happycabbage.io/ai-hub): the company's own guidance on driving Happy Buyers with AI agents against this API. Example Claude Agent Skill files are customer-only — request them from success@happycabbage.io. - [Integrations](https://www.happycabbage.io/integrations): POS (Dutchie, Flowhub, Blaze, Treez, Meadow), wholesale (Distru, Apex Trading, Nabis coming soon), partners (Alpine IQ, SparkPlug). - [Release notes](https://www.happycabbage.io/release-notes): dated product changelog. - [The Patch](https://www.happycabbage.io/the-patch): company blog. - [Free trial](https://www.happycabbage.io/buyers-free-trial) · [Book a demo](https://www.happycabbage.io/book-a-demo) - [Log in](https://restock.happycabbage.ai/) - [Contact](https://www.happycabbage.io/contact) - [Privacy policy](https://lrn.mobi/hca_privacy_policy) ## Not published Happy Cabbage publishes no pricing page, no status page, no SLA, no deprecation policy, no security.txt, no trust center or certification claims, no client SDKs in any package registry, no CLI, no Postman collection, no webhooks or AsyncAPI, no MCP server, and no A2A agent card. Each of those is a recorded absence probed on 2026-08-22, not an omission from this file.