"Extension structures" refer to messages and definitions that are not included in the core OpenCannabis spec, but are instead proposed via a Specification Extension.
Definitions considered core to the main specification are enumerated separately in Part 1.1, Core Structures.
- 4/OCS-M /
media
: Images, video, documents, etc. - 5/OCS-N /
menu
: Distribution channels, product labels, product types, etc. - 6/OCS-C /
commerce
: Commercial ordering and fulfillment structures. - 7/OCS-L /
labtesting
: Laboratory testing and QA. - 8/OCS-X /
proximity
: Bluetooth and GPS-related structures. - 9/OCS-O /
oauth
: OAuth2 implementation structures. - 10/OCS-A /
accounting
: Bookkeeping, accounting, taxes, and so on.
Full menu structures and payloads.
{% nomnoml %}
#fill: #d5e7ee; #8ebff2
[CustomSection | id: string | filter: FilteredSection]
[SectionMedia | tablet_homescreen_media: opencannabis.media.MediaItem]
[SectionSettings | name: opencannabis.content.Name | media: SectionMedia]
[SectionSpec | section: Section | custom_section: CustomSection | name: string | settings: SectionSettings | flags: SectionFlag]
[FilteredSection | ON_SALE: 0 | HOUSE: 1 | CBD: 2]
{% endnomnoml %}
{% nomnoml %}
#fill: #d5e7ee; #8ebff2
[Section | UNSPECIFIED: 0 | FLOWERS: 1 | EXTRACTS: 2 | EDIBLES: 3 | CARTRIDGES: 4 | APOTHECARY: 5 | PREROLLS: 6 | PLANTS: 7 | MERCHANDISE: 8]
[Menu | metadata: Metadata | payload: SectionedMenu | menu: StaticMenu]
[MenuProduct | key: opencannabis.base.ProductKey | apothecary: opencannabis.products.Apothecary | cartridge: opencannabis.products.Cartridge | edible: opencannabis.products.Edible | extract: opencannabis.products.Extract | flower: opencannabis.products.Flower | merchandise: opencannabis.products.Merchandise | plant: opencannabis.products.Plant | preroll: opencannabis.products.Preroll]
[MenuSettings | full: bool | keys_only: bool | snapshot: opencannabis.crypto.primitives.integrity.Hash | fingerprint: opencannabis.crypto.primitives.integrity.Hash | section: section.Section]
{% endnomnoml %}
{% nomnoml %}
#fill: #d5e7ee; #8ebff2
[MetaData | scope: string | version: uint64 | status: Status | flags: Flag | published: opencannabis.temporal.Instant | settings: MenuSettings]
[SectionData | count: int32 | section: section.SectionSpec | product: repeated MenuProduct]
[SectionMenu | count: int32 | payload: repeated SectionData]
[StaticMenu | apothecary: repeated StaticMenu.ApothecaryEntry | cartridges: repeated StaticMenu.CartridgesEntry | edibles: repeated StaticMenu.EdiblesEntry | extracts: repeated StaticMenu.ExtractsEntry | flowers: repeated StaticMenu.FlowersEntry | merchandise: repeated StaticMenu.MerchandiseEntry | plants: repeated StaticMenu.PlantsEntry | prerolls: repeated StaticMenu.PrerollsEntry]
{% endnomnoml %}
{% nomnoml %}
#fill: #d5e7ee; #8ebff2 [Flag | DRAFT: 0 | PRIVATE: 1 | OUT_OF_DATE: 2]
[Status | UNPUBLISHED: 0 | LIVE: 1]
{% endnomnoml %}
{% nomnoml %}
#fill: #d5e7ee; #8ebff2 [StaticMenu.MerchandiseEntry | key: string | value: opencannabis.products.Merchandise]
[StaticMenu.PlantsEntry | key: string | value: opencannabis.products.Plant]
[StaicMenu.PrerollsEntry | key: string | value: opencannabis.products.Preroll]
{% endnomnoml %}
Custom configuration-based menu sections, usually via FilteredSection
.
Field | Type | Label | Description |
---|---|---|---|
id | string | String ID for a custom section. | |
filter | FilteredSection | Filtered section specification. |
Specifies media for a section.
Field | Type | Label | Description |
---|---|---|---|
tablet_homescreen_media | opencannabis.media.MediaItem | Specifies a media item to use as a tablet homescreen tile for this section. |
Specifies settings that a menu section may consider.
Field | Type | Label | Description |
---|---|---|---|
name | opencannabis.content.Name | Presentable name for this section. | |
media | SectionMedia | Media to use when presenting this section. |
Specifies a menu section, along with section configuration (settings and flags).
Field | Type | Label | Description |
---|---|---|---|
section | Section | Known and enumerated menu section. | |
custom_section | CustomSection | Custom, filter-based menu section. | |
name | string | Arbitrary name for other types of sections. | |
settings | SectionSettings | Settings to apply to the subject section. | |
flags | SectionFlag | repeated | Current set of flags to apply to the subject section. |
Special filtered sections - commonly used sections based on filters builtin to apps/sites.
Name | Number | Description |
---|---|---|
ON_SALE | 0 | Only presents products that are on sale. |
HOUSE | 1 | Only presents products that are cultivated, manufactured, or otherwise produced in-house. |
CBD | 2 | Only presents products containing CBD. |
Known sections, that are expected to be included with nearly every menu.
Name | Number | Description |
---|---|---|
UNSPECIFIED | 0 | Unspecified or unknown section. |
FLOWERS | 1 | Traditional "buds" or "flowers" section. |
EXTRACTS | 2 | Concentrated cannabis products such as oils, waxes and hashes. |
EDIBLES | 3 | Edible cannabis products, such as brownies, candy bars, etc. |
CARTRIDGES | 4 | Cartridge and pen battery products. |
APOTHECARY | 5 | Tinctures, teas, and other miscellaneous products. |
PREROLLS | 6 | Pre-rolled flower-based joints, potentially fortified. |
PLANTS | 7 | Plant clones, seeds, and other cultivation products. |
MERCHANDISE | 8 | General merchandise. |
Flags that may be applied to a section's configuration.
Name | Number | Description |
---|---|---|
HIDDEN | 0 | This section should not be displayed. |
FEATURED | 1 | This section should be promoted and/or presented with high priority. |
Holds a full specification for a revision of menu data, segmented into sections, by the categories member products
are filed in. Categories are enumerated in menu.Section
.
Field | Type | Label | Description |
---|---|---|---|
metadata | Metadata | Metadata for the menu. | |
payload | SectionedMenu | Data payloads attached to this menu. | |
menu | StaticMenu | Specifies a static menu, where each section is specified as a typed map, with keys mapped to products. |
Menu product payload stanza. Specifies a single product as a member of a menu section.
Field | Type | Label | Description |
---|---|---|---|
key | opencannabis.base.ProductKey | Section that this data is attached to. | |
apothecary | opencannabis.products.Apothecary | Apothecary product. | |
cartridge | opencannabis.products.Cartridge | Cartridge product. | |
edible | opencannabis.products.Edible | Edible product. | |
extract | opencannabis.products.Extract | Extract product. | |
flower | opencannabis.products.Flower | Flower product. | |
merchandise | opencannabis.products.Merchandise | Merchandise product. | |
plant | opencannabis.products.Plant | Plant product. | |
preroll | opencannabis.products.Preroll | Preroll product. |
Specifies settings used to generate a menu, or used as input when generating menus.
Field | Type | Label | Description |
---|---|---|---|
full | bool | Flag indicating a full menu, including hidden/out-of-stock items. | |
keys_only | bool | Only include menu keys, no detail data. | |
snapshot | opencannabis.crypto.primitives.integrity.Hash | Don't return the menu if it's identical to this fingerprint. | |
fingerprint | opencannabis.crypto.primitives.integrity.Hash | Bloom filter to consider when returning or processing menu items. | |
section | section.Section | repeated | Sections to include in the menu. If unspecified, include all sections. |
Specifies metadata for a package of menu data.
Field | Type | Label | Description |
---|---|---|---|
scope | string | Partner location that owns this menu data. | |
version | uint64 | Version number, or publish timestamp, of this data. | |
status | Status | Status of this menu data. | |
flags | Flag | repeated | Flags attached to this menu data. |
published | opencannabis.temporal.Instant | When this menu data was published. | |
settings | MenuSettings | Settings that produced this menu data. |
Specifies an inner menu payload which contains menu data for a given menu section.
Field | Type | Label | Description |
---|---|---|---|
count | int32 | Count of products included in this menu section data. | |
section | section.SectionSpec | Section that this data is attached to. | |
product | MenuProduct | repeated | Menu products attached to this section. |
Specifies a menu split into section-level chunks.
Field | Type | Label | Description |
---|---|---|---|
count | int32 | Count of all products included in this menu, all sections considered. | |
payload | SectionData | repeated | Specifies a payload of sectioned menu data. |
Specifies an inner menu payload which contains mapped data, where each map key is a section name, lowercased, and each map value is itself a product, and each map is addressed at a typed property name.
Field | Type | Label | Description |
---|---|---|---|
apothecary | StaticMenu.ApothecaryEntry | repeated | Specifies APOTHECARY products attached to this menu. |
cartridges | StaticMenu.CartridgesEntry | repeated | Specifies CARTRIDGE products attached to this menu. |
edibles | StaticMenu.EdiblesEntry | repeated | Specifies EDIBLE products attached to this menu. |
extracts | StaticMenu.ExtractsEntry | repeated | Specifies EXTRACT products attached to this menu. |
flowers | StaticMenu.FlowersEntry | repeated | Specifies FLOWER products attached to this menu. |
merchandise | StaticMenu.MerchandiseEntry | repeated | Specifies MERCHANDISE products attached to this menu. |
plants | StaticMenu.PlantsEntry | repeated | Specifies PLANT products attached to this menu. |
prerolls | StaticMenu.PrerollsEntry | repeated | Specifies PREROLL products attached to this menu. |
Field | Type | Label | Description |
---|---|---|---|
key | string | ||
value | opencannabis.products.Apothecary |
Field | Type | Label | Description |
---|---|---|---|
key | string | ||
value | opencannabis.products.Cartridge |
Field | Type | Label | Description |
---|---|---|---|
key | string | ||
value | opencannabis.products.Edible |
Field | Type | Label | Description |
---|---|---|---|
key | string | ||
value | opencannabis.products.Extract |
Field | Type | Label | Description |
---|---|---|---|
key | string | ||
value | opencannabis.products.Flower |
Field | Type | Label | Description |
---|---|---|---|
key | string | ||
value | opencannabis.products.Merchandise |
Field | Type | Label | Description |
---|---|---|---|
key | string | ||
value | opencannabis.products.Plant |
Field | Type | Label | Description |
---|---|---|---|
key | string | ||
value | opencannabis.products.Preroll |
Enumerates flags that can be set on a menu.
Name | Number | Description |
---|---|---|
DRAFT | 0 | Indicates that this entire menu is considered a draft. |
PRIVATE | 1 | Indicates that the underlying menu data is currently private and should not be exposed publicly. |
OUT_OF_DATE | 2 | Indicates that the underlying menu data is known to be out-of-date. |
Enumerates statuses a menu may assume.
Name | Number | Description |
---|---|---|
UNPUBLISHED | 0 | Indicates that a menu revision is not yet published. |
LIVE | 1 | Indicates that a menu revision has been published and is considered live. |