Developer API

The Cannabis Wholesale API Built for POS integration

Connect your point-of-sale, ERP, or custom application to the Cannabrands wholesale marketplace. LeafLink-compatible endpoints mean Dutchie connects by changing one URL.

LeafLink V2 Compatible Rate-limited Business-isolated

Two API surfaces. One platform. Connect any way you need.

Two API surfaces, one catalog

Choose the interface that fits your integration. Both access the same real-time data.

LeafLink V2 Compatible

Instant POS Integration

/v1/

Dutchie, Treez, and any LeafLink-compatible POS connects by changing one URL. Same pagination format, same price objects, same field names.

  • Products
  • Brands
  • Batches
  • Customers, Licenses, Categories, Strains

Dutchie connects in minutes, not months.

Full Platform Access

Hub Native API

/v2/

Complete access to every Hub capability. Raw pricing with quantity breaks, full cannabinoid profiles, tier visibility, COA files, and more.

  • Everything in V2
  • Quantity Breaks & Tier Pricing
  • Full COA Data & Terpene Profiles
  • Advanced Pricing & Suite Data

The complete platform, fully programmable.

From key generation to first sync in three steps.

How it works

Three steps from zero to syncing your catalog.

Generate API Key

Owner or admin creates a key in Settings > Integrations. Business-scoped and SHA-256 hashed at rest. The plaintext key is shown once.

Make Requests

Standard REST endpoints with Authorization: App cb_... header. JSON responses with cursor pagination.

Sync Your Catalog

Products, brands, batches, and inventory flow into your POS or custom system automatically. Keep your storefront current without manual updates.

Security

Enterprise-grade security

API keys are business-scoped, not user-scoped. Every key is isolated to a single business and can only access that business's data.

  • SHA-256 hashed at rest — plaintext shown once at creation
  • Rate limited: 300 requests per minute per key
  • Business isolation: keys can only access their own data
  • Revocable instantly from the dashboard
Terminal
$ curl -H "Authorization: App cb_a1b2c3d4..." \
https://api.cannabrands.app/v1/products/
Response
{
"count": 247,
"next": "...?cursor=eyJpZCI6MjV9",
"previous": null,
"results": [
{
"name": "Purple Punch 3.5g",
"listing_state": "Available",
"unit_price": {
"amount": "18.00",
"currency": "USD"
}
}
]
}

Every resource is documented with request and response examples.

Endpoints

Browse available resources for each API surface.

https://api.cannabrands.app/v1/
https://api.cannabrands.app/v2/

Products

Product catalog with LeafLink-format pricing and availability.

GET /products/
GET /products/{id}/

Brands

Brand profiles, logos, and company information.

GET /brands/
GET /brands/{id}/

Batches

Batch-level inventory with COA data and expiration dates.

GET /batches/
GET /batches/{id}/

Customers

Licensed dispensary customer records.

GET /customers/
GET /customers/{id}/

Companies

Company entities linked to licenses and contacts.

GET /companies/
GET /companies/{id}/

Licenses

State license numbers, types, and verification status.

GET /licenses/
GET /licenses/{id}/

Product Categories

Cannabis product category taxonomy.

GET /product-categories/
GET /product-categories/{id}/

Product Lines

Brand product line groupings.

GET /product-lines/
GET /product-lines/{id}/

Strains

Strain names, genetics, and classification.

GET /strains/
GET /strains/{id}/

Products

Full product data with quantity breaks and tier visibility.

GET /products/
GET /products/{hashid}/

Brands

Complete brand profiles with analytics metadata.

GET /brands/
GET /brands/{hashid}/

Batches

Batches with full cannabinoid panels and terpene profiles.

GET /batches/
GET /batches/{hashid}/

Customers

Customer records with pricing tier assignments.

GET /customers/
GET /customers/{hashid}/

Pricing

Advanced pricing rules, quantity breaks, and tier overrides.

GET /pricing/
GET /pricing/{hashid}/

COA Data

Parsed COA documents with cannabinoid and terpene arrays.

GET /coa/
GET /coa/{hashid}/

Inventory

Real-time inventory levels with batch allocation.

GET /inventory/
GET /inventory/{hashid}/

Categories

Full category tree with subcategories.

GET /categories/
GET /categories/{hashid}/

Strains

Strain data with genetics and effect profiles.

GET /strains/
GET /strains/{hashid}/

Response format comparison

Same product, two levels of detail. Pick the format your integration needs.

LeafLink V2 POS-compatible format
GET /v1/products/42/
{
"id": 42,
"name": "Purple Punch 3.5g",
"listing_state": "Available",
"unit_price": {
"amount": "18.00",
"currency": "USD"
},
"brand": {
"id": 7,
"name": "Emerald Peak"
},
"category": "Flower"
}
Hub Native Full platform data
GET /v2/products/78xd4/
{
"hashid": "78xd4",
"name": "Purple Punch 3.5g",
"unit_price": 18.00,
"quantity_breaks": [
{ "min": 100, "price": 16.50 },
{ "min": 500, "price": 14.75 }
],
"tier_visibility": "all",
"primary_batch": {
"thc": 28.4,
"cbd": 0.8,
"terpenes": ["Myrcene", ...]
}
}

POS systems that connect today

Any POS that supports the LeafLink V2 API can connect to Cannabrands.

Dutchie

Connected

Treez

Coming Soon

Meadow

Coming Soon

Flowhub

Coming Soon

Any POS that supports the LeafLink V2 API can connect to Cannabrands by pointing to our base URL.

Ready to connect?

Get your API key and start syncing in minutes. Full documentation, sample requests, and a sandbox environment are available.