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.
Filter by folder
Passfolder_ids to receive events only for notes in those folders (or their subfolders), instead of every note matching scopes. Find folder IDs with List folders.
scopes matches the folder’s visibility: include personal for a private folder, public for a workspace-visible one.
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 deliveries are retried with exponential backoff for four days. Retries reuse
event_id, which can be used to deduplicate deliveries.
After repeated failures with no success for four days, Granola disables the endpoint and emails its creator or workspace admins. Events missed while disabled are not replayed. Restore the receiver, then re-enable the endpoint in Settings → Connectors → Webhooks.
Manage webhook endpoints
List the endpoints your key can manage. A personal key sees the endpoints you created; a workspace admin on Enterprise sees every endpoint in the workspace:created_by is null when the endpoint creator’s account was deleted.
The signing secret is never included in list responses; it’s shown once, on
creation.

