Commerce CensusContactRequest access

Object reference

Six objects carry everything. Product is identity, Listing is a product at a seller, Offer is a purchasable proposition, Observation is one immutable reading, Event is a derived change, and Memory is what you chose to remember.

Product

Identity, independent of any seller. One real-world item, one product_id, regardless of how many places sell it.

FieldTypeNotes
product_idstringStable. Safe to store as your foreign key.
gtinstring | nullGTIN-14, checksum-verified. Null in categories that publish none.
brandstring | nullNormalised.
titlestringCanonical title, not any one seller's.
categorystringDotted taxonomy path, e.g. electronics.audio.headphones.
attributesobjectCategory-specific. Pack size, strength, fitment, form factor.
variantsintCount of variant products under this one.
sellersintHow many sellers currently list it.

Listing

A product as carried by one seller. This is the unit that gets polled.

FieldTypeNotes
listing_idstringStable.
product_idstringThe canonical product it resolved to.
sellerstringSeller id, e.g. bestbuy or allbirds.com.
seller_skustringThe seller's own identifier.
urlstring | nullCanonical product link at that seller.
match.methodenumgtin_exact | mpn_exact | title_fuzzy | manual.
match.confidencefloat0–1. Below 0.7 the listing is flagged for review.
activeboolFalse once a seller stops carrying it.

Offer

What you could actually buy right now. On marketplaces the offer, not the product, is the entity that matters — the price belongs to whoever currently holds the position.

FieldTypeNotes
price_minorint | nullInteger minor units. Null means observed but unpriced.
currencystringISO 4217.
shipping_minorint | nullNull means not exposed — not zero.
landed_minorint | nullprice + shipping where both are known.
availabilityenumin_stock | out_of_stock | preorder | delisted | unknown.
offer_typeenumnew | used | open_box | marketplace | subscription.
seller_namestring | nullWho is actually selling. Differs from the marketplace.
sourceobjectchannel, confidence, observed_at. See the provenance model.

Observation

One immutable reading. Never updated, never deleted. Everything else about price is a view over these.

FieldTypeNotes
observation_idstringMonotonic within a listing.
listing_idstringWhat was read.
observed_attimestampWhen the source said it.
ingested_attimestampWhen we learned it. Differs, sometimes materially.
price_minorint | nullAs read.
availabilityenumAs read.
seller_namestring | nullAs read — captures buy-box holder at that instant.
source_channelenumdirect_api | merchant_feed | verified_agent | listing_view.
confidencefloatWeight for this reading.

Event

Derived from consecutive observations, never written independently — so the log is reproducible from the store.

FieldTypeNotes
event_idstringAlso the webhook-id and your idempotency key.
seqintMonotonic. Use as the replay cursor.
typeenumSee the event reference.
occurred_attimestampThe observation time that produced it.
product_id / listing_id / sellerstringWhat it happened to.
previous / currentobjectBoth sides of the change.

Memory

Namespaced per end user. Written by you, returned only to that namespace.

FieldTypeNotes
memory_idstringStable.
namespacestringYour scope for one end user or agent.
kindenumpreference | constraint | purchase | rejection | intent.
bodystringThe fact, in plain language.
subjectobject | nullOptional product_id, brand or category it attaches to.
expires_attimestamp | nullConstraints usually outlive intents.