Skip to main content
Nymble Commerce’s catalog is built for B2B complexity. Products have SKUs, rich attributes, quantity controls, multiple images, and customer-specific pricing that resolves automatically based on the authenticated user’s tier. You get a fully structured catalog API that drives both your customer-facing storefront and your internal ordering tools.

Products

Each product in your catalog is identified by a ProductId and a Sku. The table below covers the key fields returned on product responses.
FieldTypeDescription
ProductIdstringNymble Commerce’s internal unique identifier for this product.
SkustringYour product SKU. Used for line item matching on orders.
NamestringDisplay name of the product. Searchable.
DescriptionstringFull product description. Supports rich text. Searchable.
CategorystringThe primary category name for this product.
PricedecimalThe resolved price for the authenticated user’s tier.
PriceFormattedstringFormatted price string including currency symbol (e.g. "$24.99").
CurrencyCodestringISO currency code (e.g. "USD", "CAD").
PricesarrayFull list of ProductPrice objects — one per tier. See Price tiers.
QuantityOnHandintegerCurrent inventory quantity.
MinimumOrderQuantityintegerMinimum quantity a customer must order. Enforced at checkout.
QuantityIncrementintegerQuantity step size (e.g. 6 means orders must be in multiples of 6).
WeightdecimalProduct weight.
WeightUnitstringUnit of weight (e.g. "kg", "lb").
DimensionsstringProduct dimensions as a formatted string.
DimensionsUnitstringUnit for dimensions (e.g. "cm", "in").
UPCstringUniversal Product Code (barcode).
ActivebooleanWhether the product appears in standard catalog listings.
ProductTypestringType classification for the product.
ProductAttributesobjectCustom key-value attributes defined at the organization level.
ExternalIdstringYour identifier for this product in an external system (ERP, PIM).
CreatedAtdatetimeWhen the product was created.
UpdatedAtdatetimeWhen the product was last updated.

Example: product response

{
  "ProductId": "prod_a1b2c3",
  "Sku": "WDG-100-BLU",
  "Name": "Widget 100 — Blue",
  "Description": "Industrial-grade widget, 100mm, blue anodized finish.",
  "Category": "Widgets",
  "Price": 24.99,
  "PriceFormatted": "$24.99",
  "CurrencyCode": "USD",
  "Prices": [
    { "Tier": "Wholesale", "Price": 18.50, "PriceFormatted": "$18.50", "AtQuantity": 1 },
    { "Tier": "Retail",    "Price": 24.99, "PriceFormatted": "$24.99", "AtQuantity": 1 }
  ],
  "QuantityOnHand": 250,
  "MinimumOrderQuantity": 12,
  "QuantityIncrement": 12,
  "Active": true,
  "ExternalId": "ERP-SKU-00441"
}

Price tiers

Nymble Commerce’s pricing system is tier-based and token-driven. Each product carries a Prices array — a list of ProductPrice objects, one per tier defined in your organization. Each ProductPrice has:
FieldTypeDescription
TierstringThe tier name this price applies to (e.g. "Wholesale", "Retail", "Distributor").
PricedecimalThe numeric price for this tier.
PriceFormattedstringFormatted price string with currency symbol.
AtQuantityintegerThe quantity threshold at which this price applies (for volume pricing).
How tier resolution works: when an authenticated customer calls any catalog endpoint, Nymble Commerce reads the PriceTier claim from their JWT and returns the matching price in the top-level Price and PriceFormatted fields. The full Prices array is also included in the response so your storefront can display tiered or volume pricing tables.
Customer JWT contains: PriceTier = "Wholesale"

GET /api/products → Price: 18.50, PriceFormatted: "$18.50"
                         (Wholesale tier price resolved automatically)
Unauthenticated requests (e.g. public catalog browsing) return the default tier price configured on your organization.

Categories

Products are organized into a hierarchy of categories and subcategories. Use the categories API to build navigation menus, filter panels, and breadcrumb trails in your storefront. Each category has:
FieldTypeDescription
NamestringDisplay name of the category.
BreadcrumbstringFull path string (e.g. "Hardware > Fasteners > Bolts"). Useful for navigation display.
ActivebooleanWhether the category is visible in the catalog.
ImageUrlstringCDN URL for the category image.
SubCategoriesarrayNested list of child category objects — recursive for unlimited depth.
Root categories have no parent. Subcategories are nested within their parent’s SubCategories array. A single API call to GET /api/categories returns the full tree.
// Example category tree
{
  "Name": "Hardware",
  "Breadcrumb": "Hardware",
  "Active": true,
  "SubCategories": [
    {
      "Name": "Fasteners",
      "Breadcrumb": "Hardware > Fasteners",
      "Active": true,
      "SubCategories": [
        {
          "Name": "Bolts",
          "Breadcrumb": "Hardware > Fasteners > Bolts",
          "Active": true,
          "SubCategories": []
        }
      ]
    }
  ]
}

Images

Products support multiple images, served through Cloudflare’s CDN for fast, globally-distributed delivery. Image URLs are included in the Images array on product responses. Each image object contains a URL and metadata. Images are managed via the Cloudflare Images integration configured at the organization level — you upload once and Nymble Commerce handles resizing and CDN distribution automatically. Category images follow the same CDN pattern, with the URL constructed from your OrganizationId and the category’s Breadcrumb.

Product states

StateDescription
Active (Active: true)The product appears in standard catalog listings and search results. Customers can add it to their cart.
Inactive (Active: false)The product is hidden from all standard catalog endpoints. It does not appear in listings or search. Admins can still access inactive products directly by ID.
Use inactive state for seasonal items, discontinued products, or anything you want to retain in the system without surfacing to customers.

Searching and filtering

The product search endpoint supports:
  • Full-text search across Name and Description.
  • Category filter — return products belonging to a specific category.
  • Price range filter — filter by minimum and/or maximum price (resolved to the authenticated user’s tier).
  • Active status filter — include or exclude inactive products (admin only).
# Search for active widgets under $50 in the Hardware category
GET https://api.achievemomentum.com/api/products?search=widget&category=Hardware&maxPrice=50&active=true
Results are paginated. Use PageNumber and PageSize query parameters to navigate pages.
Set ExternalId on each product to match your ERP or PIM system’s product ID. This gives you a reliable cross-reference key for syncing inventory updates, price changes, and product data without relying on Nymble Commerce’s internal ProductId.