Discovery-to-checkout funnel stage counts and derived rates
Stage counts are monotonically non-increasing through the funnel (a session cannot reach checkout without reaching cart). Rates are derived at read time from the stored counts, never stored as percentages. Max range 92 days.
/channel/funnelAuthorizationBearer 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.
fromstring<date>yyyy-MM-dd, inclusive. Defaults to 29 days before to. Range with to is capped at 92 days.
tostring<date>yyyy-MM-dd, inclusive. Defaults to today (UTC). Range with from is capped at 92 days.
surfacechannel_surfaceRestrict to one surface. Omit for the all-surfaces combined rollup.
google_ai_modegoogle_geminiopenai_chatgptother_agentunknownstore_idstringFunnel stage counts and derived rates for the range.
fromstring<date>tostring<date>surfacechannel_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_agentunknownallsessionsintegersessions_confirmedintegersessions minus sessions_inferred.
sessions_inferredintegersessions_reached_cartintegersessions_reached_checkoutintegercheckouts_initiatedintegercheckouts_completedintegercurrencystring | nullSame absent/currency_mixed rule as channel_summary.currency.
currency_mixedbooleanrateschannel_ratesDerived at read time from stored counts (R7) — never itself stored.
Show propertiesHide properties
cart_ratenumber<double>sessions_reached_cart / sessions.
checkout_ratenumber<double>sessions_reached_checkout / sessions_reached_cart.
completion_ratenumber<double>checkouts_completed / checkouts_initiated.
aov_minorintegerrevenue_minor / checkouts_completed, zero-safe.
Authenticated but not permitted (e.g. non-operator on an operator route).
errorobjectrequiredShow propertiesHide properties
codestringrequiredmessagestringrequireddetailsobject | nullRequest body failed validation.
errorobjectrequiredShow propertiesHide properties
codestringrequiredmessagestringrequireddetailsobject | null