Endpoint
Fetch up to 50 SKUs per request:
GET https://app.buildmyonlinestore.com/api/embed/offers/STOREFRONT_ID?products=SKU1,SKU2
The response includes sellable offers that BMOS buy buttons and static storefront hydrators can trust.
Inventory Fields
availability:in_stockorout_of_stock.inventory_mode:tracked,continue_selling,untracked, orunavailable.inventory_tracking: true when source quantity should be treated as hard stock truth.inventory_quantity_known: true when BMOS has a real quantity to show.inventory_quantity: numeric stock quantity when known, otherwise null.
inventory_mode controls sellability independently from quantity. In tracked mode, zero is out of stock. continue_selling stays available at zero or negative quantity. untracked is always available with no authoritative count. unavailable disables the product regardless of quantity.
Shopify merchants can review mapping, resync, and reconciliation behavior in the Shopify Catalog Sync guide.
When inventory is unknown, generated static JSON-LD should default to https://schema.org/InStock and the visible UI should hydrate from public offers.
Optional Hydrator Script
Static sites can patch price, availability, and inventory elements with one script:
<script
src="https://app.buildmyonlinestore.com/bmos-offers-hydrator.js"
data-storefront-id="STOREFRONT_ID"
defer></script>
Add product-aware targets to the page:
<strong data-bmos-offer-price data-product-id="SKU">$9.99</strong>
<span data-bmos-offer-availability data-product-id="SKU">In Stock</span>
<span data-bmos-offer-inventory data-product-id="SKU" hidden></span>
The script batches SKUs, calls the public offers endpoint, and updates matching elements without blocking the initial page render.
Static Store Rule
Static storefronts should keep title, image, description, and product pages static for speed and SEO, but live commerce state should either hydrate from public offers or be refreshed by a Distribution Webhook rebuild.