A checkout session was abandoned (versioned lifecycle contract)
serving.checkout.abandonedevent_versionstringrequiredSemver of this event contract. Starts at "1.0"; bump on a breaking payload change.
event_idstringrequiredFresh per emission — a ULID prefixed "evt_", lexicographically sortable by emission time.
occurred_atstring<date-time>requiredmerchant_idstringrequiredstore_idstringrequiredsurfacestringrequiredBest-effort Google surface, derived from the UCP-Agent header's profile-URL host. "unknown" when the header is absent or doesn't recognizably match a known Google surface.
google_ai_modegoogle_geminiunknowncheckout_idstringAbsent on serving.request.telemetry_recorded; the Sarvex checkout session id everywhere else.
cart_snapshotcart_snapshotrequiredShow propertiesHide properties
currencystringrequiredtotal_minorintegerrequiredline_itemscart_line_item_snapshot[]requiredShow propertiesHide properties
cart_line_item_snapshotskustringrequiredquantityintegerrequiredunit_price_minorintegerrequired0 when no live connector pricing was ever resolved for this session (see cart_snapshot).
stagestringrequiredThe SessionState the session was in when it went quiet (added for the Lost Revenue Ledger, additive to the original contract) — distinguishes ordinary top-of-funnel drop-off from a stall right before the final complete call.
incompleteready_for_completemessage_idstringrequiredUnique per message; consumers de-duplicate on this.
ordering_keystringrequiredThe store_id. Guarantees per-store ordering; the catalog/serving tenant boundary (a store belongs to one merchant — see architecture §2a).
occurred_atstring<date-time>requiredsequenceinteger<int64>Monotonic per-connector sequence carried from the origin signal (ingest events only).
trace_idstringCorrelates a chain of events from one originating cause.
schema_versionstringrequired