Products Endpoint

Search for cannabis products across thousands of dispensaries. Filter by location, category, brand, potency, price, and more.


Request

GET https://api.cannmenus.com/v1/products

Required Parameters

At least one of these parameters must be provided:

  • Name
    states
    Type
    string | string[]
    Description

    US state(s) or Canadian province(s) to search. Use full names (e.g., "California", "Ontario").

    states=California
    states=California&states=Oregon
    

Location Parameters

Narrow results by geographic area:

  • Name
    lat
    Type
    number
    Description

    Latitude coordinate for location-based search. Must be used with lng.

  • Name
    lng
    Type
    number
    Description

    Longitude coordinate for location-based search. Must be used with lat.

  • Name
    distance
    Type
    number
    Description

    Radius in miles from the lat/lng point. Default: 10. Max: 100.

  • Name
    zipcode
    Type
    string
    Description

    US ZIP code or Canadian postal code. Alternative to lat/lng.

  • Name
    city
    Type
    string
    Description

    City name. Best used with states for accuracy.


Product Filters

  • Name
    category
    Type
    string
    Description

    Product category. See Categories reference for valid values.

    category=Flower
    category=Edible
    category=Vape
    
  • Name
    subcategory
    Type
    string
    Description

    Product subcategory. See Subcategories reference for valid values.

    subcategory=Gummy
    subcategory=Cartridge
    
  • Name
    tags
    Type
    string | string[]
    Description

    Product tags for detailed filtering. See Tags reference for valid values.

    tags=Live%20Resin
    tags=Indica&tags=Sugar%20Free
    
  • Name
    brand
    Type
    string
    Description

    Filter by brand name. Partial matching supported.

    brand=Stiiizy
    brand=Cookies
    
  • Name
    brand_id
    Type
    number
    Description

    Filter by exact brand ID.

  • Name
    retailers
    Type
    number | number[]
    Description

    Filter to specific retailer IDs. Use the Retailers endpoint to find IDs.

    retailers=10600
    retailers=10600&retailers=10601
    
  • Name
    name
    Type
    string
    Description

    Search product names. Partial matching supported.

    name=Blue%20Dream
    

Potency Filters

Filter by cannabinoid content:

  • Name
    min_percentage_thc
    Type
    number
    Description

    Minimum THC percentage (0-100). For flower, concentrates, vapes.

  • Name
    max_percentage_thc
    Type
    number
    Description

    Maximum THC percentage (0-100).

  • Name
    min_percentage_cbd
    Type
    number
    Description

    Minimum CBD percentage (0-100).

  • Name
    max_percentage_cbd
    Type
    number
    Description

    Maximum CBD percentage (0-100).

  • Name
    min_mg_thc
    Type
    number
    Description

    Minimum THC milligrams. For edibles, tinctures, topicals.

  • Name
    max_mg_thc
    Type
    number
    Description

    Maximum THC milligrams.

  • Name
    min_mg_cbd
    Type
    number
    Description

    Minimum CBD milligrams.

  • Name
    max_mg_cbd
    Type
    number
    Description

    Maximum CBD milligrams.


Price Filters

  • Name
    min_price
    Type
    number
    Description

    Minimum product price in dollars.

  • Name
    max_price
    Type
    number
    Description

    Maximum product price in dollars.


  • Name
    recreational
    Type
    boolean
    Description

    Filter to recreational products only.

    recreational=true
    
  • Name
    medical
    Type
    boolean
    Description

    Filter to medical products only.

    medical=true
    

Pagination

  • Name
    page
    Type
    number
    Description

    Page number to retrieve. Default: 1. Each page contains up to 20 SKU groups.


Example Requests

Basic Search

Search for flower in California:

curl "https://api.cannmenus.com/v1/products?states=California&category=Flower&page=1" \
  -H "X-Token: YOUR_API_TOKEN"

Location-Based Search

Find edibles within 5 miles of Denver:

curl "https://api.cannmenus.com/v1/products?states=Colorado&category=Edible&lat=39.7392&lng=-104.9903&distance=5&page=1" \
  -H "X-Token: YOUR_API_TOKEN"

Potency Filter

High-THC concentrates in Washington:

curl "https://api.cannmenus.com/v1/products?states=Washington&category=Concentrate&min_percentage_thc=80&page=1" \
  -H "X-Token: YOUR_API_TOKEN"

Price Range

Budget-friendly flower under $30 in Oregon:

curl "https://api.cannmenus.com/v1/products?states=Oregon&category=Flower&max_price=30&page=1" \
  -H "X-Token: YOUR_API_TOKEN"

Multiple Filters

Live resin vapes from a specific brand in Nevada:

curl "https://api.cannmenus.com/v1/products?states=Nevada&category=Vape&brand=Stiiizy&tags=Live%20Resin&page=1" \
  -H "X-Token: YOUR_API_TOKEN"

Response

{
  "data": [
    {
      "retailer_id": "10600",
      "sku": "07A0Sbb8OieeaR8rIW6MVHRw",
      "products": [
        {
          "cann_sku_id": "07A0Sbb8OieeaR8rIW6MVHRw",
          "brand_name": "Cookies",
          "brand_id": 1042,
          "raw_product_name": "Cookies - Gary Payton 3.5g",
          "product_name": "Gary Payton",
          "raw_weight_string": "3.5g",
          "display_weight": "3.5g",
          "raw_product_category": "Flower",
          "category": "Flower",
          "raw_subcategory": "Flower",
          "subcategory": null,
          "product_tags": ["Hybrid", "Indoor"],
          "percentage_thc": 28.5,
          "percentage_cbd": 0.1,
          "mg_thc": null,
          "mg_cbd": null,
          "quantity_per_package": 1,
          "medical": false,
          "recreational": true,
          "latest_price": 55.00,
          "menu_provider": "Dutchie"
        }
      ]
    }
  ],
  "pagination": {
    "total_records": 1250,
    "current_page": 1,
    "total_pages": 63,
    "next_page": 2,
    "prev_page": null
  }
}

Response Fields

FieldTypeDescription
retailer_idstringUnique dispensary identifier
skustringUnique product variant identifier
productsarrayListings for this SKU (may include multiple menu providers)
cann_sku_idstringSame as parent sku
brand_namestringBrand name
brand_idnumberUnique brand identifier
raw_product_namestringOriginal product name from menu provider
product_namestringNormalized product name
display_weightstringProduct size/weight
categorystringNormalized category
subcategorystringNormalized subcategory (if applicable)
product_tagsarrayApplied product tags
percentage_thcnumberTHC percentage (for flower, concentrates)
percentage_cbdnumberCBD percentage
mg_thcnumberTHC milligrams (for edibles, tinctures)
mg_cbdnumberCBD milligrams
latest_pricenumberCurrent retail price
menu_providerstringSource platform
recreationalbooleanAvailable for recreational purchase
medicalbooleanAvailable for medical purchase

Best Practices

Use Location Filters for Performance

Queries with lat/lng or zipcode are faster and return more relevant results:

# Faster - location-scoped
?states=California&lat=34.0522&lng=-118.2437&distance=10

# Slower - state-wide scan
?states=California

Paginate Through All Results

Don't assume all results fit on one page. Always check pagination.next_page:

all_products = []
page = 1

while True:
    response = requests.get(
        f"{API_URL}/products",
        headers=headers,
        params={"states": "California", "category": "Flower", "page": page}
    )
    data = response.json()
    all_products.extend(data["data"])

    if data["pagination"]["next_page"] is None:
        break
    page += 1

Cache Retailer IDs

If you frequently query products from the same dispensaries, cache their retailer IDs and use the retailers parameter for faster lookups.