Commerce CensusContactRequest access

API / Objects

The Observation object

The asset. A price is a mutable current-state field; an observation is a fact: this source reported this value at this instant. Store observations and current price becomes a view. Store prices and you have thrown away the thing you were building.

Fields

FieldTypeNotes
observation_id ·alwaysstringMonotonic within a listing.
listing_id ·alwaysstringWhat was read.
observed_at ·alwaystimestampWhen the source said it.
ingested_at ·alwaystimestampWhen we learned it. Differs, sometimes materially.
price_minorint | nullAs read.
availabilityenumAs read, including unknown.
seller_namestring | nullCaptures the buy-box holder at that instant.
source_channel ·alwaysenumdirect_api | merchant_feed | verified_agent | listing_view.
confidence ·alwaysfloatWeight for this specific reading.
JSON
{
  "observation_id": "obs_88412",
  "listing_id": "lst_2c81",
  "observed_at":  "2026-09-06T14:21:59Z",
  "ingested_at":  "2026-09-06T14:22:31Z",
  "price_minor": 19800,
  "availability": "in_stock",
  "seller_name": "Best Buy",
  "source_channel": "direct_api",
  "confidence": 1.00
}

Nuances

The series is a change log

An unchanged reading still counts as a poll but writes no row. Three rows over ninety days means the price changed twice, not that we looked three times — which is exactly why any statistic computed from the series must be time-weighted.

Two timestamps, always

observed_at and ingested_at diverge whenever a source lags or a backfill lands. Anything time-sensitive needs both, and collapsing them loses information you cannot reconstruct.

Related

Offer · Event · Listing