What a cluster is
A cluster is a set of venue events that AGG has determined are the same real-world event, plus the market- and outcome-level pairings between them.Which id to join on
GET /venue-events returns one row per cluster. Every cluster has one anchor event, and the
list collapses each cluster down to it — member rows are not returned separately.
Do not derive your own key from titles, slugs, venue identifiers, or aggKey (see
Where aggKey fits below).
Cluster fields, and where they live
Two different scopes are easy to confuse:
Cross-venue pricing hangs off
matchedVenueMarkets[], not off the event row. To show a best price,
collect each market’s own id plus its matchedVenueMarkets[].id, then batch them into one
GET /midpoints call, or subscribe to those ids on the
WebSocket midpoint stream.
Querying a member id
GET /venue-events/{id} does not resolve a member id up to its anchor — it returns exactly the row
you asked for. That row is still usable for rendering, because each of its markets carries the full
set of matchedVenueMarkets[] siblings regardless of which member you queried.
What differs between an anchor and a member response:
So a member row can be missing markets the anchor carries — props or extra legs with no counterpart
elsewhere — and its title and description are the member venue’s wording. For a canonical view of
the cluster, query the id you got from
GET /venue-events.
Market lists: preview vs full
GET /venue-events/{id} returns the event’s markets uncapped. Both embedded arrays are deprecated:
fetch markets from GET /venue-markets?venueEventId=,
which is filterable, paginated, and returns the same matchedVenueMarkets[] siblings per market.
Note that ?venueEventId= is event-scoped by design: it returns that event’s own markets, with
cross-venue siblings inline on each market — not a flattened list of every member’s markets.
Where aggKey fits
aggKey is a deterministic canonical key computed at discovery time from each
venue’s native data. It is one input to matching and a convenient fetch filter — it is not the
mechanism that produces clusters, and it is not a join key.
- It is
nullfor a substantial share of rows. Grouping byaggKeysilently under-groups every cluster whose members could not be canonicalized. - It is guaranteed identical across venues only where every venue exposes the same normalizable inputs — sports head-to-head and crypto up/down markets. Elsewhere it is derived from each venue’s own slug or ticker and its own resolution timestamp, so two members of the same cluster can carry different keys.
aggKey to fetch related rows for a key you already hold. Use the cluster and its anchor id
for identity.
Related
Comparing Venue Prices
Fetch matched events and their midpoints to build a cross-venue price comparison.
Building Market Views
Compose discovery and orderbook endpoints into event grids and trading views.
Canonical Market Key (aggKey)
What aggKey is, when it is null, and the one supported way to parse it.
Settlement Differences
Surface resolution-criteria differences between venues in a cluster.