Documentation

Sales Channels overview

Sync inventory and orders across Amazon, eBay, Shopify, WooCommerce, and more.

The Sales Channel module is a multi-marketplace sync layer. The Storefront module is the system of record. Sales Channel pushes catalog and inventory out to external marketplaces and pulls orders back into a unified order list. Channel-specific differences (FBA, item conditions, store domains, plugin compatibility) live behind a per-provider abstraction.

Supported channels

The module ships providers for marketplaces, shopping engines, social commerce, and own-store platforms.

ChannelTypeInventoryOrdersPricingFulfillment
AmazonmarketplaceyesyesyesFBA
eBaymarketplaceyesyesyesseller-managed
Walmart MarketplacemarketplaceyesyesyesWFS
Etsymarketplaceyesyesyesseller-managed
Shopifyown_storeyesyesyesyes
WooCommerceown_storeyesyesyesseller-managed
Google Merchant Centershoppingyesnoyesn/a
Microsoft Merchant Centershoppingyesnoyesn/a
Facebook / Instagram Shopsocialyesyesyesseller-managed
TikTok Shopsocialyesyesyesyes
Pinterest Shoppingsocialyesnoyesn/a

The full feature matrix is in src/sales-channel/constants/channels.constant.ts.

What the module does

  • Channel onboarding — OAuth and credential storage per channel.
  • Inventory sync — A master inventory in Storefront pushes to each channel; channels pull-in too. Reservations protect against overselling during checkout.
  • Order aggregation — Polls (or webhook-receives) orders from every connected channel into a unified aggregated_order collection. Status writeback closes the loop on fulfillment.
  • Pricing rules — Per-channel markup, promotions, and competitor-based dynamic pricing.
  • Listing optimization — Channel-specific product transformation (Amazon ASIN handling, eBay item-condition fields, Shopify variant IDs).
  • Channel mappings — Map your category and attribute taxonomy to the channel's required terms once; reuse on every push.
  • Channel templates — Reusable listing templates for bulk operations.

Module surface

GET/sales-channel/channelsJWT
List available channels.
GET/sales-channel/channels/configuredJWT
List enabled channels for the org.
POST/sales-channel/channels/:channelId/enableJWT
Enable a channel with config.
POST/sales-channel/channels/:channelId/disableJWT
Disable.
GET/sales-channel/channels/statusJWT
Status of every channel.
POST/sales-channel/channels/:channelId/executeJWT
Run a channel-specific operation.
POST/sales-channel/channels/bulk-executeJWT
Run an operation across multiple channels.
GET/sales-channel/sync/historyJWT
Recent sync runs.

Sub-controllers cover specific concerns: /sales-channel/inventory/*, /sales-channel/orders/*, /sales-channel/pricing/*, /sales-channel/mappings/*, /sales-channel/analytics/*, /sales-channel/listings/*.

Where each piece lives

TopicPage
Connect and authenticateSetup and OAuth
Sync stock levelsInventory sync
Pull and unify ordersOrder aggregation
Per-channel pricingPricing rules
Provider quirksAmazon, eBay, Shopify, WooCommerce

Cross-module wiring

  • Storefront is the source of truth for products and master inventory.
  • Upstream stores the OAuth credentials for each channel.
  • Sync queues background sync jobs.
  • Automation can trigger on order arrival from any channel and route fulfillment.

You don't need Sales Channel to use Storefront. Plug in a single channel only when you start selling on a marketplace. Each channel can be enabled and disabled independently.