Set up a webhook endpoint
You’ll need a Granola API key. A webhook endpoint uses the same access scopes as API keys; the scopes control which notes it receives events for:
Register your endpoint with Create webhook endpoint:
The
signing_secret is returned only in this response and cannot be
retrieved later. Store it securely. You need it to verify that deliveries
came from Granola.events chooses which events the endpoint receives; omit it to subscribe to all events.
On Enterprise plans, workspace admins control which scopes members can use in Settings → Workspace → General → API access for members, the same controls that govern API keys.
Events
Each way a note can change has its own event. Your endpoint receives the events it subscribed to, for notes in its scope:note.generated is sent only when a note’s first summary is generated while your endpoint can access it. If an already-generated note is later shared with you, your endpoint receives note.access_granted instead. Subscribe to both events when using webhooks to discover notes.
An example payload:
note.edited payloads also include a data object with changed_fields, the note fields that changed. Currently this is always ["summary"].
Payloads carry no note content. When you receive one, fetch the note with your API key. Access checks apply at fetch time, so a delivery never exposes more than the API would.
Verify deliveries
Every delivery is signed following the Standard Webhooks specification, so you can verify it with any Standard Webhooks library, or a few lines of code.
The signature is an HMAC-SHA256 of
{webhook-id}.{webhook-timestamp}.{body}, keyed with your signing secret (base64-decoded, after the whsec_ prefix).
Sample code for verifying it yourself:
webhook-timestamp is more than a few minutes old.
Deliveries and retries
Your endpoint has 15 seconds to respond, so acknowledge with a2xx before any heavy processing.
Failed webhook deliveries are retried using exponential backoff over a 24-hour period. A slow or failed response can trigger a retry for an event you already processed, so deduplicate on
event_id if handling an event twice would cause problems.
Manage webhook endpoints
List the endpoints your key can manage. A personal key sees the endpoints you created; a workspace key (or a workspace admin on Enterprise) sees every endpoint in the workspace:The signing secret is never included in list responses; it’s shown once, on
creation.

