An Offer in Violet refers to a specific product offered by a merchant. While some platforms use the term “Products,” we have chosen to use the term “Offer” to refer to these products. Offers are used to provide detailed information about specific aspects of a product, including variations. Each combination of these variations is referred to as a SKU, which is also included in the Offer object.

Each Offer in Violet has a unique Offer ID, which allows for easy identification of individual offers. An offer also has an External ID, which is the ID assigned by the e-commerce platform.

Every Offer includes nested data for each individual SKU available from the merchant. Violet provides SKUs as part of the Offer response, allowing you to use them to populate your Product Detail Page (PDP) with all available variants. Additionally, the Offer includes the Merchant ID and structured media albums.

You can interact with our Offer model using our Catalog APIs, and a sample Offer can be seen below:

Generating a map of available SKUs for an individual offer across multiple variant types (such as color, size, etc.) can be a complex algorithm to implement correctly while integrating with Violet. To make it easier for you, Violet has a pre-built implementation of this algorithm as part of our open-source demo app that you can refer to.


What statuses can be associated with an Offer?

  • UNAVAILABLE This status for an offer means that the product associated with the offer is currently out of stock or not available for purchase. This status indicates that while the offer exists in the Violet system, it cannot be sold or purchased at the moment.
  • AVAILABLE This status for an offer means that the product associated with the offer is currently in stock and ready for purchase.
  • DISABLED_UNAVAILABLE This status indicates that an offer is currently disabled and the associated product is unavailable. This status typically occurs when a merchant’s offers are disabled as a whole, and the underlying product was already unavailable or out of stock before the disablement.
  • DISABLED_AVAILABLE This status means that an offer is currently disabled but the associated product is still available. This status typically occurs when a merchant’s offers are disabled as a whole, but the underlying product remains in stock or available on the merchant’s platform.
  • FOR_DELETION This status means that an offer has been marked for eventual removal from the Violet system. This status typically occurs after an offer has been in the ARCHIVED state for an extended period.
  • ARCHIVED This status means that a product has been deleted or removed from the merchant’s platform, but Violet hasn’t immediately deleted it from its system.

As a Channel, how should I interpret or act upon each status?

As a Merchant, how should I interpret or act upon each status?


Digital vs Physical Offers

Many items for sale these days are digital in nature and can be delivered to a shopper without requiring shipping. Violet uses the type field to denote if an Offer is physical and requires shipping or is digital.

This field follows the rules of the merchant’s e-commerce platform to determine if a product is digital or if it is physical. This can differ by platform, but in the event that a product has an unexpected value in the type field, the merchant will need to go edit that product in their e-commerce platform to make sure it is correctly configured as digital or physical.


Offer Shipping Data

Shipping data can now be populated on Offers for qualified Shopify merchants. This shipping data shows which shipping methods are available for each individual Offer and, if applicable, what requirements must be met to unlock a shipping method. This data can be especially useful for showing shoppers when an Offer has free shipping available.

Shipping data is currently limited to the Offers sourced from merchants on the SHOPIFY platform.

Enabling Shipping Data for a Merchants Offers
To enable the syncing of shipping data for a merchant you can toggle on the sync_product_shipping global feature flag. This can be done using the Toggle Global Feature Flag endpoint.

Including Shipping Data with Offers
By default the shipping data will not be included when retreiving an Offer. This is to ensure that consumers of the Offer endpoints can choose when to include or exclude this data and to account for how it may impact performance. To include the shipping data simply provide the ?include=shipping query param in your request. You can learn more about the include query param in the API Reference for the Get Offer by ID and Get All Merchant Offers endpoints.

Shipping Data Parity
Obtaining per-product shipping data from Shopify is very expensive in terms of API rate limits. For this reason we cannot sync shipping data on every Offer update. Instead we will sync shipping data soon after it is first toggled for a merchant and/or when a merchants catalog is first synced. From there the shipping data will be resynced on a scheduled basis that is determined by the size of a merchants catalog. The smaller a merchants catalog is the more frequently the shipping data can be updated. Infrequent updates will likely not cause issues as merchants typically make changes to their per-product shipping configurations infrequently.

You may not immediately see shipping data when it is first toggled on for a merchant. Our system will evaluate the merchants catalog and schedule it for processing in an upcoming sync.

If you need to resync the shipping data of a single Offer this can be done using the Get Offer by Offer ID endpoint. This will perform an immediate resync of the Offer and its associated shipping data.

Was this page helpful?