Skip to content
SarvexDocs
Esc
↑↓navigate↵open⌘Jpreview

Per-request telemetry (signature/negotiation outcome, status, latency)

RECEIVEserving.request.telemetry_recorded
Message
event_versionstringrequired

Semver of this event contract. Starts at "1.0"; bump on a breaking payload change.

event_idstringrequired

Fresh per emission — a ULID prefixed "evt_", lexicographically sortable by emission time.

matches ^evt_[0-9A-HJKMNP-TV-Z]{26}$
occurred_atstring<date-time>required
merchant_idstringrequired
store_idstringrequired
surfacestringrequired

Best-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.

Allowed:google_ai_modegoogle_geminiunknown
checkout_idstring

Absent on serving.request.telemetry_recorded; the Sarvex checkout session id everywhere else.

agent_platformstring | null

Best-effort agent platform identification from the UCP-Agent header; null when the header wasn't present.

route_templatestringrequired
methodstringrequired
status_codeintegerrequired
latency_msintegerrequired
signature_resultstringrequired

Kept as the pre-existing four-value domain rather than the generic contract's three-value (valid/invalid/absent) — see this channel's description for why.

Allowed:validinvalidmissingnot_applicable
negotiation_resultstringrequired
Allowed:succeededfailednot_applicable
syntheticbooleanrequired

True for Sarvex's own endpoint-health probe traffic — excluded from real-traffic evaluation.

request_idstring
Headers
message_idstringrequired

Unique per message; consumers de-duplicate on this.

ordering_keystringrequired

The store_id. Guarantees per-store ordering; the catalog/serving tenant boundary (a store belongs to one merchant — see architecture §2a).

occurred_atstring<date-time>required
sequenceinteger<int64>

Monotonic per-connector sequence carried from the origin signal (ingest events only).

trace_idstring

Correlates a chain of events from one originating cause.

schema_versionstringrequired
Try it
Server
Payload

Live sending isn't possible for pubsub from a browser tab — copy the sample above and run it against your broker.

Message
{
  "event_version": "1.0",
  "event_id": "string",
  "occurred_at": "2019-08-24T14:15:22Z",
  "merchant_id": "string",
  "store_id": "string",
  "surface": "google_ai_mode",
  "checkout_id": "string",
  "agent_platform": "string",
  "route_template": "/catalog/:itemId",
  "method": "GET",
  "status_code": 0,
  "latency_ms": 0,
  "signature_result": "valid",
  "negotiation_result": "succeeded",
  "synthetic": true,
  "request_id": "string"
}