1. Platform & environment

Products, pricing, and ordering in OrderCloud marketplaces

This article describes features that enable marketplaces where buyers can select suppliers for pricing and direct ordering. These features support our vision for Marketplaces in OrderCloud, allowing suppliers to manage catalogs and set pricing on products they don't own.

Supplier ordering overview

Orders can be routed to a supplier in two ways:

  1. Set SupplierID as ToCompanyID on Order create:

    • Only writable on POST or initial PUT
    • Defaults to Marketplace owner if not specified
    • Requires Supplier.AllBuyersCanOrder to be true without explicit buyer-supplier relationship
    • Relationship must remain active until order submission
  2. Forward the order to the Supplier after Submit:

    • Currently only available if Supplier is the DefaultSupplierID on the Product

To add a line item for supplier fulfillment, one of these conditions must be met:

  • Supplier is the Product.DefaultSupplierID
  • Supplier owns the product
  • Marketplace Owner owns the product and opted-in the Supplier
  • Marketplace Owner owns the product with AllSuppliersCanSell true and Supplier opted-in

When AllSuppliersCanSell is true, suppliers can opt-in by:

  1. Creating an explicit product assignment via POST v1/products/assignments for custom pricing
  2. Using PUT v1/products/{productID}/suppliers/{supplierID} with optional defaultPriceScheduleID

For explicit Marketplace Owner-Supplier product relationships, pricing can be set by:

  1. Creating an explicit Product Assignment:

    • Marketplace Owner assignments: PriceSchedule owned by MPO or Supplier
    • Supplier assignments: PriceSchedule must be Supplier-owned
  2. Setting Default Pricing:

    • Marketplace Owner calls: PriceSchedule owned by MPO or Supplier
    • Supplier calls: PriceSchedule must be Supplier-owned

Marketplace resource ownership

Marketplace owners can manage all marketplace resources, including those owned by others. The OwnerID property is writable only on POST or initial PUT.

Suppliers can now own:

  • Catalogs
    • Direct buyer assignment capability
    • Can include MPO-owned products they sell
  • PriceSchedules
    • Must use own PriceSchedules for pricing
  • Promotions
    • Only valid when Order.ToCompanyID matches Promotion.OwnerID
  • Products
  • Shipments
  • Specs

Marketplace pricing

Key features:

  • Multiple ProductAssignments per Product/Party with different PriceScheduleIDs (unique SellerID required)
  • Supplier-specific pricing via SellerID parameter
  • LineItem pricing based on Order.ToCompanyID

Pricing precedence for supplier requests:

  1. Explicit ProductAssignment (SellerID = SupplierID)
    • Group level, then Buyer level
  2. Supplier's DefaultPriceSchedule
  3. Explicit ProductAssignment (SellerID = Marketplace Owner)
    • Group level, then Buyer level
  4. Product's DefaultPriceScheduleID

New properties

Supplier.AllBuyersCanOrder:

  • Marketplace Owner writable only
  • False restricts ToCompanyID to MPO or related suppliers

Product.AllSuppliersCanSell:

  • MPO writable on owned products only
  • Enables supplier opt-in for selling

PriceSchedule.SellerID:

  • MPO writable on POST/initial PUT
  • Required for MPO ProductAssignment management

New endpoints

GET v1/orders/all:

  • MPO: All marketplace orders
  • Buyer users: Outgoing orders
  • Supplier users: Incoming orders

Buyer-Supplier relationship endpoints:

  • GET v1/suppliers/{supplierID}/buyers
  • PUT v1/suppliers/{supplierID}/buyers/{buyerID}
  • DELETE v1/suppliers/{supplierID}/buyers/{buyerID}

Seller listing endpoint:

  • GET v1/me/sellers
    • Shows MPO and available suppliers
    • IDs valid for Order.ToCompanyID and product queries

Product view endpoints with seller-specific pricing:

  • GET v1/me/products?sellerID={sellerID}
  • GET v1/me/product/{productID}?sellerID={sellerID}

Supplier pricing endpoint:

  • PUT v1/products/{productID}/suppliers/{supplierID}?DefaultPriceScheduleID={id}

If you have suggestions for improving this article, let us know!