Every scheduled meeting needs notes, but nobody wants to take them. By combining Nylas Scheduler and Notetaker, you can build a booking experience where every meeting is automatically recorded and transcribed. No manual setup per meeting, no forgotten recordings.
Here is how it works: a guest books a time slot through your scheduling page, the calendar event gets a conferencing link, and when the meeting starts, Notetaker joins automatically. After the meeting ends, you get the recording, transcript, summary, and action items delivered through a webhook. The entire flow runs without any intervention from you or your users.
What you will build
Section titled “What you will build”This tutorial walks you through creating a Scheduler Configuration with Notetaker integration enabled. By the end, you will have:
- A Scheduler Configuration that creates calendar events with conferencing links and automatic Notetaker
- A scheduling page (hosted by Nylas or embedded in your app) where guests can book meetings
- Webhook subscriptions that notify you when bookings are created and recordings are ready
- A workflow to retrieve recordings, transcripts, summaries, and action items after each meeting
When a guest books a meeting, Scheduler creates the calendar event and attaches Notetaker settings. Notetaker joins the meeting at the scheduled time, records the session, and processes the media afterward. You receive a notetaker.media webhook with download URLs for everything.
Before you begin
Section titled “Before you begin”Make sure you have the following before starting this tutorial:
- A Nylas account with an active application
- A valid API key from your Nylas Dashboard
- At least one connected grant (an authenticated user account) for the provider you want to work with
- Node.js 18+ or Python 3.8+ installed (depending on which code samples you follow)
New to Nylas? Start with the quickstart guide to set up your app and connect a test account before continuing here.
You also need the following for this tutorial:
- A connected grant with calendar access for the provider you want to schedule with
- A conferencing provider set up on the grant (Google Meet, Microsoft Teams, or Zoom). Notetaker needs a meeting link to join, so conferencing is required. See Adding conferencing to bookings for setup details.
- Notetaker enabled on your Nylas plan
Create a Scheduler Configuration with Notetaker
Section titled “Create a Scheduler Configuration with Notetaker”Start by creating a Configuration that defines your scheduling page, conferencing provider, and Notetaker settings. This single API request sets up the entire pipeline.
curl --request POST \ --url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/scheduling/configurations' \ --header 'Authorization: Bearer <NYLAS_API_KEY>' \ --header 'Content-Type: application/json' \ --data '{ "requires_session_auth": false, "participants": [{ "name": "Your Name", "email": "[email protected]", "is_organizer": true, "availability": { "calendar_ids": ["<CALENDAR_ID>"] } }], "availability": { "duration_minutes": 30 }, "event_booking": { "title": "Meeting with {{invitee_name}}", "conferencing": { "provider": "Google Meet", "autocreate": {} } }, "scheduler": { "notetaker_settings": { "enabled": true, "show_ui_consent_message": true, "notetaker_name": "Meeting Notetaker", "meeting_settings": { "video_recording": true, "audio_recording": true, "transcription": true, "summary": true, "action_items": true } } } }'A few things to note about this request:
conferencing.providerdetermines which video platform Notetaker joins. Set this to"Google Meet","Microsoft Teams", or"Zoom Meeting"depending on your grant’s provider. Theautocreateobject tells Scheduler to generate a meeting link automatically for each booking.scheduler.notetaker_settings.enabledturns on the Notetaker integration. Without this, bookings are created normally but no recording bot joins.notetaker_nameis the display name guests see when the bot joins the call. Keep it short and descriptive so attendees know what it is.meeting_settingscontrols what Notetaker produces. You can disablevideo_recordingif you only need audio, or turn offsummaryandaction_itemsif you just want the raw transcript.
Some meeting_settings fields depend on others. Transcription requires audio_recording, and both summary and action_items require transcription. If you enable a feature that depends on another, Nylas enables the dependency automatically.
Customize summary and action item output
Section titled “Customize summary and action item output”If you want more control over the AI-generated content, pass custom instructions:
curl --request PUT \ --url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/scheduling/configurations/<CONFIGURATION_ID>' \ --header 'Authorization: Bearer <NYLAS_API_KEY>' \ --header 'Content-Type: application/json' \ --data '{ "scheduler": { "notetaker_settings": { "enabled": true, "meeting_settings": { "video_recording": true, "audio_recording": true, "transcription": true, "summary": true, "summary_settings": { "custom_instructions": "Focus on key decisions, open questions, and next steps." }, "action_items": true, "action_items_settings": { "custom_instructions": "List action items with the responsible person and a deadline if mentioned." } } } } }'Custom instructions are limited to 1,500 characters each. Be specific about what you want: the more precise the instructions, the more useful the output.
Host the scheduling page
Section titled “Host the scheduling page”Once your Configuration exists, you need to give guests a way to book meetings. Nylas supports two approaches.
Option 1: Nylas-hosted scheduling page
Section titled “Option 1: Nylas-hosted scheduling page”The simplest option. Add a slug to your Configuration, and Nylas hosts the scheduling page for you at book.nylas.com/<SLUG>.
curl --request PUT \ --url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/scheduling/configurations/<CONFIGURATION_ID>' \ --header 'Authorization: Bearer <NYLAS_API_KEY>' \ --header 'Content-Type: application/json' \ --data '{ "slug": "meet-with-your-team" }'After this request succeeds, your scheduling page is live at https://book.nylas.com/meet-with-your-team. Share that URL with guests, embed it in emails, or link to it from your website. No frontend code required.
Option 2: Embedded scheduling component
Section titled “Option 2: Embedded scheduling component”If you want the scheduling UI inside your own application, use the <nylas-scheduling> web component. This gives you full control over the surrounding page layout, styling, and user experience.
<!DOCTYPE html><html> <head> <title>Book a Meeting</title> <script src="https://cdn.jsdelivr.net/npm/@nylas/react@latest/dist/cdn/nylas-scheduling/nylas-scheduling.es.js"></script> </head> <body> <nylas-scheduling configuration-id="<CONFIGURATION_ID>"> </nylas-scheduling> </body></html>import { NylasScheduling } from '@nylas/react';
function BookingPage() { return ( <NylasScheduling configurationId="<CONFIGURATION_ID>" /> );}
export default BookingPage;The component handles date selection, time slot display, the booking form, and confirmation. All the Notetaker settings you configured on the backend apply automatically. Guests see a consent message if you set show_ui_consent_message to true.
For more customization options, see Using the Scheduling component and Customize Scheduler.
Set up webhooks for recordings
Section titled “Set up webhooks for recordings”You need webhooks to know when bookings happen and when recordings are ready. Subscribe to the booking.created and notetaker.media triggers.
curl --request POST \ --url 'https://api.us.nylas.com/v3/webhooks' \ --header 'Authorization: Bearer <NYLAS_API_KEY>' \ --header 'Content-Type: application/json' \ --data '{ "trigger_types": [ "booking.created", "notetaker.media" ], "description": "Scheduling with notetaking", "webhook_url": "https://your-app.example.com/webhooks/nylas", "notification_email_addresses": ["[email protected]"] }'booking.createdfires when a guest completes a booking. Use this to update your internal records, send custom notifications, or trigger other workflows.notetaker.mediafires when Notetaker finishes processing media after a meeting ends. The payload includes download URLs for the recording, transcript, summary, and action items.
Your webhook endpoint must be publicly accessible and respond with a 200 status code. Nylas retries failed deliveries, but if your endpoint is consistently unreachable, notifications are dropped. For more details, see Using webhooks with Nylas.
Booking created webhook payload
Section titled “Booking created webhook payload”When a guest books a meeting, Nylas sends a notification like this:
{ "specversion": "1.0", "type": "booking.created", "source": "/nylas/passthru", "id": "<WEBHOOK_ID>", "time": 1725895310, "data": { "application_id": "<NYLAS_APPLICATION_ID>", "grant_id": "<NYLAS_GRANT_ID>", "object": { "booking_id": "<BOOKING_ID>", "configuration_id": "<CONFIGURATION_ID>", "object": "booking", "booking_info": { "event_id": "<EVENT_ID>", "start_time": 1719842400, "end_time": 1719846000, "title": "Meeting with Leyah Miller", "location": "https://meet.google.com/abc-defg-hij" } } }}Notice the location field contains the conferencing link. That is the same link Notetaker uses to join the meeting.
Retrieve recordings and transcripts
Section titled “Retrieve recordings and transcripts”After the meeting ends, Notetaker processes the recording. This typically takes a few minutes. When processing completes, Nylas sends a notetaker.media webhook with the state set to available and URLs for each media file.
The notetaker.media webhook payload
Section titled “The notetaker.media webhook payload”{ "specversion": "1.0", "type": "notetaker.media", "source": "/nylas/notetaker", "id": "<WEBHOOK_ID>", "time": 1737500935555, "data": { "application_id": "<NYLAS_APPLICATION_ID>", "object": { "id": "<NOTETAKER_ID>", "object": "notetaker", "state": "available", "media": { "recording": "https://storage.googleapis.com/nylas-notetaker/.../recording.mp4", "recording_duration": "1800", "thumbnail": "https://storage.googleapis.com/nylas-notetaker/.../thumbnail.png", "transcript": "https://storage.googleapis.com/nylas-notetaker/.../transcript.json", "summary": "https://storage.googleapis.com/nylas-notetaker/.../summary.json", "action_items": "https://storage.googleapis.com/nylas-notetaker/.../action_items.json" } } }}Each URL in the media object points to a downloadable file. Download them directly from your webhook handler.
Download media files
Section titled “Download media files”The URLs in the webhook payload are valid for 60 minutes. Download the files immediately when you receive the webhook. If the URLs expire, you can retrieve fresh ones using the Notetaker API:
curl --request GET \ --url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/notetakers/<NOTETAKER_ID>/media' \ --header 'Authorization: Bearer <NYLAS_API_KEY>'{ "data": { "recording": "https://storage.googleapis.com/nylas-notetaker/.../recording.mp4", "thumbnail": "https://storage.googleapis.com/nylas-notetaker/.../thumbnail.png", "transcript": "https://storage.googleapis.com/nylas-notetaker/.../transcript.json", "summary": "https://storage.googleapis.com/nylas-notetaker/.../summary.json", "action_items": "https://storage.googleapis.com/nylas-notetaker/.../action_items.json" }}Nylas stores Notetaker media files for a maximum of 14 days. After that, the files are permanently deleted. Download and store the files in your own infrastructure as soon as they become available.
What the media files contain
Section titled “What the media files contain”| File | Format | Contents |
|---|---|---|
| Recording | MP4 (video) or MP3 (audio-only) | Full meeting recording at 1280x720 resolution, 12 FPS |
| Thumbnail | PNG | A screenshot captured from roughly halfway through the meeting |
| Transcript | JSON | Speaker-labelled transcript with timestamps for each segment |
| Summary | JSON | AI-generated meeting summary based on the transcript |
| Action items | JSON | AI-extracted list of action items from the conversation |
The transcript includes speaker names and timing data, so you can build features like searchable meeting archives or highlight key moments.
Things to know
Section titled “Things to know”Here are practical considerations for running Scheduler with Notetaker in production.
Conferencing is required
Section titled “Conferencing is required”Notetaker joins meetings through a video conferencing link. Without one, it has nothing to connect to. Your Configuration must include event_booking.conferencing with Google Meet, Microsoft Teams, or Zoom. If you skip conferencing, Notetaker settings are ignored.
Processing takes a few minutes after the meeting ends
Section titled “Processing takes a few minutes after the meeting ends”Notetaker does not deliver media instantly. After the meeting ends and the bot disconnects, Nylas processes the recording, generates the transcript, and (if enabled) produces the summary and action items. Expect a delay of a few minutes before the notetaker.media webhook fires. Longer meetings take longer to process.
Notetaker joins as a non-signed-in user
Section titled “Notetaker joins as a non-signed-in user”The bot appears as an external participant on the meeting platform. If the meeting is restricted to organization members, someone needs to approve the bot from the lobby. If nobody approves within 10 minutes of the scheduled join time, the bot times out and reports a failed_entry status.
Tip for Microsoft Teams meetings: If your organization restricts external participants, configure the meeting to allow anonymous users, or have the organizer admit Notetaker from the lobby.
Each booking creates a separate Notetaker instance
Section titled “Each booking creates a separate Notetaker instance”Every booking through your scheduling page gets its own Notetaker bot. Nylas does not reuse or deduplicate bots. This means if two guests book back-to-back meetings at 2:00 PM and 2:30 PM, two separate Notetaker instances are created and join independently.
Recording consent
Section titled “Recording consent”Notetaker handles recording disclosure in two ways. If you set show_ui_consent_message to true, guests see a notice on the scheduling page before they book. The bot also sends a message through the meeting platform’s chat a few minutes after joining.
That said, it is the meeting host’s responsibility to ensure compliance with local recording consent laws. The messages Notetaker sends are informational, not legal consent mechanisms.
Media file retention
Section titled “Media file retention”Nylas deletes media files after 14 days. Build an automated download pipeline that runs when you receive the notetaker.media webhook. Store the files in your own infrastructure if you need long-term access.
What’s next
Section titled “What’s next”You now have a working scheduling page that automatically records and transcribes every meeting. Here are some ways to go further:
- Scheduler and Notetaker integration for a full reference on all Notetaker configuration options within Scheduler
- Customize Scheduler to style the scheduling page, add custom fields to the booking form, and control the booking flow
- Handling Notetaker media files for details on media formats, download strategies, and storage recommendations
- Customize booking flows to add confirmation steps, redirect URLs, and cancellation policies
- Webhook notification schemas for the full payload reference for
booking.createdandnotetaker.mediaevents