# What is a notetaker API?

Source: https://developer.nylas.com/docs/cookbook/notetaker/what-is-a-notetaker-api/

You want your app to capture what happened in a Zoom, Microsoft Teams, or Google Meet call without asking anyone to hit record. Building that yourself means writing a separate meeting bot for each platform, solving three different join and admission flows, capturing audio and video reliably, then bolting speech-to-text on top. That's three integrations and a transcription pipeline before you produce a single useful sentence.

A notetaker API collapses all of that into one call. You send a meeting link, a bot joins the call, and minutes after the meeting ends you get back a recording, a transcript, a summary, and a list of action items. This page explains what a notetaker API is, how it differs from a plain transcription service, and how to wire one into a scheduling workflow.

## What is a notetaker API and how does it work for meeting transcription?

A notetaker API is an interface that programmatically sends a bot into a live video meeting to record and transcribe it. The bot joins Zoom, Teams, or Google Meet as a guest participant, captures audio and video, and after the call returns an MP4 recording plus a speaker-labeled JSON transcript through a webhook. You never run the bot infrastructure yourself.

The Nylas Notetaker API works in four stages. First, you create a bot with `POST /v3/grants/{grant_id}/notetakers` and pass a `meeting_link`. The bot joins immediately, or at a Unix timestamp you set through `join_time`. Second, it records the call and emits `notetaker.meeting_state` webhooks as it connects, attends, and disconnects. Third, after the meeting ends, the API processes the media. Fourth, a `notetaker.media` webhook fires once each file is ready. One endpoint covers all 3 platforms. If nobody admits the bot from the lobby, the join ends in a `failed_entry` state with an `admission_timeout` reason rather than hanging forever. The [Notetaker API guide](/docs/cookbook/notetaker/notetaker-api-guide/) walks through the full create-to-download flow.

## What is the difference between a meeting recorder app and a transcription?

A meeting recorder captures the live call (it joins the meeting, grabs audio and video, and produces a recording file). Transcription is a separate step that converts that recorded audio into text. A standalone transcription API like a speech-to-text service only handles the second half: you still have to get the audio out of the meeting yourself, which is the hard part.

A notetaker API does both, plus the AI layer on top. With the Nylas Notetaker API you toggle each output through the `meeting_settings` object. Set `audio_recording` and `video_recording` to `true` for the capture, `transcription` for the text, and `summary` or `action_items` for the AI outputs. The dependency chain is strict: `transcription` requires both recording flags on, and `summary` and `action_items` each require `transcription`. A pure transcription service can't enforce that because it never touches the meeting. The table below shows where each tool stops.

| Capability | Speech-to-text API | Meeting recorder app | **Nylas Notetaker API** |
| --- | --- | --- | --- |
| Joins the live meeting | No | Yes | **Yes** |
| Records audio and video | No | Yes | **Yes** |
| Produces a transcript | Yes (from a file you supply) | Sometimes | **Yes** |
| AI summary and action items | No | Rarely | **Yes** |
| Delivery method | API response | Varies | **Webhook (`notetaker.media`)** |
| Platforms covered | N/A | Often 1 | **Zoom, Teams, Meet** |

## How do I integrate an AI note taker into a scheduling app workflow?

Trigger the notetaker bot from the same event that confirms a booking. When a meeting is scheduled and a conferencing link exists, send that link to `POST /v3/grants/{grant_id}/notetakers` with `join_time` set to the meeting's start, in Unix seconds. The bot waits and joins on schedule, so every booked call records itself with no manual step per meeting.

The cleanest pattern uses the booking confirmation as the hook. Your scheduling page creates a calendar event with a Zoom, Teams, or Meet link, and your backend reads that link and creates one Notetaker bot for it. To avoid double bots, remember the API doesn't de-duplicate: every create request invites a new bot, so store the returned `notetaker_id` and skip a second create for the same event. You can also set `leave_after_silence_seconds` (between 10 and 3600, default 300) so the bot leaves once the call goes quiet instead of recording an empty room. The [scheduling with notetaking guide](/docs/cookbook/use-cases/build/scheduling-with-notetaking/) shows the end-to-end wiring.

## Create a notetaker bot

The request below creates a bot through `POST /v3/grants/{grant_id}/notetakers`. You pass the `meeting_link` and, optionally, a `meeting_settings` object to choose outputs. Only `meeting_link` is required. Omit `join_time` and the bot joins right away. The `meeting_settings` object toggles audio recording, video recording, transcription, summary, and action items independently, so a single call can capture audio only or produce all five outputs at once.

```bash
curl --request POST \
  --url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/notetakers' \
  --header 'Authorization: Bearer <NYLAS_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
    "meeting_link": "https://meet.google.com/abc-defg-hij",
    "name": "Acme Notetaker",
    "meeting_settings": {
      "audio_recording": true,
      "video_recording": true,
      "transcription": true,
      "summary": true,
      "action_items": true
    }
  }'
```

```python [createNotetaker-Python SDK]
from nylas import Client

nylas = Client(api_key="<NYLAS_API_KEY>")

notetaker = nylas.notetakers.invite(
    request_body={
        "meeting_link": "https://meet.google.com/abc-defg-hij",
        "name": "Acme Notetaker",
        "meeting_settings": {
            "audio_recording": True,
            "video_recording": True,
            "transcription": True,
            "summary": True,
            "action_items": True,
        },
    },
    identifier="<NYLAS_GRANT_ID>",
)

print(notetaker.data.id)
```

## Fetch the recording and transcript

Once the `notetaker.media` webhook fires, call `GET /v3/grants/{grant_id}/notetakers/{notetaker_id}/media` to get download links for the recording, transcript, summary, and action items. Each download link is valid for 60 minutes from generation, so download promptly or call the endpoint again for fresh links. Nylas [retains the underlying files for up to 14 days](/docs/v3/notetaker/media-handling/) before they're deleted from its servers.

```bash
curl --request GET \
  --url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/notetakers/<NOTETAKER_ID>/media' \
  --header 'Authorization: Bearer <NYLAS_API_KEY>'
```

The response nests each file under its own object. The `recording` object holds a `url` (an MP4) and a `duration` in seconds, the `transcript` object holds a `url` (JSON with speaker labels), and `summary` and `action_items` objects appear when those settings were on. Every object also reports `size`, `expires_at`, and `ttl`, so treat the links as fetch-once-and-store rather than long-lived references. To verify each `notetaker.media` payload before acting on it, follow the [Notetaker webhooks guide](/docs/cookbook/notetaker/notetaker-webhooks/).

## When a standalone bot is the right choice

Use the standalone `POST /v3/notetakers` endpoint when the meeting doesn't belong to a connected account. Standalone Notetakers don't reference a `grant_id`, so they suit cases where you have a meeting link but no authenticated calendar (a one-off interview link, a customer call pasted into a form, or a meeting outside your users' connected accounts). Roughly any link-first flow fits here.

The honest tradeoff: standalone bots skip calendar context, so they can't auto-discover upcoming meetings or sync to a user's events. If your product records meetings from users' connected calendars, the grant-scoped endpoint is the better fit because it ties each recording to a known account and unlocks calendar sync. Pick standalone for link-in, media-out simplicity; pick grant-scoped when the meeting lives on a calendar you already manage. For a side-by-side with a build-it-yourself bot service, see the [Recall.ai alternative comparison](/docs/cookbook/notetaker/recall-ai-alternative/).

## What's next

- [Notetaker API guide](/docs/cookbook/notetaker/notetaker-api-guide/) for the full create, record, and download flow
- [Add a scheduling page with automatic notetaking](/docs/cookbook/use-cases/build/scheduling-with-notetaking/) to record every booked meeting
- [Verify and handle Notetaker webhooks](/docs/cookbook/notetaker/notetaker-webhooks/) for the `notetaker.media` payload
- [Getting started with Nylas](/docs/v3/getting-started/) to create a project and your first grant