Skip to main content
Use the Developer Platform price books endpoints to manage marketplace channel list-price rules. Semantics match the workspace Price book UI (/app/{organizationId}/pricebook) and the Omni manage_price_book tool. Price books do not change canonical product prices in Omni. They rewrite channel list price at publish/catalog time by platform (and optional store/country). A rule uses its buyer formula (expression) when one is set, and its markup percent (marginValue) otherwise.

Authentication

Send an OmniCommerce API key or OAuth client-credentials token:
OAuth clients must include the scope on the client. API keys created from organization settings receive all developer scopes by default. Session-authenticated calls must include organizationId in the query (GET) or JSON body (writes). OpenAPI reference: API reference · Spec: openapi.json

List rules

Query parameters

Response

Create rule

Request body

Buyer formulas

expression computes the listed price from price, the catalog price. For BrandsGateway products the catalog price is the landed price that the seller formula wrote, not the supplier cost.
  • Operators: + - * /, parentheses, and percentages (9% is 0.09).
  • CEILING(number, significance) rounds up to a multiple, as in Excel.
  • IF(condition, value_if_true, value_if_false) with <, <=, >, >=, =, <>.
  • CURRENCY(rate, "HKD") multiplies by rate and marks the result as that ISO 4217 currency. A formula can name one currency.
Marketplace fee sheets usually give the payout of a listed price, such as price * (1 - (9% + 2%) * (1 + 9%)) for a 100 → 88.01 Lazada payout. To list at a price that nets the catalog price, divide by that factor instead: price / (1 - (9% + 2%) * (1 + 9%)) lists 100 at 113.62. The preview response sets belowCatalogPrice: true when a formula lists below the catalog price in the same currency. A formula must use price. Formulas that could not be evaluated (wrong argument counts, a comparison outside IF, an invalid currency code) are rejected with 400 when the rule is saved. If a saved formula still cannot price a product (for example it divides by zero or produces a price of 0 or less), publish and price updates for that listing fail instead of sending the catalog price. Scope uniqueness: one rule per platform + storeId + country combination. Returns 201 with { "rule": { ... } }.

Get / update / delete

Update accepts partial fields (storeId, country, marginValue, rounding, currency, expression, enabled). Send "expression": null to go back to markup percent. Platform cannot be changed after create.

Preview channel list price

Optional ruleId forces a specific rule instead of most-specific matching.

Response

When the rule has a buyer formula, markupPercent is omitted, and currency is set when the formula uses CURRENCY. If the matched formula cannot price listPrice, the response carries formulaError and applied is false. With a forced ruleId, that case returns 400. When no enabled rule matches, applied is false, source is canonical, and channelListPrice equals listPrice.

Matching priority

Most specific enabled rule wins for a given platform/store/country:
  1. platform + store + country
  2. platform + store
  3. platform + country
  4. platform only
  • Workspace UI: /app/{organizationId}/pricebook
  • Omni tool: manage_price_book (default Omni tool)
  • Product base price writes: POST /api/v1/sync (see API reference) or workspace product price update
  • Promotions (discounts/campaigns): Promotions API