Analytics

Explain Cohort

Which clause emptied the view.

Takes the SAME body as /cohort and answers one {label, lead_count, deal_count, measured} row per progressively-built prefix of the filter - baseline, then +rep, then +lifecycle, and so on. Read the drop (290 -> 57 -> 11 -> 0) and the last step that moved is the clause that did it.

COUNTS ONLY, never rows - which is both what makes it affordable (about 26 count queries against /cohort's full section fan-out) and why it is safe to call when /cohort itself would withhold person rows.

post/analytics/sales-report/cohort/explain

Request

  • Base URL: https://be.graph8.com/api/v1
  • URL: https://be.graph8.com/api/v1/analytics/sales-report/cohort/explain
  • Auth: HTTP bearer

Query parameters

tzstring

IANA timezone the local-day window bounds are computed in, e.g. Asia/Tokyo. Changes which deals fall inside the date range.

Headers

Authorizationstring nullable
X-Target-Org-Idstring nullable

Request body

pipeline_target'prospects_meeting' | 'prospects_revenue' | 'customers_revenue' nullable
granularity'day' | 'week' | 'month' nullable

Response

Successful Response

dataReportPayload required

An OPEN envelope around one report's answer.

The app wraps every one of these reports in {success, data, meta}, where meta carries the cache state, the window and - on the agency reports - failed_org_ids, the orgs that contributed NOTHING to the totals above. That field is the difference between "this client sent no email" and "we could not query this client", so it is forwarded rather than flattened away.

Open on purpose: data is dict | list in the app and its contents grow with the product. A closed model would turn every new metric into a silently dropped one.

Changes

No recorded changes to this operation across all 2 revisions of this API.