# Using Notetaker deduplication

Source: https://developer.nylas.com/docs/v3/notetaker/deduplication/

Without deduplication, every [`POST /v3/notetakers`](/docs/reference/api/standalone-notetaker/invite-standalone-notetaker/) request, calendar sync, and event sync schedules its own bot. If three users on the same team are invited to a meeting, three bots join. With deduplication turned on, Nylas sends **one** bot to the meeting instead. Each user still receives their own [webhook notifications](/docs/reference/notifications/#notetaker-notifications) and their own copy of the recording, transcript, summary, and action items.

Deduplication applies only to scheduled Notetakers, meaning those with a future `join_time`. Immediate joins don't participate.

You enable deduplication by setting `deduplication_policy` on a [Notetaker configuration](/docs/v3/notetaker/configurations/). You can set it at four levels, from broadest to most specific. Like other configuration values, Nylas reads the policy when the bot is about to join, so changing it later affects Notetakers that are already scheduled. Legacy requests that use the deprecated top-level `name` or `meeting_settings` fields can't set it; see [Migrate to `notetaker_settings`](/docs/v3/notetaker/migrate-from-legacy-settings/).

## Your options for turning on deduplication

### Application-level

Set `"deduplication_policy": "active"` on your application configuration. This turns deduplication on for every Notetaker in the application, unless you override it at a more specific level. An application can have only 1 application configuration, so this is a single request.

Create the configuration with [`POST /v3/notetakers/configs`](/docs/reference/api/notetaker-configurations/create-notetaker-config/):

```bash
curl --request POST \
  --url 'https://api.us.nylas.com/v3/notetakers/configs' \
  --header 'Authorization: Bearer <NYLAS_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
    "display_name": "Company defaults",
    "notetaker_settings": {
      "name": "Acme Notetaker",
      "recording_type": "audio_video",
      "transcription": true
    },
    "deduplication_policy": "active"
  }'
```

If you already have an application configuration, update it in place with [`PATCH /v3/notetakers/configs/<CONFIG_ID>`](/docs/reference/api/notetaker-configurations/update-notetaker-config/). To turn application-level dedup off later, set the policy to `"inactive"` on the same configuration.

### Workspace-level

A workspace is a grouping of grants (authenticated user accounts) inside a Nylas application, usually one per customer domain. For creating one and assigning grants to it, see [Set defaults for one workspace](/docs/v3/notetaker/configurations/#set-defaults-for-one-workspace).

A workspace configuration gives every grant in the workspace two things: the same default Notetaker settings, and membership in the same deduplication group. Because workspaces typically group grants by company domain, all of a company's users share their Notetaker defaults _and_ dedupe against each other. If five Acme employees are invited to the same meeting, one Acme bot joins for all of them.

Create the workspace configuration the same way you create an application one, passing a `workspace_id`:

```bash
curl --request POST \
  --url 'https://api.us.nylas.com/v3/notetakers/configs' \
  --header 'Authorization: Bearer <NYLAS_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
    "workspace_id": "<WORKSPACE_ID>",
    "display_name": "Acme Sales defaults",
    "deduplication_policy": "active"
  }'
```

### Override at a calendar level

If most of your application uses deduplication but a specific calendar needs its own dedicated bot, such as an executive or a compliance-sensitive account, set `deduplication_policy` to `"disable"` on an [`Update Calendar`](/docs/reference/api/calendar/put-calendars-id/) request. Every Notetaker created by that calendar's sync rules then joins independently, even when 2 or more other users in the workspace are on the same meeting:

```bash
curl --request PUT \
  --url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/calendars/<CALENDAR_ID>' \
  --header 'Authorization: Bearer <NYLAS_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
    "notetaker": {
      "notetaker_settings": {
        "name": "Executive Calendar Bot"
      },
      "deduplication_policy": "disable",
      "rules": {
        "event_selection": ["all"]
      }
    }
  }'
```

`deduplication_policy` sits alongside `notetaker_settings` and `rules` inside the `notetaker` object, not inside `notetaker_settings`.

### Override at an event level

For a single meeting that needs its own bot, such as a board meeting or a high-stakes interview, set `deduplication_policy` to `"disable"` on an [`Update Event`](/docs/reference/api/events/put-events-id/) request. Only that one Notetaker is exempt; every other Notetaker on the same meeting continues to deduplicate normally:

```bash
curl --request PUT \
  --url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/events/<EVENT_ID>?calendar_id=<CALENDAR_ID>' \
  --header 'Authorization: Bearer <NYLAS_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
    "notetaker": {
      "notetaker_settings": {
        "name": "Board Meeting Bot"
      },
      "deduplication_policy": "disable"
    }
  }'
```

## How the levels interact

`deduplication_policy` follows the standard [inheritance chain](/docs/v3/notetaker/configurations/#how-settings-combine), with one twist: calendar, event, and per-Notetaker layers can only inherit or opt out, never turn dedup on. If nothing along the chain sets an explicit policy, deduplication is off. The 4 valid values and where each applies:

| Value | Valid at | Meaning |
| --- | --- | --- |
| `active` | Application, workspace | Dedup is on. |
| `inactive` | Application, workspace | Dedup is off. This is the default. |
| `inherit` | Calendar, event, per-Notetaker | Use the parent's policy. This is the default. |
| `disable` | Calendar, event, per-Notetaker | Opt out, regardless of parent. |

## Related topics

- [Notetaker configurations](/docs/v3/notetaker/configurations/) for creating application and workspace configurations.
- [Pause Notetaker dispatch](/docs/v3/notetaker/dispatch-suppression/#what-happens-while-dispatch-is-paused) for how a shared bot behaves when some of its users are paused.
- [Notetaker calendar sync](/docs/v3/notetaker/calendar-sync/) for the sync rules that schedule the Notetakers being deduplicated.