Features

Everything to run a store, inside Umbraco

A complete commerce surface — from catalog to checkout — that editors manage in the backoffice and developers extend with a clean, typed API.

Catalog & merchandising

Products & variants

Unlimited products with variants, dimensions, bundles and rich media — modeled as Umbraco content.

Categories & navigation

Hierarchical categories and facets with drag-and-drop ordering in the backoffice content tree.

Pricing & discounts

Customer groups, currency-specific pricing and scheduled promotions with usage limits.

Search & facets

Fast on-site search with faceted filtering, powered by an index tuned for commerce.

Cart & checkout

Optimized checkout

A streamlined, conversion-focused checkout with guest and account paths.

Shipping & tax

Pluggable shipping providers and accurate tax calculation per region and product type.

Payments

Stripe, Klarna and Mollie out of the box, plus a clean provider interface for more.

Orders & returns

Full order lifecycle, returns, partial refunds and exportable reports.

Platform & developer experience

Headless API

A typed JSON API for catalog, cart and checkout — build any frontend you like.

Multi-store

Multiple stores, currencies, languages and domains from one Umbraco install.

Extensible

Compose pipelines, event handlers and custom property editors — Umbraco-first extensibility.

SEO & performance

Canonical URLs, structured data, sitemaps and output caching for fast product pages.

A typed API for headless commerce

Query the catalog, build a cart and place orders from any client. The API is versioned, documented and shaped around your Umbraco content model — so your storefronts stay in sync with the backoffice.

  • REST + JSON endpoints
  • OpenAPI schema generated from your model
  • Cart, checkout and order webhooks
  • Per-channel API keys and rate limits
storefront.ts
const res = await fetch(
  "https://shop.local/umbraco/api/optimus/catalog",
  { headers: { "X-Api-Key": KEY } }
);
const { products, facets } = await res.json();

await fetch("/umbraco/api/optimus/cart/add", {
  method: "POST",
  body: JSON.stringify({ sku: "TEE-01", qty: 2 })
});

Want the full feature matrix?

Compare Community, Pro and Enterprise side by side.

Compare plans