All integrations

Granola

GRANOLA · FILES & DOCS

Meeting notes and transcripts from the user’s own Granola account.

Connecting Granola in practice

Granola only returns notes that already have a generated AI summary and a transcript, so a meeting that is still processing is absent from List Notes and 404s on Get Note, and a page holds at most 30 notes against a default of 10. The rate limit is a small bucket too: 25 requests of burst over 5 seconds, settling to 5 a second.

Scopes that draw scrutiny

  • Personal notes (API key access scope) Granola defines access by named scope rather than OAuth token. This one covers notes the key owner owns, notes shared directly with them, and notes in private folders shared with them — the only route to private meeting content.
  • Public notes (API key access scope) Notes visible to everyone in the workspace, including everything in the Team space. Broad but not private.
  • Workspace API key Admin-created, belongs to the workspace rather than a person, and Granola documents that these keys "don’t expire and aren’t tied to anyone’s account", so they survive the admin leaving.

Rate limits

  • Burst capacity 25 requests over a 5-second window, sustained 5 requests per second (300 per minute).
  • The limit applies per user or per workspace depending on the key’s access scope.
  • List Notes page_size is capped at 30 with a default of 10, so a year of meetings is hundreds of cursor hops.
  • Exceeding the limit returns 429 Too Many Requests.

Who has to approve

API keys need a Business or Enterprise plan. On Enterprise a workspace admin decides which access scopes members may use at all, in Settings → Workspace → General → API access for members, and can allow personal notes, public notes, both or neither. Only admins can create workspace API keys — and Granola warns that "Allow Granola API access is turned on by default when you create a new space", so a new space is readable by workspace keys unless someone turns it off at creation.

Worth knowing

  • A transcript too large to inline returns 413 with error code TRANSCRIPT_TOO_LARGE, and the only way to get it is the separate /v1/notes/{note_id}/transcript endpoint with its own cursor.
  • A webhook endpoint’s signing secret is returned only in the creation response and cannot be retrieved later; the signature is HMAC-SHA256 over {webhook-id}.{webhook-timestamp}.{body}.
  • Your endpoint has 15 seconds to answer. Failures retry with exponential backoff for four days, after which Granola disables the endpoint and does not replay the events missed while it was off.
  • note.generated fires only for a note’s first summary while your endpoint could already see it; a note shared with you later arrives as note.access_granted instead, so discovery needs both events subscribed — and there is no sandbox to try that in, only a test folder in the live workspace.

Checked against Granola API introduction (2026-09-29), Granola API keys and access scopes (2026-09-29), Granola webhooks (2026-09-29), List Notes reference (2026-09-29)

Acts as the person, not as itself

Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.

Credentials never touch the agent

Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.

Every call on the record

Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.

What an agent can do

Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.

granola_get_account_infoREAD

Report which Granola account email and active workspace this connection is bound to. CALL THIS WHEN A MEETING SEARCH RETURNS NOTHING: Granola MCP follows whichever workspace is selected in the desktop app, so the wrong workspace, the wrong account email, a free plan's 30-day window and a genuinely empty workspace all produce the same empty result. Granola's own troubleshooting guide names this as the first diagnostic step.

read_notes_mcp
granola_get_meeting_transcriptREAD

Read the raw transcript of one Granola meeting over Granola's MCP server, for direct quotes and exact wording where the AI summary is not enough. PAID PLANS ONLY - a free-plan account is refused by Granola in its own words rather than by Agentic Fabriq, and that sentence should be relayed to the user rather than retried. The transcript is verbatim speech from everyone present, including people who never used Agentic Fabriq.

read_notes_mcp
granola_get_meetingsREAD

Read one or more Granola meeting notes in full over Granola's MCP server: title, date, attendees, the user's own private notes and the AI summary. Takes several meeting ids in a single call. Ids come from granola_list_meetings or granola_query_meetings - never a meeting title and never a guess.

read_notes_mcp
granola_get_noteREAD

Get one Granola meeting note by id, including its AI summary (plain text and markdown), attendees, calendar event and folder membership. Pass include=transcript to get the transcript inline; if it is too large the call fails with TRANSCRIPT_TOO_LARGE and granola_get_transcript must be used instead. A meeting whose summary and transcript are still being generated answers 404 - that is a normal not-ready state, not a broken connection.

read_notes
granola_get_transcriptREAD

Read a Granola meeting transcript in pages. Use this for long meetings and whenever granola_get_note answers TRANSCRIPT_TOO_LARGE. Each item carries the spoken text, its start and end time, and a speaker whose attribution is 'me' (the note taker) or 'them'. Page with hasMore and cursor, not by counting items.

read_notes
granola_list_foldersREAD

List the Granola folders this key can see, with each folder's parent so the hierarchy can be reconstructed. Use it to find the folder_id that granola_list_notes filters on.

read_notes
granola_list_meeting_foldersREAD

List the Granola folders the connected account can access over Granola's MCP server, with id, title, description and note count. The ids are what granola_list_meetings filters on. PAID PLANS ONLY.

read_notes_mcp
granola_list_meetingsREAD

List meeting notes the connected Granola account can access, with meeting id, title, date and attendees. Runs over Granola's MCP server. Folder filtering is a paid-plan feature; on the free plan only the last 30 days of personal notes are visible. The ids returned here are what granola_get_meetings and granola_get_meeting_transcript consume - they are NOT interchangeable with the not_* ids granola_list_notes returns.

read_notes_mcp
granola_list_notesREAD

List Granola meeting notes, newest data first, filtered by creation or update date and optionally by folder. Returns id, title, owner and timestamps for each note - call granola_get_note for the summary and transcript. Only meetings that already have a generated AI summary and transcript are returned; one still being processed is silently absent rather than an error, so an empty result is not evidence of an empty workspace and must not be treated as a failure.

read_notes
granola_list_webhook_endpointsREAD

List the webhook endpoints registered on this Granola workspace, to audit where meeting notes are being shipped and by whom. Granola redacts each delivery url to its bare origin for anyone who did not create the endpoint, because a webhook path can carry a credential. Read-only - creating, repointing and deleting webhooks are not exposed.

read_audit
granola_query_meetingsREAD

Ask a natural-language question across the user's Granola meetings and get an answer with citations. THIS IS THE ONLY SEARCH GRANOLA HAS - its REST API declares no query, search or full-text parameter on any endpoint, so granola_list_notes cannot answer 'which meeting did we agree the pricing in' at any page size. Runs over Granola's MCP server and needs the browser sign-in connection, which works on every Granola plan including free. Full sentences work better than keywords.

read_notes_mcp

Put Granola behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.