KPI summary, per surface and combined, with prior-period deltas
One row per surface the merchant has data for that month, plus one combined “all” row. Deltas are against the prior calendar month, computed server-side from stored counts — never a stored percentage. sessions_inferred is always reported alongside sessions so a reconstructed count is never mistaken for an exact one.
/channel/summaryAuthorizationBearer token (JWT) · headerrequiredJWT issued by the external IdP via the OAuth 2.0 authorization-code flow (Kinde in
production; a simulator in test). The client obtains it and sends it as a Bearer token on
every authenticated call. Sarvex's services verify it — issuer, audience, signature
(IdP JWKS), expiry — and read identity and tenant from its claims. Sarvex does not issue
or revoke these tokens. merchant_id/store_id are read from the verified claims (and the
merchant→store mapping), never from the URL. The operator scope is required for
/operator/*. Operators acting on a specific merchant pass the X-Operate-As header,
which is recorded in the audit log.
monthstringyyyy-MM. Defaults to the current UTC month.
store_idstringRestrict to one store. Omit for every store the merchant operates (modelled for multiple stores per merchant).
One summary row per surface, plus one combined row.
datachannel_summary[]requiredShow propertiesHide properties
channel_summarysurfacechannel_surface_or_allchannel_surface's domain plus the literal "all", used only on the combined-across-surfaces row (channel_summary, channel_funnel). Distinct from channel_surface because the query parameter and channel_daily_entry never emit "all" — a daily row is always one real surface.
google_ai_modegoogle_geminiopenai_chatgptother_agentunknownallmonthstringsessionsintegersessions_confirmedintegersessions minus sessions_inferred, exposed directly rather than left for the caller to derive — an aggregate can honestly contain both confirmed and inferred sessions, so this is a count, not a single categorical attribution flag.
sessions_inferredintegerThe subset of sessions whose correlation to their initiating event had to be reconstructed rather than observed directly — never presented as exact.
checkouts_completedintegerrevenue_minorintegercurrencystring | nullAbsent (with currency_mixed=false) when no revenue-bearing day exists yet in this row; absent with currency_mixed=true when the summed days/surfaces genuinely disagree on currency. Never a silently-picked first-seen value.
currency_mixedbooleancart_ratenumber<double>checkout_ratenumber<double>completion_ratenumber<double>aov_minorintegerprior_periodobjectDeltas against the prior calendar month, computed server-side from stored counts (never a stored delta).
Show propertiesHide properties
sessions_deltaintegercheckouts_completed_deltaintegerrevenue_minor_deltaintegeraov_minor_deltaintegerCurrent aov_minor minus the prior period's.
completion_rate_deltanumber<double>Current completion_rate minus the prior period's.
pagepagerequiredShow propertiesHide properties
cursorstring | nullrequiredhas_morebooleanrequiredAuthenticated but not permitted (e.g. non-operator on an operator route).
errorobjectrequiredShow propertiesHide properties
codestringrequiredmessagestringrequireddetailsobject | nullRequest body failed validation.
errorobjectrequiredShow propertiesHide properties
codestringrequiredmessagestringrequireddetailsobject | null