Skip to main content
POST
Event Cross-Tab

Authorizations

api_key
string
header
required

Body

application/json

Event window, filters, and the row and column dimensions

rows
object
required

The dimension down the side. One row per value, ranked by metric.

columns
object
required

The dimension across the top. Every row is split by its values.

startDate
string<date-time> | null

Start date for event time range (ISO 8601 format). Defaults to 14 days ago if not provided; the response's dataWindow echoes what was used.

endDate
string<date-time> | null

End date for event time range. Defaults to the time of the request, so events stamped in the future (a lost deal's placeholder close date, for example) are left out; pass an explicit later endDate to include them. The response's dataWindow echoes what was used.

filters
object

Filters to INCLUDE events: event type/category, company, contact, sentiment, call purpose, outcome, deal amount, library entity oIds (offerings, personas, segments, tags, use cases, competitors, alternatives, buying triggers, core features, objections, proof points, references), motion types, customer scope, and CRM deal context (opportunityIds, opportunityStatuses, dealMotions, dealTypes, dealStages, pipelinePhases, crmPipelines, minStalledDays). Deal filters AND on the same linked deal; values within one filter are OR'd.

exclude
object

Filters to EXCLUDE events matching these criteria (same shape as the entity/outcome match filters)

excludeTags
string[]

Exclude events matching any library entity that carries these reporting tag oIds. Use list_tag_groups to resolve tag oIds. Multiple tags are OR'd.

metric
enum<string>
default:events

What to rank by. events = distinct matching events; uniqueCompanies = distinct companies on them; uniqueDeals / wonDeals / lostDeals = distinct CRM deals linked to them (any / closed-won / closed-lost today); knownWonValue = summed home-currency value of the won deals whose value is known and not negative (a group with none known ranks last); winRateSampleAdjusted = win rate, ranked by the LOW end of each group's 95% interval (winRate.low) so a small sample cannot top the list — 2 won of 2 ranks below 40 won of 60. Use it for 'which of these wins most'; the plain winRate.rate is on every group but is not offered as a ranking because it rewards tiny samples. Groups with no closed deals rank last. Every metric is returned on every group — this only picks the ordering.

Available options:
events,
uniqueCompanies,
uniqueDeals,
wonDeals,
lostDeals,
knownWonValue,
winRateSampleAdjusted
rowLimit
integer
default:15

Row groups to return, ranked by metric (default 15, max 50).

Required range: 1 <= x <= 50
columnLimit
integer
default:10

Column groups to return, ranked by metric (default 10, max 25).

Required range: 1 <= x <= 25

Response

Event Cross-Tab

_metadata
object
required
populations
object
required

What the table is drawn from. An event can carry several values of a dimension, so rows, columns and cells OVERLAP: never add them up to get a total — these are the totals. Only the top rowLimit / columnLimit groups are listed, so listed groups can cover less than these.

relationshipGrain
enum<string> | null
required

What a CELL means when rows are crossed with columns. same_event: both values occur somewhere in the same conversation — co-occurrence, NOT that one was said about the other, and never who said it (the 'person' dimension is who attended). same_finding: speaker_side crossed with an entity type or tag group — the side is read off the very finding that matched the entity, so 'objection X × external' means a buyer-side finding raised X. There, 'unknown' is a finding type that records no speaker, and speaker_side totals cover only that dimension's findings. Whatever the grain, every metric still counts distinct events, companies and deals — never findings. Null without columns.

Available options:
same_finding,
same_event,
null
rows
object[]
required
columns
object[]
required

The column groups, ranked; empty when no columns dimension was requested.

dataWindow
object
required

The time span these numbers cover. Compare numbers from two tools only when their dataWindow kind and dates match.

metric
enum<string>
required

What to rank by. events = distinct matching events; uniqueCompanies = distinct companies on them; uniqueDeals / wonDeals / lostDeals = distinct CRM deals linked to them (any / closed-won / closed-lost today); knownWonValue = summed home-currency value of the won deals whose value is known and not negative (a group with none known ranks last); winRateSampleAdjusted = win rate, ranked by the LOW end of each group's 95% interval (winRate.low) so a small sample cannot top the list — 2 won of 2 ranks below 40 won of 60. Use it for 'which of these wins most'; the plain winRate.rate is on every group but is not offered as a ranking because it rewards tiny samples. Groups with no closed deals rank last. Every metric is returned on every group — this only picks the ordering.

Available options:
events,
uniqueCompanies,
uniqueDeals,
wonDeals,
lostDeals,
knownWonValue,
winRateSampleAdjusted