Skip to content
Skip to main content

Using Notetaker deduplication

Last updated:

Without deduplication, every POST /v3/notetakers 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 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. 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.

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:

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>. To turn application-level dedup off later, set the policy to "inactive" on the same configuration.

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.

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:

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"
}'

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 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:

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.

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 request. Only that one Notetaker is exempt; every other Notetaker on the same meeting continues to deduplicate normally:

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"
}
}'

deduplication_policy follows the standard inheritance chain, 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:

ValueValid atMeaning
activeApplication, workspaceDedup is on.
inactiveApplication, workspaceDedup is off. This is the default.
inheritCalendar, event, per-NotetakerUse the parent’s policy. This is the default.
disableCalendar, event, per-NotetakerOpt out, regardless of parent.