Skip to content

Shops & products

List shops

GET /api/v2/public/orgs/{orgId}/shops
Authorization: Bearer {token}

Scope: products.read

Response

{
  "data": [
    { "shop_id": "shop1", "name": "Demo Shop DEV", "is_active": true }
  ]
}

Use shop_id values in product catalog and order calls.


List shop products

GET /api/v2/public/orgs/{orgId}/products?shop_id=shop1&limit=50&page=1
Authorization: Bearer {token}

Scope: products.read

Query Required Default Description
shop_id Yes Shop belonging to org
limit No 50 Page size
page No 1 Page number

Get single product

GET /api/v2/public/orgs/{orgId}/products/{p1Id}?shop_id=shop1
Authorization: Bearer {token}

Scope: products.read

{
  "p1_id": "12345",
  "name": "Product name",
  "slug": "product-slug",
  "category": "Blüten",
  "price": 8.99,
  "stock_quantity": 100,
  "shop_id": "shop1"
}

Add product to org inventory

Adds a global catalog product to the organization's inventory (required before shop assignment).

POST /api/v2/public/orgs/{orgId}/products/add-to-inventory
Authorization: Bearer {token}
Content-Type: application/json

{
  "p1_id": "12345",
  "initial_stock": 10,
  "price": 8.99
}

Scope: products.write

Field Required Description
p1_id Yes Catalog product id
initial_stock No Default 1
price No Org-specific price override

Update product

PUT /api/v2/public/orgs/{orgId}/products/{p1Id}
Authorization: Bearer {token}
Content-Type: application/json

{
  "name": "Updated name",
  "price": 9.99,
  "available": true
}

Scope: products.write

Product must exist in org inventory. Optional fields include name, slug, description, category, price, THC/CBD, and availability flags.


Shop assignment

See also Inventory & stock for stock prerequisites.

Attach product to shop

Product must have stock > 0 in org inventory. shop_id must belong to {orgId}.

POST /api/v2/public/orgs/{orgId}/shops/attach-product
Authorization: Bearer {token}
Content-Type: application/json

{
  "shop_id": "shop1",
  "p1_id": "12345",
  "overrides": {},
  "mode": "merge"
}

Scope: products.write

Detach product from shop

POST /api/v2/public/orgs/{orgId}/shops/detach-product
Authorization: Bearer {token}
Content-Type: application/json

{ "shop_id": "shop1", "p1_id": "12345" }

Set shop product overrides

POST /api/v2/public/orgs/{orgId}/shops/product-overrides
Authorization: Bearer {token}
Content-Type: application/json

{
  "shop_id": "shop1",
  "p1_id": "12345",
  "overrides": { "price": 9.99 },
  "mode": "merge"
}
mode Behavior
merge Deep-merge overrides (default)
replace Replace entire overrides object