> ## Documentation Index
> Fetch the complete documentation index at: https://heybtw.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# get_event_details

> Comprehensive report for a single event — logistics, roster, attendance breakdown, seniority, partner performance, top accounts, and CRM pipeline.

<Note>
  This page documents the **Python MCP surface** (`mcp.heybtw.com`). It reflects `mcp-server/tools/event_details.py` as of this page's publication — see [Schema stability](/docs/integrations/mcp-tools#schema-stability).
</Note>

<Note>
  **Renamed.** This tool shipped as `get_event_summary` and was renamed to
  `get_event_details` by HEY-2029: "summary" read as retrospective-only, which
  this tool never was — it answers pre-event questions like roster and capacity
  just as well as post-event ones. `get_event_summary` is **not** a registered
  tool name and a call using it will not resolve. The response envelope's
  `tool` field is `"get_event_details"`.
</Note>

## Purpose

`get_event_details` is the single-event deep dive: logistics and roster, attendance broken into host/partner/external, seniority distribution, per-partner sourcing performance, top engaged accounts, how this event compares to the workspace's own program average, and (when HubSpot is connected) pipeline attribution for this one event.

## When to use this

* "Give me a report on last month's Robotics Summit."
* Before an event runs, to see who is registered and how the roster is filling against capacity.
* Immediately after an event, to compare it against `program_comparison` and decide whether to repeat the format.
* Before [`get_invite_recommendations`](/docs/mcp-tools/get-invite-recommendations) for a similar upcoming event, to see who attended last time.

## Parameters

| Name                        | Type    | Required       | Default | Description                                                                                                                                                                                                                       | Example             |
| --------------------------- | ------- | -------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- |
| `event_name`                | string  | One of the two | `""`    | The human-readable event name. Case-insensitive; partial and close matches resolve. An ambiguous name returns the matching candidates with their `channel_id`s **instead of** event data, so you can re-call with a specific one. | `"Robotics Summit"` |
| `channel_id`                | string  | One of the two | `""`    | The event's channel id. The programmatic override for pipelines that already resolved an id; **takes precedence** when both are given.                                                                                            | `"chn_88af1"`       |
| `include_contacts`          | boolean | No             | `false` | Include the full attendee contact list. Adds `contacts`/`contacts_total`/`contacts_shown`/`contacts_raw_total` to the response.                                                                                                   | `true`              |
| `include_partner_breakdown` | boolean | No             | `false` | Include per-partner sourcing performance (`partner_performance`).                                                                                                                                                                 | `true`              |

This tool needs one specific event, named either way. Supply `event_name` or
`channel_id`; supplying neither is rejected before any lookup runs (see
[Errors](#errors)). Both have a `""` default at the function signature level,
so an omitting call does not raise a Python-level type error.

## Default behavior

Given one event identifier, returns the full logistics/attendance/funnel/seniority/top-accounts/comparison report **without** the attendee-level contact list and **without** the partner performance breakdown — both are opt-in via their respective flags, keeping the default response smaller for the common "just show me the numbers" case.

## Sample request

```json theme={null}
{
  "tool": "get_event_details",
  "arguments": { "channel_id": "chn_88af1", "include_partner_breakdown": true }
}
```

## Sample response

```json theme={null}
{
  "tool": "get_event_details",
  "query_time_ms": 96.7,
  "result_count": 1,
  "data": [
    {
      "event_name": "Robotics Summit SF 2026",
      "channel_id": "chn_88af1",
      "event_date": "2026-06-18T00:00:00+00:00",
      "event_context": {
        "location": "San Francisco, CA",
        "format": "in_person",
        "timezone": "America/Los_Angeles",
        "capacity": 250,
        "meeting_url": null,
        "visibility": "public"
      },
      "attendance": {
        "total": 210,
        "breakdown": { "host": 12, "partner": 68, "external": 130 }
      },
      "funnel": {
        "mql_count": 34,
        "opportunity_count": 9,
        "meeting_count": 14,
        "conversion_rate": 0.1619
      },
      "seniority_distribution": {
        "executive": 18,
        "director_plus": 47,
        "manager": 62,
        "individual_contributor": 71,
        "unknown": 12
      },
      "partner_performance": [
        {
          "partner_name": "Northwind Ventures",
          "sourced_count": 22,
          "mql_count": 6,
          "conversion_rate": 0.2727
        }
      ],
      "top_accounts": [
        {
          "domain": "lighthouserobotics.example",
          "company": "Lighthouse Robotics",
          "attendee_count": 3,
          "mql": true,
          "opportunity": true
        }
      ],
      "program_comparison": {
        "vs_program_avg_signups": 1.34,
        "vs_program_avg_mql": 1.12
      },
      "pipeline": {
        "crm_enriched": true,
        "sourced_revenue": 38000.0,
        "won_revenue": 0.0,
        "company_count": 4
      }
    }
  ],
  "metadata": {
    "data_sources_queried": ["Channel", "EventSignUp", "Partner", "EventAttributionOpportunity"],
    "date_range_applied": null,
    "filters_applied": {
      "channel_id": "chn_88af1",
      "include_contacts": false,
      "include_partner_breakdown": true,
      "crm_enriched": true
    },
    "coverage_note": null
  }
}
```

## Response field reference

### Envelope

| Field          | Type             | Description                   |
| -------------- | ---------------- | ----------------------------- |
| `tool`         | string           | Always `"get_event_details"`. |
| `result_count` | integer          | Always `1` on success.        |
| `data`         | array (length 1) | The event report object.      |

### `data[0]`

| Field                                                               | Type                                                | Description                                                                                                                                                                                                                     |
| ------------------------------------------------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `event_name` / `channel_id` / `event_date`                          | string                                              | Event identity.                                                                                                                                                                                                                 |
| `event_context`                                                     | object                                              | `{ location, format, timezone, capacity, meeting_url, visibility }`. `format` is derived: `"hybrid"` (has both location and meeting URL), `"virtual"` (meeting URL only), `"in_person"` (location only), `"unknown"` (neither). |
| `attendance.total`                                                  | integer                                             | Total attendees.                                                                                                                                                                                                                |
| `attendance.breakdown`                                              | object                                              | `{ host, partner, external }` counts — classified per attendee by email domain against the workspace's own domain and its partners' domains.                                                                                    |
| `funnel`                                                            | object                                              | `{ mql_count, opportunity_count, meeting_count, conversion_rate }`. `conversion_rate` = `mql_count / attendance.total`.                                                                                                         |
| `seniority_distribution`                                            | object                                              | Attendee count per tier: `executive`, `director_plus`, `manager`, `individual_contributor`, `unknown`.                                                                                                                          |
| `partner_performance`                                               | array \| `[]` when not requested                    | `{ partner_name, sourced_count, mql_count, conversion_rate }` per partner, sorted by `sourced_count` descending. Only populated when `include_partner_breakdown: true` — otherwise always `[]`, not omitted.                    |
| `top_accounts`                                                      | array (up to 10)                                    | External domains ranked by opportunity → MQL → attendee count: `{ domain, company, attendee_count, mql, opportunity }`. Excludes the workspace's own domain.                                                                    |
| `program_comparison.vs_program_avg_signups` / `.vs_program_avg_mql` | number \| null                                      | This event's count ÷ the workspace's own historical average across all its events. `null` when the workspace average is `0` (e.g. this is the first event). A value of `1.34` means "34% above average."                        |
| `pipeline`                                                          | object \| **omitted**                               | Present only when CRM is connected **and** the attribution resolver returned matching data for this channel. Same shape as [`get_event_attribution`](/docs/mcp-tools/get-event-attribution)'s per-event `pipeline` block.            |
| `crm_enriched`                                                      | boolean, **only present when `pipeline` is absent** | `false`, explaining why there's no `pipeline` block. When `pipeline` IS present, this top-level `crm_enriched` key does not appear — check for `pipeline`'s presence first, not this flag.                                      |
| `contacts`                                                          | array, present iff `include_contacts: true`         | Up to 200 deduplicated contacts: `{ email, name, title, company, context, seniority, funnel_status }`. `context` ∈ `"host"` \| `"partner"` \| `"external"`.                                                                     |
| `contacts_total` / `contacts_shown`                                 | integer, present iff `include_contacts: true`       | `contacts_shown` capped at 200.                                                                                                                                                                                                 |
| `contacts_raw_total`                                                | integer, present iff `include_contacts: true`       | Pre-dedup attendee count — useful to see how much deduplication happened.                                                                                                                                                       |

## Errors

* **Neither `event_name` nor `channel_id` supplied.** Rejected before any lookup runs with a structured `invalid_parameter` error carrying an issue of `required` and an action of `provide`. This is a real structured error, not the generic sanitized one — an agent can act on it by supplying an identifier and re-calling.
* **`channel_id` is malformed.** Validated before any lookup runs and rejected as a structured `invalid_parameter` error.
* **`channel_id` refers to a nonexistent or out-of-workspace channel.** The tool raises `ValueError(f"Channel {channel_id!r} not found in workspace {workspace_id!r}")` internally, but like every tool on this surface, that specific message does **not** reach the client — it's caught by the generic handler and surfaces as `RuntimeError: Internal error executing get_event_details (error_id=...)`. There is currently no way for an agent to distinguish "channel not found" from any other internal failure from the error message alone.
* **`event_name` matches more than one event.** Not an error. The response carries the matching candidates with their `channel_id`s instead of event data; re-call with the `channel_id` you want.

## Pagination and limits

Not applicable to the report itself — one event in, one report out. `contacts` (when requested via `include_contacts`) is capped at 200 with no further pagination; use `contacts_raw_total`/`contacts_total` to know if you're seeing everyone.

## Related tools

* [`get_event_attribution`](/docs/mcp-tools/get-event-attribution) — the same event's pipeline numbers in the multi-event comparison shape, plus sourced/influenced breakdown by company.
* [`get_partner_insights`](/docs/mcp-tools/get-partner-insights) — a given partner's performance across **all** events, not just this one.
* [`get_invite_recommendations`](/docs/mcp-tools/get-invite-recommendations) — who to invite to a similar future event.
