Setu Recipes: reusable digital workers across every app.Browse templates

Integrations / Granola

Granola

Meeting notes from Granola: list and read notes, AI summaries, transcripts, folders and spaces.

5 actions API key 5 read0 write Calls public-api.granola.ai

Connect

TypeScript
const conn = await setu.connections.initiate({ userId: "user_1", toolkit: "granola" });
console.log(conn.connectUrl); // show this to your user
await conn.waitUntilActive();

Permissions requested

This toolkit uses a single credential and requests no scopes.

Actions

Get meeting notereadgranola.get_noteGet one Granola meeting note: title, attendees, AI summary and optionally the transcript. A 413 means the transcript is too large: use get_transcript.
InputTypeDescription
note_idstringRequiredNote ID starting with not_
includestringOptionalSet to transcript to include the transcript inline
TypeScript
await setu.execute({
  userId: "user_1",
  action: "granola.get_note",
  input: {
    "note_id": "<note_id>"
  },
});
Get meeting transcriptreadgranola.get_transcriptGet the transcript of a Granola meeting note in pages, with speaker source and timestamps.
InputTypeDescription
note_idstringRequiredNote ID starting with not_
page_sizeintegerOptionalTranscript items per page, 1 to 100 (default 50)
cursorstringOptionalCursor from the previous page
TypeScript
await setu.execute({
  userId: "user_1",
  action: "granola.get_transcript",
  input: {
    "note_id": "<note_id>"
  },
});
List foldersreadgranola.list_foldersList Granola folders alphabetically, with parent folder and space, to find folder IDs for filtering notes.
InputTypeDescription
page_sizeintegerOptionalFolders per page, 1 to 30
cursorstringOptionalCursor from the previous page
TypeScript
await setu.execute({
  userId: "user_1",
  action: "granola.list_folders",
  input: {},
});
List meeting notesreadgranola.list_notesList Granola meeting notes (only those with a finished AI summary), optionally filtered by date, folder or space. Returns a cursor for the next page.
InputTypeDescription
created_afterstringOptionalNotes created after this date or ISO date-time, for example 2026-01-27
created_beforestringOptionalNotes created before this date or ISO date-time
updated_afterstringOptionalNotes updated after this date or ISO date-time
folder_idstringOptionalOnly notes in this folder (fol_...) and its child folders
space_idstringOptionalOnly notes in this space (spa_...)
page_sizeintegerOptionalNotes per page, 1 to 30 (default 10)
cursorstringOptionalCursor from the previous page
TypeScript
await setu.execute({
  userId: "user_1",
  action: "granola.list_notes",
  input: {},
});
List spacesreadgranola.list_spacesList the Granola spaces (shared team areas) you can access, to find space IDs for filtering notes.
InputTypeDescription
page_sizeintegerOptionalSpaces per page, 1 to 30
cursorstringOptionalCursor from the previous page
TypeScript
await setu.execute({
  userId: "user_1",
  action: "granola.list_spaces",
  input: {},
});