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

# How to set up webhooks with Fathom on Nango

> Learn how to receive real-time Fathom recording events in your app using Nango webhooks

Fathom sends a webhook once a recording finishes processing — there's a single event, `new-meeting-content-ready`, so no event-type filtering is needed on your side.

## How it works

1. Fathom sends a POST request to your Nango webhook URL when a recording you're subscribed to finishes processing.
2. Nango verifies the delivery's signature (if you've set a **Webhook secret**), then routes the event to a connection.
3. The payload includes the transcript, summary, and action items you asked for when creating the webhook — there's no separate API call needed to fetch them.

## Setup

### 1. Get your Nango webhook URL

In the Nango dashboard, open your Fathom integration and copy the **Webhook URL**.

### 2. Create the webhook in Fathom

> [tab] Fathom dashboard
>
> 1. Go to **Settings → API Access → Manage** and select **Add Webhook**.
> 2. Enter your Nango webhook URL as the destination — see [Connection matching](#connection-matching) below for whether to append `?nangoConnectionId=<CONNECTION-ID>`.
> 3. Choose which recordings trigger it (your own, shared with you, shared with your team) and which content to include (transcript, summary, action items, CRM matches).
> 4. Save the webhook and copy the **secret** it generates — you'll only see it once. You'll use it in the next step.

> [tab] Fathom API
>
> Register your endpoint with Fathom's create webhook API, through Nango's proxy:
>
> ```bash theme={null}
> curl -X POST "https://api.nango.dev/proxy/external/v1/webhooks" \
>   -H "Authorization: Bearer <NANGO-API-KEY>" \
>   -H "Provider-Config-Key: <INTEGRATION-ID>" \
>   -H "Connection-Id: <CONNECTION-ID>" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "destination_url": "<NANGO-WEBHOOK-URL>",
>     "triggered_for": ["my_recordings", "my_shared_with_team_recordings"],
>     "include_transcript": true,
>     "include_summary": true,
>     "include_action_items": true
>   }'
> ```
>
> At least one of `include_transcript`, `include_crm_matches`, `include_summary`, or `include_action_items` must be `true`. Fathom generates the `secret` and returns it in the response — save it, you'll need it in the next step. The response also includes an `id` you'll need to delete the webhook later (see [Rollback strategy](#rollback-strategy)).

### 3. Set the webhook secret in Nango

Where you store the secret Fathom returned depends on which routing mode you use — see [Connection matching](#connection-matching) below.

* **Email-routed** (no `nangoConnectionId`): in the Nango dashboard, open your Fathom integration, go to the **Settings** tab, and enter the secret into the **Webhook Secret** field.
* **`nangoConnectionId`-routed**: store the secret on that specific connection's metadata instead — see step 4 below. Do **not** use the integration-level **Webhook Secret** field for this mode.

> [!NOTE]
>
> If no **Webhook secret** is set on the integration, Nango accepts email-routed deliveries without verifying their signature. Deliveries using `nangoConnectionId` always require a **webhook secret set on that specific connection** — see [Connection matching](#connection-matching).

### 4. For `nangoConnectionId` routing: create one webhook per connection

Fathom issues a distinct secret each time you create a webhook, so a single integration-level secret can't verify deliveries for more than one `nangoConnectionId`-routed connection. If you're routing more than one connection this way, repeat step 2 to create a **separate Fathom webhook per connection** — each with its own destination URL (`?nangoConnectionId=<CONNECTION-ID>`) and its own secret — then store each connection's secret as `webhookSecret` in that connection's metadata via [Set connection metadata](https://nango.dev/docs/reference/backend/http-api/connections/set-metadata.md).

## Connection matching

A Fathom workspace can have multiple team members recording meetings, so Nango supports two ways to route a delivery to a connection:

* **By email (default)** — if the destination URL has no `nangoConnectionId` query param, Nango matches the event's `recorded_by.email` against **`metadata.emailAddress`** on your connections. Use this when you have one Nango connection per team member and want each person's recordings routed to their own connection. Set `metadata.emailAddress` on each connection via [Set connection metadata](https://nango.dev/docs/reference/backend/http-api/connections/set-metadata.md). Signature verification, if enabled, uses the integration-level **Webhook Secret**.
* **By `nangoConnectionId`** — append `?nangoConnectionId=<CONNECTION-ID>` to the destination URL when creating the webhook. Every delivery for that webhook routes to that one connection regardless of who recorded it. Because the connection is chosen from a value in the URL, Nango requires a **webhook secret set on that connection's metadata** (not the integration-level one) to verify it — a delivery with `nangoConnectionId` is rejected if the connection doesn't exist, has no `webhookSecret` in its metadata, or its signature doesn't verify against it. If you route multiple connections this way, each needs its own Fathom webhook and its own secret — see step 4 above.

If neither matches — no `nangoConnectionId` and no connection has a matching `metadata.emailAddress` — the delivery is still accepted, but isn't routed anywhere.

## Handle the webhook

Once routed, you have two options:

* **Forward it to your app** — Nango forwards the event to your webhook URL with connection attribution. See [External webhook forwarding](https://nango.dev/docs/guides/platform/webhook-forwarding.md).
* **Process it in a sync** — run a sync when the webhook arrives using `webhookSubscriptions` and `onWebhook` in a sync script. See [Real-time syncs](https://nango.dev/docs/guides/functions/syncs/realtime-syncs.md).

## Rollback strategy

To stop deliveries, delete the webhook using the `id` Fathom returned when you created it:

```bash theme={null}
curl -X DELETE "https://api.nango.dev/proxy/external/v1/webhooks/<WEBHOOK-ID>" \
  -H "Authorization: Bearer <NANGO-API-KEY>" \
  -H "Provider-Config-Key: <INTEGRATION-ID>" \
  -H "Connection-Id: <CONNECTION-ID>"
```

Or delete it from **Settings → API Access → Manage** in the Fathom dashboard.

If you created multiple webhooks for `nangoConnectionId` routing (one per connection, per [step 4](#4-for-nangoconnectionid-routing-create-one-webhook-per-connection)), repeat this for each webhook `id`.

> [!TIP]
>
> Need help getting started? Join us in the [community](https://nango.dev/slack).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.