> ## Documentation Index
> Fetch the complete documentation index at: https://docs.granola.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Webhook Endpoint

> Register an HTTPS URL to receive note events. Returns the endpoint's signing secret, shown only in this response.



## OpenAPI

````yaml POST /v1/webhook-endpoints
openapi: 3.1.0
info:
  title: Granola API
  version: 1.0.0
  description: API for accessing meeting data from Granola
servers:
  - url: https://public-api.granola.ai
    description: Production
security: []
paths:
  /v1/webhook-endpoints:
    post:
      summary: Create webhook endpoint
      description: >-
        Registers an HTTPS URL to receive event deliveries. With a Workspace API
        key the endpoint is workspace-managed: pass `scopes: ["workspace"]` (the
        key's own scope), and `folder_ids` may only reference folders the key
        can list.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateWebhookEndpointBody'
      responses:
        '201':
          description: Webhook endpoint created. The signing secret is only returned here.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateWebhookEndpointOutput'
        '400':
          description: Bad request
        '401':
          description: Unauthorized - Invalid API key
        '403':
          description: >-
            Forbidden - A requested scope is disabled by the workspace's API
            access controls
        '404':
          description: Not found - The webhooks API is not available for this workspace
      security:
        - ApiKeyAuth: []
components:
  schemas:
    CreateWebhookEndpointBody:
      type: object
      properties:
        url:
          type: string
          format: uri
          description: The publicly reachable HTTPS URL to deliver events to
          example: https://example.com/granola-webhooks
        scopes:
          type: array
          items:
            type: string
            enum:
              - personal
              - public
              - workspace
          minItems: 1
          description: >-
            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.
          example:
            - personal
            - public
        events:
          type: array
          items:
            type: string
            enum:
              - note.access_granted
              - note.edited
              - note.generated
          minItems: 1
          default:
            - note.access_granted
            - note.edited
            - note.generated
          description: Event names to subscribe to. Omit to subscribe to all events.
          example:
            - note.access_granted
            - note.edited
            - note.generated
        folder_ids:
          type: array
          items:
            type: string
            pattern: ^fol_[a-zA-Z0-9]{14}$
          minItems: 1
          maxItems: 100
          description: >-
            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`.
          example:
            - fol_2mKr8fQxLp7Ta3
      required:
        - url
        - scopes
    CreateWebhookEndpointOutput:
      allOf:
        - $ref: '#/components/schemas/WebhookEndpoint'
        - type: object
          properties:
            signing_secret:
              type: string
              description: >-
                Secret for verifying delivery signatures (Standard Webhooks
                HMAC-SHA256). Shown only once, in this response — store it
                securely.
              example: whsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
          required:
            - signing_secret
    WebhookEndpoint:
      type: object
      properties:
        id:
          type: string
          pattern: ^whe_[a-zA-Z0-9]{14}$
          description: The ID of the webhook endpoint
          example: whe_2mKr8fQxLp7Ta3
        object:
          type: string
          enum:
            - webhook_endpoint
        url:
          type: string
          format: uri
          description: >-
            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:
          type: boolean
          description: >-
            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:
          type: array
          items:
            type: string
            enum:
              - note.access_granted
              - note.edited
              - note.generated
          description: The event names this endpoint is subscribed to
          example:
            - note.access_granted
            - note.edited
            - note.generated
        folder_ids:
          type: array
          items:
            type: string
            pattern: ^fol_[a-zA-Z0-9]{14}$
          description: >-
            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.
          example: []
        scopes:
          type: array
          items:
            type: string
            enum:
              - personal
              - public
              - workspace
          description: >-
            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.
          example:
            - personal
            - public
        created_by:
          allOf:
            - $ref: '#/components/schemas/User'
            - type:
                - object
                - 'null'
              description: >-
                The user who created this endpoint. Null for a workspace-managed
                endpoint (`scopes` is `["workspace"]`), or when the creator's
                account was deleted.
              example:
                name: Oat Benson
                email: oat@granola.ai
        enabled:
          type: boolean
          description: Whether deliveries are active
          example: true
        created_at:
          type: string
          format: date-time
          description: The creation time of the webhook endpoint
          example: '2026-01-27T15:30:00Z'
      required:
        - id
        - object
        - url
        - url_redacted
        - events
        - folder_ids
        - scopes
        - created_by
        - enabled
        - created_at
    User:
      type: object
      properties:
        name:
          type:
            - string
            - 'null'
          description: The name of the user
          example: Oat Benson
        email:
          type: string
          format: email
          description: The email of the user
          example: oat@granola.ai
      required:
        - name
        - email
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: apiKey

````