Ten controllers cover the whole commerce surface, from a public product listing to a point-of-sale tab to a rental deposit deduction. The datatypes are the sf_* family.
Catalog
/storefront/data/:siteIdNo auth/storefront/productsJWT/storefront/product/:idJWT/storefront/product/:id/relatedJWT/storefront/categoriesJWT/storefront/collections/:collection?JWT/storefront/brands/:brand?JWT/storefront/attributes/:attribute?JWT/storefront/data/:siteId is the public bootstrap call — one request that gives a storefront everything it needs to render.
/storefront/product/:id resolves by slug, not only by sk.
Datatypes: sf_product, sf_collection, sf_brand, sf_attribute, sf_price_list.
Cart
/storefront/cart/get/:authorid/:cartid?JWT/storefront/cart/update/:cartidJWT/storefront/cart/clear/:cartidJWTCarts (sf_cart) are keyed by author, so a guest token from POST /profile/guest/auth is enough to hold one before sign-up.
Checkout
/storefront/checkout-cartJWT/storefront/checkout-buy-nowJWT/storefront/checkout-mixedJWT/storefront/take-paymentJWTcheckout-buy-now skips the cart for a single item; checkout-mixed handles a basket combining one-off purchases with subscriptions or rentals.
Payments
/storefront/payment-gatewaysJWT/storefront/verify-payment/:provider/:configId/:paymentIdJWTStripe:
/storefront/stripe/intentJWT/storefront/stripe/captureJWT/storefront/stripe/checkout-sessionJWT/storefront/stripe/subscription-sessionJWTStripe Terminal, for card-present payments:
/storefront/stripe/terminal/connection-tokenJWT/storefront/stripe/terminal/location/ensureJWT/storefront/stripe/terminal/intentJWTPayPal:
/storefront/paypal/configJWTOrders
/storefront/order/get/:author/:orderNumberJWT/storefront/orders/get/:authorJWT/storefront/order/:idJWT/storefront/order/:id/paymentsJWT/storefront/order/email/:email/:orderNumberJWTState transitions, each POST /storefront/order/<action>/:orderNumber:
| Action | Effect |
|---|---|
process | Accepted, being prepared |
ship | Handed to a carrier |
deliver | Delivered |
complete | Closed |
hold / release | Pause and resume |
cancel | Cancelled |
refund | Refunded |
set-status | Set an arbitrary status |
update | Amend order information |
Also POST /storefront/order/:id/items to add items, POST /storefront/order/:id/fire to fire items to the kitchen or fulfillment, and GET /storefront/order/send-welcome/:orderNumber.
Order workflows:
/storefront/workflows/order-managementJWT/storefront/workflows/order-management/:name?JWTPoint of sale
Tab-based POS, for hospitality as much as retail.
/storefront/pos/tabJWT/storefront/pos/tabsJWT/storefront/pos/tabs/closedJWT/storefront/pos/tab/:id/settleJWT/storefront/pos/tab/:id/splitJWT/storefront/pos/tab/:id/refundJWT/storefront/pos-categoriesJWTPrinting — payloads are separated from the print action, so a client can preview or route to a specific device:
/storefront/pos/tab/:id/print-checkJWT/storefront/pos/tab/:id/print-receiptJWT/storefront/pos/tab/:id/check-payloadJWT/storefront/pos/tab/:id/receipt-payloadJWT/storefront/pos/tab/:id/send-receiptJWTPrinting reaches physical hardware through hub-agent.
Service points — tables, chairs, bays:
/storefront/pos/tab/:id/assign-service-pointJWT/storefront/pos/tab/:id/release-service-pointJWT/storefront/service-point/:id/statusJWTInventory
Multi-location, with a reserve → fulfill lifecycle rather than a single quantity field.
/storefront/inventory/sku/:skuJWT/storefront/inventory/sku/:sku/location/:locationIdJWT/storefront/inventory/location/:locationIdJWT/storefront/inventoryJWT/storefront/inventory/adjustJWT/storefront/inventory/reserveJWT/storefront/inventory/releaseJWT/storefront/inventory/fulfillJWT/storefront/inventory/returnJWT/storefront/inventory/countJWT/storefront/inventory/sku/:sku/transactionsJWT/storefront/inventory/alerts/low-stockJWTTransfers between locations:
/storefront/inventory/transfersJWT/storefront/inventory/transfers/:transferId/shipJWT/storefront/inventory/transfers/:transferId/receiveJWT/storefront/inventory/transfers/:transferId/cancelJWTDatatypes: sf_inventory, sf_inventory_intake, sf_inventory_transfer, location.
Pricing
/storefront/pricing/calculateJWT/storefront/pricing/calculate-cartJWT/storefront/pricing/product/:skuJWT/storefront/pricing/price-listsJWT/storefront/pricing/price-listsJWT/storefront/pricing/customer-price-listsJWT/storefront/pricing/preview-as-customerJWTpreview-as-customer resolves the price a specific customer would see — the fastest way to debug a tier or price-list rule. Tiers are sf_customer_tier.
Discounts
/storefront/discounts/validateJWT/storefront/discounts/applyJWT/storefront/discounts/calculateJWT/storefront/discounts/automaticJWT/storefront/discounts/promotions/activeJWT/storefront/discountsJWT/storefront/discounts/:identifier/activateJWT/storefront/discounts/:identifier/deactivateJWT/storefront/discounts/:identifier/usageJWT/storefront/discounts/:identifier/reverseJWTvalidate checks a code without consuming it; usage records a redemption and reverse undoes one when an order is cancelled.
Gift cards
/storefront/giftcards/balanceJWT/storefront/giftcards/redeemJWT/storefront/giftcardsJWT/storefront/giftcards/batchJWT/storefront/giftcards/transferJWT/storefront/giftcards/:serial/activateJWT/storefront/giftcards/:serial/suspendJWT/storefront/giftcards/:serial/reactivateJWT/storefront/giftcards/:serial/cancelJWT/storefront/giftcards/:serial/refundJWTAddressed by serial, not sk. batch issues a run of cards in one call.
Invoices
/storefront/invoices/saveJWT/storefront/invoicesJWT/storefront/invoices/:id/sendJWT/storefront/invoices/:id/mark-paidJWT/storefront/invoices/:id/mark-overdueJWT/storefront/invoices/:id/reminderJWT/storefront/invoices/:id/create-orderJWT/storefront/invoices/:id/duplicateJWT/storefront/invoices/:id/refundJWT/storefront/invoices/:id/amount-dueJWT/storefront/invoices/dashboard/metricsJWTThe customer payment page is public:
/storefront/invoices/pay/:idNo auth/storefront/invoices/pay/:idNo authReturns
RMA-based, addressed by rmaNumber.
/storefront/returns/requestJWT/storefront/returns/my-returnsJWT/storefront/returns/rma/:rmaNumberJWT/storefront/returns/rma/:rmaNumber/shipJWT/storefront/returns/rma/:rmaNumber/cancelJWTOperator side — PUT /storefront/returns/:rmaNumber/<action> for approve, reject, receive, inspect, complete, cancel, plus POST …/notes.
The rma/* paths are the customer's view of the same record; the bare :rmaNumber paths are the operator's.
Rentals
Full custody lifecycle with deposits.
/storefront/rental/itemsJWT/storefront/rental/items/:sku/availabilityJWT/storefront/rental/items/:sku/priceJWT/storefront/rental/items/:sku/validate-restrictionsJWT/storefront/rentalJWT/storefront/rental/status/overdueJWT/storefront/rental/status/due-todayJWTState changes, PUT /storefront/rental/:rentalId/<action>: confirm, ready, checkout, picked-up, delivered, active, overdue, dropped-off, returned, checkin, complete, cancel, notes.
Deposits:
/storefront/rental/:rentalId/deposit/holdJWT/storefront/rental/:rentalId/deposit/refundJWT/storefront/rental/:rentalId/deposit/deductionJWT/storefront/rental/:rentalId/paymentJWTDatatypes: sf_rental, sf_rental_item, sf_rental_config.
Tax
/storefront/tax/calculateNo auth/storefront/tax/rateJWT/storefront/tax/productJWT/storefront/tax/check-exemptJWT/storefront/tax/apply-exemptionJWT/storefront/tax/remove-exemptionJWTCart tax calculation is public so a storefront can show tax before the visitor signs in. Rates are sf_tax_rate.
Shipping
38 handlers under /shipping, backed by EasyPost and Google Places.
/shipping/ratesNo auth/shipping/createJWT/shipping/track/:trackingNumberJWT/shipping/refresh-trackingJWT/shipping/cancelJWT/shipping/methodsJWTLabels:
/shipping/labelJWT/shipping/label/:shippingId/:format?JWTAddresses:
/shipping/address-autocompleteJWT/shipping/place-details/:placeIdJWT/shipping/verify-addressJWT/shipping/update-addressJWTOrder-scoped:
/shipping/order/ratesJWT/shipping/order/createJWT/shipping/order/manualJWT/shipping/order/shipments/:orderNumberJWT/shipping/order/status/:orderNumberJWTConfiguration, under /shipping/admin/*: providers, integrations, configs (CRUD plus set-default), per-product and bulk product shipping, preview-rate, calculate-packing, stats.
calculate-packing runs the box-packing algorithm — worth calling directly when a rate looks wrong.
Syndication
Push the catalog to shopping partners and social channels.
/storefront/sync/partnersJWT/storefront/sync/:partner/:productIdJWT/storefront/sync/all/:productIdJWT/storefront/sync/add-productsJWT/storefront/sync/products/:partnerJWT/storefront/sync/post-to-socialJWT/storefront/sync/preview-social-postJWT/storefront/sync/social-targets/:platformJWTFor marketplace selling proper — Amazon, eBay, Etsy — see Sales channels.
Subscriptions
/storefront/subscriptions/get/:author/:subscriptionid?JWT/storefront/update-subscriptionJWTDatatypes: sf_subscription, sf_subscription_plan.