Skip to main content
Granola logo

Overview

Add Granola to any ModuleX agent or workflow. Retrieve meeting notes, summaries, attendees, calendar event details, and transcripts from Granola through its REST API (public-api.granola.ai).
Categories: Productivity & Collaboration · Meeting · Note Taking · Auth: API Key · Actions: 3

Authentication

API Key Authentication

Authenticate using your Granola API key
1

Step 1

Open Granola and go to Settings (a Business plan is required)
2

Step 2

Navigate to the API / Developer section
3

Step 3

Create a new API key and copy it
4

Step 4

Paste the API key below

Required Credentials

FieldDescriptionRequiredFormat
Granola API KeyYour Granola API keyYesgrn_xxxxxxxxxxxxxxxxxxxxxxxx

Available Actions

Parameters

created_before
string
Return notes created before this date (ISO 8601)
created_after
string
Return notes created after this date (ISO 8601)
updated_after
string
Return notes updated after this date (ISO 8601)
folder_id
string
Return notes in this folder and its child folders (e.g., fol_4y6LduVdwSKC27)
cursor
string
Pagination cursor from a previous response
page_size
integer
Number of notes per page (1-30, default 10)

Response

{
  "$defs": {
    "NoteSummary": {
      "additionalProperties": false,
      "description": "A single note row in ``list_notes``.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Id"
        },
        "title": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Title"
        },
        "owner_name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Owner Name"
        },
        "owner_email": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Owner Email"
        },
        "created_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Created At"
        },
        "updated_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Updated At"
        }
      },
      "title": "NoteSummary",
      "type": "object"
    }
  },
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "notes": {
      "items": {
        "$ref": "#/$defs/NoteSummary"
      },
      "title": "Notes",
      "type": "array"
    },
    "has_more": {
      "default": false,
      "title": "Has More",
      "type": "boolean"
    },
    "cursor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Cursor"
    }
  },
  "required": [
    "success"
  ],
  "title": "ListNotesOutput",
  "type": "object"
}

Parameters

note_id
string
required
The note ID (e.g., not_1d3tmYTlCICgjy)
include_transcript
boolean
Whether to include the meeting transcript (Default: false)

Response

{
  "$defs": {
    "Attendee": {
      "additionalProperties": false,
      "description": "A meeting attendee in ``get_note``.",
      "properties": {
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "email": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Email"
        }
      },
      "title": "Attendee",
      "type": "object"
    },
    "FolderRef": {
      "additionalProperties": false,
      "description": "A folder reference.\n\nUsed both for a note's folder memberships in ``get_note`` (id, name)\nand for the workspace folder listing in ``list_folders``\n(id, name, parent_folder_id).",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "parent_folder_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Parent Folder Id"
        }
      },
      "title": "FolderRef",
      "type": "object"
    },
    "TranscriptSegment": {
      "additionalProperties": false,
      "description": "A single transcript entry in ``get_note``.",
      "properties": {
        "speaker": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Speaker"
        },
        "speaker_label": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Speaker Label"
        },
        "text": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Text"
        },
        "start_time": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Start Time"
        },
        "end_time": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "End Time"
        }
      },
      "title": "TranscriptSegment",
      "type": "object"
    }
  },
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Id"
    },
    "title": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Title"
    },
    "owner_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Owner Name"
    },
    "owner_email": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Owner Email"
    },
    "created_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Created At"
    },
    "updated_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Updated At"
    },
    "web_url": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Web Url"
    },
    "summary_text": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Summary Text"
    },
    "summary_markdown": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Summary Markdown"
    },
    "attendees": {
      "items": {
        "$ref": "#/$defs/Attendee"
      },
      "title": "Attendees",
      "type": "array"
    },
    "folders": {
      "items": {
        "$ref": "#/$defs/FolderRef"
      },
      "title": "Folders",
      "type": "array"
    },
    "calendar_event_title": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Calendar Event Title"
    },
    "calendar_organiser": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Calendar Organiser"
    },
    "calendar_event_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Calendar Event Id"
    },
    "scheduled_start_time": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Scheduled Start Time"
    },
    "scheduled_end_time": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Scheduled End Time"
    },
    "invitees": {
      "items": {
        "type": "string"
      },
      "title": "Invitees",
      "type": "array"
    },
    "transcript": {
      "anyOf": [
        {
          "items": {
            "$ref": "#/$defs/TranscriptSegment"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Transcript"
    }
  },
  "required": [
    "success"
  ],
  "title": "GetNoteOutput",
  "type": "object"
}

Parameters

cursor
string
Pagination cursor from a previous response
page_size
integer
Number of folders per page (1-30, default 10)

Response

{
  "$defs": {
    "FolderRef": {
      "additionalProperties": false,
      "description": "A folder reference.\n\nUsed both for a note's folder memberships in ``get_note`` (id, name)\nand for the workspace folder listing in ``list_folders``\n(id, name, parent_folder_id).",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "parent_folder_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Parent Folder Id"
        }
      },
      "title": "FolderRef",
      "type": "object"
    }
  },
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "folders": {
      "items": {
        "$ref": "#/$defs/FolderRef"
      },
      "title": "Folders",
      "type": "array"
    },
    "has_more": {
      "default": false,
      "title": "Has More",
      "type": "boolean"
    },
    "cursor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Cursor"
    }
  },
  "required": [
    "success"
  ],
  "title": "ListFoldersOutput",
  "type": "object"
}

Limits & Quotas

  • The API only returns notes that have a generated AI summary and transcript; notes still processing or never summarized are omitted from list responses and return 404 on direct access.
  • page_size accepts 1-30 (default 10) for list_notes and list_folders.
  • Rate limits are applied per user or workspace depending on the key’s access scope; exceeding them returns 429 Too Many Requests.
  • Error model: non-2xx responses and timeouts are caught and returned as success=False + error rather than raising. Plan for retries on the agent side based on the error string.

Grain

Obsidian

Reflect