Agent skill
granola
Granola API for meeting notes. Use when user mentions "Granola", "meeting notes", or AI note-taking.
Install this agent skill to your Project
npx add-skill https://github.com/vm0-ai/vm0-skills/tree/main/granola
SKILL.md
Granola
Granola is an AI-powered meeting notes platform that automatically captures meeting transcripts, generates summaries, and organizes notes. Use the Enterprise API to programmatically access meeting notes, transcripts, summaries, attendees, and calendar event details.
Official docs:
https://docs.granola.ai/introduction
When to Use
Use this skill when you need to:
- Retrieve meeting notes with summaries and transcripts
- List and filter meeting notes by date or update time
- Access calendar event details and attendee information for meetings
- Build integrations for CRM sync, knowledge bases, or custom workflows
Prerequisites
- You must be on the Granola Enterprise plan
- Sign in to your Granola account as a workspace administrator
- Go to Settings > Workspaces > API tab
- Click Generate API Key and copy the key
Set environment variables:
export GRANOLA_TOKEN="your-granola-api-key"
How to Use
Base URL
- API:
https://public-api.granola.ai
1. List Notes
Retrieve all accessible meeting notes with pagination. Returns up to 30 notes per page.
curl -s -X GET "https://public-api.granola.ai/v1/notes?page_size=10" --header "Authorization: Bearer $(printenv GRANOLA_TOKEN)" | jq .
2. List Notes with Pagination
Use the cursor from a previous response to fetch the next page.
curl -s -X GET "https://public-api.granola.ai/v1/notes?page_size=10&cursor=CURSOR_VALUE" --header "Authorization: Bearer $(printenv GRANOLA_TOKEN)" | jq .
3. List Notes Filtered by Date
Filter notes created after or before a specific date, or updated after a specific date.
curl -s -X GET "https://public-api.granola.ai/v1/notes?created_after=2025-01-01&page_size=20" --header "Authorization: Bearer $(printenv GRANOLA_TOKEN)" | jq .
curl -s -X GET "https://public-api.granola.ai/v1/notes?created_before=2025-06-01&created_after=2025-01-01" --header "Authorization: Bearer $(printenv GRANOLA_TOKEN)" | jq .
curl -s -X GET "https://public-api.granola.ai/v1/notes?updated_after=2025-03-01" --header "Authorization: Bearer $(printenv GRANOLA_TOKEN)" | jq .
4. Get a Specific Note
Retrieve detailed information about a single note including summaries, attendees, and calendar event details. Note IDs follow the pattern not_ followed by 14 alphanumeric characters.
curl -s -X GET "https://public-api.granola.ai/v1/notes/not_XXXXXXXXXXXXXX" --header "Authorization: Bearer $(printenv GRANOLA_TOKEN)" | jq .
5. Get a Note with Transcript
Include the full meeting transcript by adding the include=transcript query parameter.
curl -s -X GET "https://public-api.granola.ai/v1/notes/not_XXXXXXXXXXXXXX?include=transcript" --header "Authorization: Bearer $(printenv GRANOLA_TOKEN)" | jq .
6. Iterate Through All Notes
Paginate through all available notes using cursors.
CURSOR=""
while true; do
if [ -z "$CURSOR" ]; then
RESPONSE=$(curl -s -X GET "https://public-api.granola.ai/v1/notes?page_size=30" --header "Authorization: Bearer $(printenv GRANOLA_TOKEN)")
else
RESPONSE=$(curl -s -X GET "https://public-api.granola.ai/v1/notes?page_size=30&cursor=$CURSOR" --header "Authorization: Bearer $(printenv GRANOLA_TOKEN)")
fi
echo "$RESPONSE" | jq '.data[] | {id, title}'
HAS_MORE=$(echo "$RESPONSE" | jq -r '.hasMore')
if [ "$HAS_MORE" != "true" ]; then break; fi
CURSOR=$(echo "$RESPONSE" | jq -r '.cursor')
done
Response Structure
List Notes Response
| Field | Type | Description |
|---|---|---|
data |
array | Array of note summary objects |
hasMore |
boolean | Whether more pages are available |
cursor |
string | Cursor for next page (present when hasMore is true) |
Note Summary Fields
| Field | Type | Description |
|---|---|---|
id |
string | Note ID (format: not_ + 14 chars) |
title |
string | Note title |
owner |
object | Owner with name and email |
created_at |
string | ISO 8601 creation timestamp |
updated_at |
string | ISO 8601 last update timestamp |
Full Note Fields (in addition to summary fields)
| Field | Type | Description |
|---|---|---|
calendar_event |
object | Calendar event with title, invitees, organizer, scheduled times |
attendees |
array | List of meeting attendees |
summaries |
object | AI-generated summaries in text and markdown format |
transcript |
array | Transcript entries with speaker, text, and timestamps (only when include=transcript) |
Guidelines
- API Key Scope: API keys provide read-only access to publicly accessible notes within the workspace and notes shared in workspace-wide folders
- Rate Limits: The API enforces a burst limit of 25 requests per 5 seconds and a sustained limit of 5 requests per second (300 per minute). Check for HTTP 429 responses and implement backoff
- Pagination: Use cursor-based pagination with
page_size(1-30, default 10) andcursorparameters. Always checkhasMoreto determine if more pages exist - Transcripts: Transcripts are not included by default. Use
include=transcriptquery parameter when you need transcript data to reduce payload size - Note ID Format: Note IDs follow the pattern
not_followed by 14 alphanumeric characters (e.g.,not_AbCdEfGhIjKlMn) - Enterprise Only: This API is only available on the Granola Enterprise plan
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
brave-search
Brave Search API for web search. Use when user says "search web", "Brave search", or asks to "find on web" without specifying Google.
supadata
Supadata API for YouTube/web data. Use when user mentions "Supadata", "YouTube data", "channel stats", or web scraping data.
roadmap-planning
Build and prioritize product roadmaps using scoring models like RICE, ICE, and value-effort matrices. Activate when creating a product roadmap, prioritizing features, sequencing initiatives, mapping dependencies, balancing team capacity, choosing between Now/Next/Later or quarterly planning, or communicating roadmap tradeoffs to executives and stakeholders.
qdrant
Qdrant API for vector search. Use when user mentions "Qdrant", "vector database", "semantic search", or embeddings storage.
calendly
Calendly scheduling API. Use when user mentions "Calendly", "calendly.com", "schedule a meeting", "booking link", "event types", or asks about interview scheduling.
stripe
Stripe API for payments. Use when user mentions "Stripe", "payment", "subscription", "billing", "invoice", or asks about payment processing.
Didn't find tool you were looking for?