Retailers Endpoint
Search for cannabis dispensaries across the US and Canada. Find retailers by location, name, or the products they carry.
Request
GET https://api.cannmenus.com/v1/retailers
Parameters
- Name
state- Type
- string
- Description
Filter by US state or Canadian province. Use full name (e.g., "California", "Ontario").
- Name
city- Type
- string
- Description
Filter by city name. Best used with
statefor accuracy.
- Name
zipcode- Type
- string
- Description
Filter by US ZIP code or Canadian postal code.
- Name
lat- Type
- number
- Description
Latitude for location-based search. Must be used with
lng.
- Name
lng- Type
- number
- Description
Longitude for location-based search. Must be used with
lat.
- Name
distance- Type
- number
- Description
Radius in miles from lat/lng. Default:
10. Max:100.
- Name
name- Type
- string
- Description
Search by retailer name. Partial matching supported.
- Name
category- Type
- string
- Description
Filter to retailers carrying products in this category.
- Name
brand- Type
- string
- Description
Filter to retailers carrying this brand.
- Name
menu_type- Type
- string
- Description
Filter by menu type:
recreational,medical, orboth.
- Name
product_tags- Type
- string | string[]
- Description
Filter to retailers with products matching these tags.
- Name
is_active- Type
- boolean
- Description
Filter to active retailers only. Default:
true.
- Name
page- Type
- number
- Description
Page number. Default:
1.
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"
Find Retailers by Brand
Find dispensaries that carry Cookies brand products:
curl "https://api.cannmenus.com/v1/retailers?state=California&brand=Cookies&page=1" \
-H "X-Token: YOUR_API_TOKEN"
Medical-Only Dispensaries
curl "https://api.cannmenus.com/v1/retailers?state=Florida&menu_type=medical&page=1" \
-H "X-Token: YOUR_API_TOKEN"
Response
{
"data": [
{
"id": 10600,
"dispensary_name": "Rise Dispensary Joliet",
"address": "2130 W Jefferson St",
"city": "Joliet",
"state": "Illinois",
"zipcode": "60435",
"latitude": 41.5267,
"longitude": -88.1338,
"phone": "(815) 338-1234",
"website": "https://risecannabis.com",
"menu_providers": ["Dutchie", "Leafly"],
"menu_type": "both",
"is_active": true,
"last_updated": "2024-01-15T14:32:00Z"
}
],
"pagination": {
"total_records": 45,
"current_page": 1,
"total_pages": 3,
"next_page": 2,
"prev_page": null
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
id | number | Unique retailer identifier (use for Products endpoint) |
dispensary_name | string | Retailer name |
address | string | Street address |
city | string | City |
state | string | State or province |
zipcode | string | ZIP or postal code |
latitude | number | Latitude coordinate |
longitude | number | Longitude coordinate |
phone | string | Contact phone number |
website | string | Retailer website URL |
menu_providers | array | Platforms where this retailer's menu is sourced |
menu_type | string | recreational, medical, or both |
is_active | boolean | Whether retailer is currently active |
last_updated | string | ISO 8601 timestamp of last menu update |
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 Specific Product
# Find dispensaries near user that carry a specific brand
response = requests.get(
f"{API_URL}/retailers",
headers=headers,
params={
"lat": 41.8781,
"lng": -87.6298,
"distance": 10,
"brand": "Cresco",
"page": 1
}
)
for retailer in response.json()["data"]:
print(f"{retailer['dispensary_name']} - {retailer['address']}, {retailer['city']}")
