Used Newie, our AI search tool in the docs? Take a 2-minute survey to rate your experience!

Implementing price overrides in Associate App

Prev Next

Price overrides allow store associates to change the price of an individual item at checkout — higher or lower than the catalog price. Typical use cases include:

  • Correcting a promotion not applying correctly in the app

  • Handling incorrect pricebook data

  • Managing exchanges with already-applied promotions


Configuration and setup

Enabling price overrides

Configure these properties in cart_management_v2 via the Associate App Config API. See Manual Discounts.

Property

Description

orderDiscount

Enables order-level manual discount

itemDiscount

Enables item-level manual discount

priceOverride

Enables item-level price override

Excluding products from price overrides

To prevent specific products from being overridden, set the price_override_exclusion_list via the Checkout Configuration API. This exclusion applies across all stores, catalogs, and pricebooks.

Configuring reason codes

Predefined reason codes can be set up so associates select a reason rather than entering free-form text. If no reason codes are configured, a free-text field (max 256 characters) is displayed instead.

  • Create: Use the create reason code method, specifying code and name (for example, dmgd / Damaged).

  • Update: Use the Update reason code method.

  • Delete: Use the Delete reason codes method.

Note

Ensure the Accept-Language header matches the locale set for the store. To display a free-text field instead, do not create a reason code for the store's locale.

Printing receipt templates

To print the correct overridden price on receipts, pull from the price_net field rather than price_catalog for items with price overrides applied. Apply this consistently across sales, exchange, and return receipt templates.


Using price overrides

  1. Tap the item, then tap Price override.

  2. Select a predefined reason code (or enter free-form text if no codes are configured).

  3. Enter the new price and tap Apply.

  4. To remove the price override, tap the item, then tap Remove discount.

Limitations

  • A manual discount must be removed before applying a price override, and vice versa.

  • Cart-level discounts can still be applied, but items with a price override are not affected by them.

  • The override does not change the catalog price — if the same item is added again, you must reapply the override.


ERP integration via the Event Stream

Triggering an event

When an in-store or endless aisle order is completed (including orders with price overrides), NewStore emits the order.opened event via the Event Stream.

Relevant payload fields

Field

Description

pricebook_price

Original catalog price

list_price

Listed price

overridden_price

Price set by the associate override

override_reason

Reason provided for the override

item_discounts

Item-level discount amount

order_discounts

Order-level discount amount

Integrating with the Event Stream

  1. Subscribe to the order.opened event via the Event Stream.

  2. Fetch additional details (for example, payment data) via the GraphQL API, as payments are processed asynchronously.

  3. Create the sales transaction in the ERP using item pricing data, referencing overridden_price where applicable.

Sample GraphQL query

query MyQuery {
  order(id: "012345Ab-CdEf-GhIj-KlMn-OpQrStUvWxYz", tenant: "dodici") {
    externalId
    placedAt
    demandLocationId
    currency
    isExchange
    isHistorical
    channel
    channelType
    shippingTax
    shippingTotal
    taxExempt
    taxStrategy
    taxTotal
    subtotal
    grandTotal
    discounts {
      edges {
        node {
          couponCode
        }
      }
    }
    paymentAccount {
      instruments {
        edges {
          node {
            paymentMethod
            paymentOrigin
            paymentProvider
            paymentAccountTransactions {
              edges {
                node {
                  amount
                  currency
                  transactionType
                }
              }
            }
          }
        }
      }
    }
    items {
      edges {
        node {
          productId
          quantity
          pricebookPrice
          itemDiscounts
          orderDiscounts
          tax
          shippingServiceLevel
          fulfillmentLocationId
        }
      }
    }
  }
}

See these guides for more information:


Exception handling

Scenario

Recommended Handling

ERP unavailable

Return 500; the Event Stream automatically retries the event

Payment details unavailable

Return 200 and move the event to an internal queue (for example, SQS) for reprocessing later

Data extraction best practices

  • Use REST APIs as the primary data source — they are the source of truth with no processing delay.

  • Use GraphQL to supplement event data with additional context (for example, payment details), but do not use it as a source of truth or for bulk historical queries.

  • Use the Event Stream to trigger downstream workflows in real time. See the Data reconciliation and completeness playbook.