Skip to main content
POST
Create webhook endpoint

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
url
string<uri>
required

The publicly reachable HTTPS URL to deliver events to

Example:

"https://example.com/granola-webhooks"

scopes
enum<string>[]
required

Which notes to receive events for. personal covers notes you own, notes shared directly with you, and notes in private folders shared with you. public covers notes visible to everyone in the workspace. Pass both for both sets of notes. Workspace admins can disable scopes for non-admin members in the workspace's API settings. With a Workspace API key, pass exactly ["workspace"] — the key's own scope: public workspace notes plus notes in spaces with Granola API access enabled.

Minimum array length: 1
Available options:
personal,
public,
workspace
Example:
events
enum<string>[]

Event names to subscribe to. Omit to subscribe to all events.

Minimum array length: 1
Available options:
note.access_granted,
note.edited,
note.generated
Example:
folder_ids
string[]

Restrict delivery to notes in these folders or any of their subfolders. Accepts folder IDs returned by GET /v1/folders. Omit to receive events for every note matching scopes. The same filter applies to all subscribed events.

Required array length: 1 - 100 elements
Pattern: ^fol_[a-zA-Z0-9]{14}$
Example:

Response

Webhook endpoint created. The signing secret is only returned here.

id
string
required

The ID of the webhook endpoint

Pattern: ^whe_[a-zA-Z0-9]{14}$
Example:

"whe_2mKr8fQxLp7Ta3"

object
enum<string>
required
Available options:
webhook_endpoint
url
string<uri>
required

The HTTPS URL deliveries are sent to. When url_redacted is true, reduced to the URL's origin.

Example:

"https://example.com/granola-webhooks"

url_redacted
boolean
required

True when this response reduces url to its origin because the caller is not the endpoint's creator (the path can carry credentials). Orphaned endpoints whose creator account was deleted are returned unredacted so they can be cleaned up.

Example:

false

events
enum<string>[]
required

The event names this endpoint is subscribed to

Available options:
note.access_granted,
note.edited,
note.generated
Example:
folder_ids
string[]
required

Folder IDs this endpoint's delivery is restricted to, or an empty array when unrestricted. Events fire only for notes in these folders or their subfolders.

Pattern: ^fol_[a-zA-Z0-9]{14}$
Example:
scopes
enum<string>[]
required

Which notes this endpoint receives events for. personal covers notes the creating user owns, notes shared directly with them, and notes in private folders shared with them. public covers notes visible to everyone in the workspace. workspace is reported for endpoints created with a workspace API key: public workspace notes plus notes in spaces with Granola API access enabled.

Available options:
personal,
public,
workspace
Example:
created_by
object
required

The user who created this endpoint. Null for a workspace-managed endpoint (scopes is ["workspace"]), or when the creator's account was deleted.

Example:
enabled
boolean
required

Whether deliveries are active

Example:

true

created_at
string<date-time>
required

The creation time of the webhook endpoint

Example:

"2026-01-27T15:30:00Z"

signing_secret
string
required

Secret for verifying delivery signatures (Standard Webhooks HMAC-SHA256). Shown only once, in this response — store it securely.

Example:

"whsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"