Commerce CensusContactRequest access

API / Objects

The Offer object

What you could actually buy right now. On a marketplace the offer, not the product, is the entity that matters — the price belongs to whoever currently holds the buy box, and that may be a reseller you have never heard of.

Fields

FieldTypeNotes
offer_id ·alwaysstringStable.
listing_id / product_id ·alwaysstringWhat it is an offer for.
price_minor ·alwaysint | nullInteger minor units. Null means observed but unpriced.
currency ·alwaysstringISO 4217.
shipping_minorint | nullNull means not exposed — never assume zero.
landed_minorint | nullprice + shipping where both are known. The only comparable figure.
compare_at_minorint | nullThe seller's own reference price. Useful, and frequently fiction — verify against history.
unit_priceobject | null{ value, unit } — the only valid comparison across pack sizes.
conditionenumnew | used | refurbished | open_box.
offer_typeenumstandard | marketplace | subscription | bulk_tier.
seller_namestring | nullWho is actually selling. Differs from the marketplace itself.
availabilityenumSee the Variant nuance — unknown is a real value.
sourceobjectchannel, confidence, observed_at. Always returned, never trimmed.
JSON
{
  "offer_id": "off_2c81",
  "product_id": "prd_8Fk2xQ",
  "price_minor": 19800, "currency": "USD",
  "shipping_minor": 0, "landed_minor": 19800,
  "compare_at_minor": 39800,
  "condition": "new", "offer_type": "standard",
  "seller": "bestbuy", "seller_name": "Best Buy",
  "availability": "in_stock",
  "source": { "channel": "direct_api", "confidence": 1.00,
              "observed_at": "2026-09-08T14:02:11Z" }
}

Nuances

compare_at is the seller's claim, not a fact

It is carried because it is useful, and it should never be the basis of a discount claim you publish. Percentile against the product's own history is the defensible version.

Subscription and one-time prices are separate offers

Blending a subscribe-and-save price with a one-time price makes every seller look cheaper than it is at the moment of purchase. They are distinct offers with distinct `offer_type`.