Retailers Endpoint

Search for cannabis dispensaries across the US and Canada. Find retailers by location, name, or the services they offer.


Request

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

Parameters

  • Name
    id
    Type
    number
    Description

    Get a specific retailer by ID.

    id=10600
    
  • Name
    search
    Type
    string
    Description

    Search across name, city, and address fields.

    search=420
    
  • Name
    name
    Type
    string
    Description

    Search by retailer name (prefix match).

    name=Rise
    
  • Name
    state
    Type
    string
    Description

    Filter by US state or Canadian province (exact match). Use full name.

    state=California
    
  • Name
    states
    Type
    string
    Description

    Filter by multiple states (comma-separated).

    states=California,Colorado,Oregon
    
  • Name
    city
    Type
    string
    Description

    Filter by city name (prefix match). Best used with state.

    city=Los Angeles
    
  • Name
    zipcode
    Type
    string
    Description

    Filter by US ZIP code or Canadian postal code.

    zipcode=90210
    
  • Name
    lat
    Type
    number
    Description

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

  • Name
    lng
    Type
    number
    Description

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

  • Name
    distance
    Type
    number
    Description

    Radius in miles from lat/lng.

  • Name
    is_active
    Type
    boolean
    Description

    Filter by active status.

    is_active=true
    
  • Name
    is_medical
    Type
    boolean
    Description

    Filter for medical dispensaries.

    is_medical=true
    
  • Name
    is_recreational
    Type
    boolean
    Description

    Filter for recreational dispensaries.

    is_recreational=true
    
  • Name
    delivery_enabled
    Type
    boolean
    Description

    Filter for dispensaries offering delivery.

    delivery_enabled=true
    
  • Name
    pickup_enabled
    Type
    boolean
    Description

    Filter for dispensaries offering pickup/preorder.

    pickup_enabled=true
    
  • Name
    page
    Type
    number
    Description

    Page number. Default: 1. 20 results per page.


Example Requests

Search by Location

Find dispensaries near downtown Los Angeles:

curl "https://api.cannmenus.com/v1/retailers?state=California&lat=34.0522&lng=-118.2437&distance=5&page=1" \
  -H "X-Token: YOUR_API_TOKEN"

Search by Name

Find retailers with "rise" in the name in Illinois:

curl "https://api.cannmenus.com/v1/retailers?state=Illinois&name=rise&is_active=true&page=1" \
  -H "X-Token: YOUR_API_TOKEN"

Delivery Dispensaries

Find dispensaries offering delivery in California:

curl "https://api.cannmenus.com/v1/retailers?state=California&delivery_enabled=true&page=1" \
  -H "X-Token: YOUR_API_TOKEN"

Medical-Only Dispensaries

curl "https://api.cannmenus.com/v1/retailers?state=Florida&is_medical=true&page=1" \
  -H "X-Token: YOUR_API_TOKEN"

Response

{
  "data": [
    {
      "id": 10600,
      "dispensary_name": "Rise Dispensary Joliet",
      "is_active": true,
      "cann_dispensary_slug": "rise-dispensary-joliet",
      "website_url": "https://risecannabis.com",
      "contact_phone": "(815) 338-1234",
      "contact_email": "info@risecannabis.com",
      "physical_address": "2130 W Jefferson St",
      "city": "Joliet",
      "state": "Illinois",
      "zip_code": "60435",
      "country": "USA",
      "latitude": 41.5267,
      "longitude": -88.1338,
      "serves_medical_users": true,
      "serves_recreational_users": true,
      "google_place_id": "ChIJrTLr-GyuEmsRBfy61i59si0",
      "license_number": "DISP.000123",
      "payment_methods": {
        "cash_only": false,
        "credit_card": {"accepted": true},
        "debit_card": true
      },
      "online_services_offered": {"delivery": true, "pickup": true},
      "ratings": {"average": 4.5},
      "reviews_count": {"total": 100},
      "brand_ids": [789, 1042, 5163]
    }
  ],
  "pagination": {
    "total_records": 45,
    "current_page": 1,
    "total_pages": 3,
    "next_page": 2,
    "prev_page": null
  }
}

Response Fields

FieldTypeDescription
idnumberUnique retailer identifier (use for Products endpoint retailers parameter)
dispensary_namestringRetailer name
is_activebooleanWhether retailer is currently active
cann_dispensary_slugstringURL-friendly retailer identifier
website_urlstringRetailer website URL
contact_phonestringContact phone number
contact_emailstringContact email address
physical_addressstringStreet address
citystringCity
statestringState or province
zip_codestringZIP or postal code
countrystringCountry
latitudenumberLatitude coordinate
longitudenumberLongitude coordinate
serves_medical_usersbooleanWhether retailer serves medical patients
serves_recreational_usersbooleanWhether retailer serves recreational customers
google_place_idstringGoogle Maps Place ID for this location
license_numberstringState cannabis license number
payment_methodsobjectAccepted payment methods
online_services_offeredobjectAvailable online services (delivery, pickup)
ratingsobjectCustomer rating data
reviews_countobjectReview count data
brand_idsarrayIDs of brands carried by this retailer

Common Workflows

Get All Products for a Retailer

First, find the retailer:

import requests

API_URL = "https://api.cannmenus.com/v1"
headers = {"X-Token": "YOUR_API_TOKEN"}

# Find the retailer
response = requests.get(
    f"{API_URL}/retailers",
    headers=headers,
    params={"state": "Illinois", "name": "rise", "is_active": True, "page": 1}
)

retailer = response.json()["data"][0]
retailer_id = retailer["id"]
print(f"Found: {retailer['dispensary_name']} (ID: {retailer_id})")

Then, fetch their products:

# Get all products from this retailer
response = requests.get(
    f"{API_URL}/products",
    headers=headers,
    params={"states": "Illinois", "retailers": retailer_id, "page": 1}
)

products = response.json()["data"]
print(f"Found {len(products)} product SKUs")

Find Nearest Dispensary with Delivery

# Find dispensaries near user that offer delivery
response = requests.get(
    f"{API_URL}/retailers",
    headers=headers,
    params={
        "lat": 41.8781,
        "lng": -87.6298,
        "distance": 10,
        "delivery_enabled": True,
        "page": 1
    }
)

for retailer in response.json()["data"]:
    print(f"{retailer['dispensary_name']} - {retailer['physical_address']}, {retailer['city']}")