# Troubleshoot Notetaker

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

When a Notetaker doesn't behave the way you expected, the history endpoint is the first place to look. It returns every state change for a single bot in order, so you can see whether it was scheduled, whether it joined, when it left, and whether media was produced. This page covers how to read that timeline and the four problems it most often explains.

## Get the history of a Notetaker

The history endpoints return an ordered timeline of everything that happened to one bot. There's one for each Notetaker form:

- **Grant-based Notetakers**: [`GET /v3/grants/<NYLAS_GRANT_ID>/notetakers/<NOTETAKER_ID>/history`](/docs/reference/api/notetaker/get-notetaker-history/)
- **Standalone Notetakers**: [`GET /v3/notetakers/<NOTETAKER_ID>/history`](/docs/reference/api/standalone-notetaker/get-standalone-notetaker-history/)

Call the endpoint with your API key and the Notetaker ID from an API response or webhook notification. The response holds one entry per event, up to 5 event types, and each entry is a snapshot of the whole Notetaker at that moment rather than a diff.

```bash [Grant-based Notetaker history]

curl --request GET \
  --url "https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/notetakers/<NOTETAKER_ID>/history" \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <NYLAS_API_KEY>'


```

```bash [Standalone Notetaker history]

curl --request GET \
  --url "https://api.us.nylas.com/v3/notetakers/<NOTETAKER_ID>/history" \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <NYLAS_API_KEY>'


```

```json [Sample history response]

{
  "request_id": "abc-123-def",
  "data": {
    "events": [
      {
        "created_at": 1700000300,
        "event_type": "notetaker.media",
        "data": {
          "grant_id": "d4e78fca-2a90-4b6e-91c3-a7f2bcb0d498",
          "id": "71c807752c744ad0902f64d43e6cc399",
          "meeting_link": "https://meet.google.com/abc-def-ghi",
          "meeting_provider": "Google Meet",
          "join_time": 1700000050,
          "object": "notetaker",
          "state": "available",
          "status": "available",
          "meeting_settings": {
            "audio_recording": true,
            "video_recording": true,
            "transcription": true,
            "transcription_settings": {
              "expected_languages": ["en", "es"],
              "fallback_language": "en"
            },
            "summary": true,
            "action_items": true
          },
          "media": {
            "recording": "https://storage.googleapis.com/nylas-notetaker-uc1-prod-notetaker/recording.mp4",
            "recording_duration": "3600",
            "transcript": "https://storage.googleapis.com/nylas-notetaker-uc1-prod-notetaker/transcript.json",
            "thumbnail": "https://storage.googleapis.com/nylas-notetaker-uc1-prod-notetaker/thumbnail.jpg",
            "summary": "https://storage.googleapis.com/nylas-notetaker-uc1-prod-notetaker/summary.txt",
            "action_items": "https://storage.googleapis.com/nylas-notetaker-uc1-prod-notetaker/action_items.json"
          }
        }
      },
      {
        "created_at": 1700000200,
        "event_type": "notetaker.meeting_state",
        "data": {
          "grant_id": "d4e78fca-2a90-4b6e-91c3-a7f2bcb0d498",
          "id": "71c807752c744ad0902f64d43e6cc399",
          "meeting_link": "https://meet.google.com/abc-def-ghi",
          "meeting_provider": "Google Meet",
          "join_time": 1700000050,
          "object": "notetaker",
          "state": "disconnected",
          "status": "disconnected",
          "meeting_state": "meeting_ended"
        }
      },
      {
        "created_at": 1700000000,
        "event_type": "notetaker.created",
        "data": {
          "grant_id": "d4e78fca-2a90-4b6e-91c3-a7f2bcb0d498",
          "id": "71c807752c744ad0902f64d43e6cc399",
          "meeting_link": "https://meet.google.com/abc-def-ghi",
          "meeting_provider": "Google Meet",
          "join_time": 1700000050,
          "object": "notetaker",
          "state": "scheduled",
          "status": "scheduled"
        }
      }
    ]
  }
}


```

The `data.events` array is ordered **most recent first**. Each item has three fields:

- **`created_at`**: When the event was recorded (Unix timestamp, in seconds).
- **`event_type`**: The kind of change that occurred: `notetaker.created`, `notetaker.updated`, `notetaker.meeting_state`, `notetaker.media`, or `notetaker.deleted`.
- **`data`**: The Notetaker payload at that moment, including `state`, `meeting_state`, and (for media events) a `media` object. History entries use the same shape as webhook payloads, so settings appear under the legacy name `meeting_settings` even when you sent them as `notetaker_settings`.

## Notetaker never joined the meeting

Notetaker is always a non-signed-in user on the meeting platform. If the meeting is limited to organization members, or the host has a waiting room, someone has to admit the bot. If nobody does within 10 minutes of the scheduled join time, the bot gives up and Nylas sends a [`notetaker.meeting_state` webhook](/docs/reference/notifications/notetaker/notetaker-meeting_state/) with `status` set to `failed_entry`.

To confirm what happened, check the history:

- Look for a `notetaker.created` event to confirm the bot was scheduled at all.
- Check the later `notetaker.meeting_state` events. Repeated `connecting` or a final `failed_entry` value points to a join or lobby issue on the meeting provider's side.
- If there are no `notetaker.meeting_state` events, verify that the meeting link is valid and the `join_time` is correct.
- If the request itself returned `400 Bad Request` with the message `notetaker dispatch is disabled`, dispatch is [paused](/docs/v3/notetaker/dispatch-suppression/) for that grant, workspace, or application.

## Notetaker left the meeting earlier than expected

By default a Notetaker leaves after 300 seconds of continuous silence, and it also leaves when the meeting ends, when a participant removes it, or when you call the leave endpoint. The history tells you which one it was.

- Find the last `notetaker.meeting_state` event and read `data.meeting_state`. `meeting_ended` means the call closed, `kicked` means a participant removed the bot, and `api_request` means your app called the [leave endpoint](/docs/reference/api/notetaker/post-notetaker-leave/).
- Compare that event's `created_at` to the meeting's expected duration. A gap that matches your `leave_after_silence_seconds` value usually means [silence detection](/docs/v3/notetaker/#silence-detection) ended the recording.

## Media or transcripts never arrived

Nylas needs a few minutes after the bot leaves to process the recording, and the download URLs in the resulting webhook expire after 60 minutes. Most "missing media" reports are one of those two, and the history confirms which.

- Confirm there's at least one `notetaker.meeting_state` event with the bot in an `attending` state and `meeting_state` set to `recording_active`. Without it, nothing was recorded.
- Look for a `notetaker.media` event. If it's present, inspect `data.media` for the `recording`, `transcript`, `summary`, and `action_items` entries and check whether your app downloaded them before the URLs expired. Fresh URLs come from the [media endpoint](/docs/v3/notetaker/media-handling/#regenerate-expired-media-urls).
- If there's no `notetaker.media` event, processing failed. Share the full history payload with Nylas Support.

The media endpoint's status code also narrows it down. A `404` means media is still processing, or the Notetaker never reached `media_available`. A `410` with the body `media deleted` means the [retention window](/docs/v3/notetaker/retention-policies/) passed or someone deleted the Notetaker, and the files are gone.

## Settings or schedule changed unexpectedly

Because settings are read when the bot joins rather than when it's scheduled, a Notetaker can join with different values than the ones you sent if a [configuration](/docs/v3/notetaker/configurations/) changed in between. The `notetaker.updated` events show exactly what changed and when.

- Review each `notetaker.updated` event for changes to `join_time`, `meeting_link`, or `meeting_settings`. Calendar sync produces these when an event moves or its details change.
- Because events are most recent first, step backwards through the array to reconstruct how the Notetaker's settings evolved. The `meeting_settings` object in each snapshot is the resolved result of the configuration hierarchy at that moment, not just what you passed inline.

## Related topics

- [Using Nylas Notetaker](/docs/v3/notetaker/) for the invite flow, cancel, delete, and leave endpoints.
- [Handling Notetaker media files](/docs/v3/notetaker/media-handling/) for download URLs and regeneration.
- [Notetaker webhook notifications](/docs/reference/notifications/#notetaker-notifications) for the payloads the history mirrors.