← 返回 Skills 市场
gtkumar777

Granola Meeting Notes API

作者 gtkumar777 · GitHub ↗ · v1.0.3 · MIT-0
cross-platform ✓ 安全检测通过
122
总下载
0
收藏
0
当前安装
4
版本数
在 OpenClaw 中安装
/install granola-direct-api
功能描述
Access Granola meeting notes, summaries, transcripts, and attendees via the official Granola public REST API (public-api.granola.ai/v1). Use this skill when...
使用说明 (SKILL.md)

Granola Meeting Notes API

Read-only access to meeting notes, summaries, transcripts, and attendee info from the official Granola REST API. See README.md for setup and API key configuration.

Security and Data Handling

This skill is read-only — it cannot create, edit, or delete any data in Granola.

Network access: HTTPS requests only to public-api.granola.ai. No other domains are contacted.

Credential handling: API key read from GRANOLA_API_KEY environment variable, passed only in the HTTP Authorization header. The skill itself does not write the key to disk at runtime. Credentials are handled securely via standard OpenClaw environment variables, and users should follow established best practices for secret management on their host environment.

No external code execution: Uses only curl and jq. No downloads, no scripts, no binaries.

Authentication

-H "Authorization: Bearer $GRANOLA_API_KEY"

If the user gets a 401 error, the key is missing or invalid. Direct them to README.md for setup instructions.

Base URL

https://public-api.granola.ai/v1

Rate Limits

Burst: 25 requests per 5 seconds. Sustained: 5 req/sec (300/min). On 429, back off a few seconds and retry.

Important Behaviors

  • Only notes with a completed AI summary and transcript are returned. Notes still processing or never summarized are excluded (List omits them; Get returns 404).
  • Note IDs follow the pattern not_[a-zA-Z0-9]{14} (e.g., not_1d3tmYTlCICgjy).

Endpoints

1. List Notes

GET /v1/notes

Query parameters:

Parameter Type Default Description
page_size integer (1–30) 10 Max notes per page
created_after ISO 8601 date/datetime Notes created after this date
created_before ISO 8601 date/datetime Notes created before this date
updated_after ISO 8601 date/datetime Notes updated after this date
cursor string Pagination cursor from previous response

Example:

curl -s "https://public-api.granola.ai/v1/notes?page_size=20&created_after=$(date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ)" \
  -H "Authorization: Bearer $GRANOLA_API_KEY" | jq .

On macOS, replace -d '7 days ago' with -v-7d.

Response:

{
  "notes": [
    {
      "id": "not_1d3tmYTlCICgjy",
      "object": "note",
      "title": "Weekly sync with engineering",
      "owner": { "name": "Jane Smith", "email": "[email protected]" },
      "created_at": "2026-04-14T15:30:00Z",
      "updated_at": "2026-04-14T16:45:00Z"
    }
  ],
  "hasMore": true,
  "cursor": "eyJjcmVkZW50aWFsfQ=="
}

When hasMore is true, pass the cursor value to fetch the next page.


2. Get a Single Note

GET /v1/notes/{note_id}

Path parameter: note_id (required, pattern: not_[a-zA-Z0-9]{14})

Query parameter:

Parameter Type Description
include "transcript" Include the full transcript in response

Example:

curl -s "https://public-api.granola.ai/v1/notes/not_1d3tmYTlCICgjy?include=transcript" \
  -H "Authorization: Bearer $GRANOLA_API_KEY" | jq .

Response:

{
  "id": "not_1d3tmYTlCICgjy",
  "object": "note",
  "title": "Weekly sync with engineering",
  "owner": { "name": "Jane Smith", "email": "[email protected]" },
  "created_at": "2026-04-14T15:30:00Z",
  "updated_at": "2026-04-14T16:45:00Z",
  "calendar_event": {
    "event_title": "Weekly sync with engineering",
    "invitees": [{ "email": "[email protected]" }],
    "organiser": "[email protected]",
    "scheduled_start_time": "2026-04-14T15:30:00Z",
    "scheduled_end_time": "2026-04-14T16:30:00Z"
  },
  "attendees": [
    { "name": "Jane Smith", "email": "[email protected]" },
    { "name": "Bob Chen", "email": "[email protected]" }
  ],
  "folder_membership": [
    { "id": "fol_4y6LduVdwSKC27", "object": "folder", "name": "Engineering" }
  ],
  "summary_text": "Discussed sprint progress and blockers. Decided to push the release to next week.",
  "summary_markdown": "## Weekly Sync\
\
- Sprint progress reviewed\
- Release pushed to next week",
  "transcript": [
    {
      "speaker": { "source": "microphone" },
      "text": "Let's start with the sprint update.",
      "start_time": "2026-04-14T15:30:12Z",
      "end_time": "2026-04-14T15:30:18Z"
    },
    {
      "speaker": { "source": "speaker" },
      "text": "We're about two days behind on the auth module.",
      "start_time": "2026-04-14T15:30:20Z",
      "end_time": "2026-04-14T15:30:28Z"
    }
  ]
}

Key response fields:

Field Description
summary_text Plain-text AI summary
summary_markdown Markdown-formatted AI summary (may be null)
attendees Array of { name, email } for meeting participants
calendar_event Calendar metadata: title, invitees, organiser, scheduled times
folder_membership Folders the note belongs to
transcript Speaker segments with text, start_time, end_time

Transcript speaker sources: "microphone" = local user, "speaker" = other participants via meeting audio.


Error Handling

Status Meaning Action
401 Invalid or missing API key Check GRANOLA_API_KEY is set and valid
404 Note not found Note may still be processing, or ID is wrong
429 Rate limit exceeded Wait a few seconds and retry
500 Server error Retry after a brief delay

Workflow Recipes

Find meetings from the last N days

DAYS=7
curl -s "https://public-api.granola.ai/v1/notes?page_size=30&created_after=$(date -u -d "${DAYS} days ago" +%Y-%m-%dT%H:%M:%SZ)" \
  -H "Authorization: Bearer $GRANOLA_API_KEY" | jq '.notes[] | {id, title, created_at}'

Find meetings with a specific person

NOTE_IDS=$(curl -s "https://public-api.granola.ai/v1/notes?page_size=30&created_after=$(date -u -d '30 days ago' +%Y-%m-%dT%H:%M:%SZ)" \
  -H "Authorization: Bearer $GRANOLA_API_KEY" | jq -r '.notes[].id')

for ID in $NOTE_IDS; do
  RESULT=$(curl -s "https://public-api.granola.ai/v1/notes/$ID" \
    -H "Authorization: Bearer $GRANOLA_API_KEY")
  if echo "$RESULT" | jq -e '.attendees[]? | select(.name // "" | test("Bob"; "i"))' > /dev/null 2>&1; then
    echo "$RESULT" | jq '{id, title, created_at, attendees: [.attendees[].name]}'
  fi
done

Get the AI summary

curl -s "https://public-api.granola.ai/v1/notes/not_XXXXXXXXXXXXXX" \
  -H "Authorization: Bearer $GRANOLA_API_KEY" | jq '.summary_markdown // .summary_text'

Get full transcript

Only request when the user needs verbatim content — transcripts are large.

curl -s "https://public-api.granola.ai/v1/notes/not_XXXXXXXXXXXXXX?include=transcript" \
  -H "Authorization: Bearer $GRANOLA_API_KEY" | jq '.transcript[] | "\(.speaker.source): \(.text)"'

Tips

  • Use summary_text / summary_markdown for overviews. Only use include=transcript when the user needs the full conversation.
  • The API has no search endpoint. To find meetings by topic, list recent notes and scan titles/summaries client-side.
安全使用建议
This skill appears to do exactly what it claims: read-only access to Granola via the public API using an API key. Before installing, confirm you trust Granola and the environment where you store the key. Prefer a personal key with least privilege (not a broad workspace admin key) if possible, and store it using your platform's secret storage (OpenClaw config or environment) rather than committing it to files. You can verify behavior by checking network logs to confirm calls go only to public-api.granola.ai and by testing with a low-privilege key. Because this is an instruction-only skill with no downloads and no extra credentials, the risk is limited to what Granola’s API key provides (read access to notes/transcripts).
功能分析
Type: OpenClaw Skill Name: granola-direct-api Version: 1.0.3 The skill provides a legitimate interface to the official Granola REST API (public-api.granola.ai) using standard system utilities like curl and jq. It follows security best practices by utilizing environment variables for authentication (GRANOLA_API_KEY), restricting network access to the official API domain, and explicitly defining a read-only scope. No evidence of malicious intent, unauthorized data exfiltration, or prompt-injection attacks was found in SKILL.md or README.md.
能力标签
requires-oauth-tokenrequires-sensitive-credentials
能力评估
Purpose & Capability
Name/description, required binaries (curl, jq), and the declared primaryEnv (GRANOLA_API_KEY) all align with a read-only REST-API integration for meeting notes. Nothing requested appears unrelated to the stated purpose.
Instruction Scope
SKILL.md limits network calls to https://public-api.granola.ai, uses only curl/jq, and documents the Authorization header. Instructions do not ask the agent to read unrelated files or other environment variables. Setup steps reference OpenClaw config commands to store the API key, which is consistent with integration setup.
Install Mechanism
This is instruction-only with no install spec or downloads; no code is written to disk by the skill itself. Risk from installation artifacts is minimal.
Credentials
Only a single credential is declared (GRANOLA_API_KEY) and its use is justified by the API calls. The README and SKILL.md warn not to commit keys and show how to map the key into OpenClaw config; no unrelated secrets are requested.
Persistence & Privilege
always:false and no special privileges requested. It instructs the user to add the API key to OpenClaw configuration (expected for API-based skills) and to restart the gateway; it does not modify other skills or request system-wide credentials.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install granola-direct-api
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /granola-direct-api 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.3
Added explicit binary requirements (curl/jq), OS-agnostic setup instructions, and two-stage CLI verification for better reliability.
v1.0.2
Security alignment: Added explicit binary metadata and unified env-var persistence documentation.
v1.0.1
Security alignment: Corrected metadata declarations for env vars and updated security documentation to reflect standard environment variable persistence.
v1.0.0
Initial release: Uses direct REST endpoints for structured data. Optimized for VPS and headless environments. Bypasses MCP limitations.
元数据
Slug granola-direct-api
版本 1.0.3
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 4
常见问题

Granola Meeting Notes API 是什么?

Access Granola meeting notes, summaries, transcripts, and attendees via the official Granola public REST API (public-api.granola.ai/v1). Use this skill when... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 122 次。

如何安装 Granola Meeting Notes API?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install granola-direct-api」即可一键安装,无需额外配置。

Granola Meeting Notes API 是免费的吗?

是的,Granola Meeting Notes API 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Granola Meeting Notes API 支持哪些平台?

Granola Meeting Notes API 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Granola Meeting Notes API?

由 gtkumar777(@gtkumar777)开发并维护,当前版本 v1.0.3。

💬 留言讨论