> ## 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.

# Search notes

> Search indexed note titles and shared summaries by keyword, or filter by calendar participant. Results contain the standard note summary plus meeting_at; use Get note to retrieve content. Filter by space_id to search a space and its folders; when folder_id is also provided, both filters apply. Each recording is a separate note. Private notes and transcripts are not searched. Only live notes with generated summaries are returned, including for compliance keys. Search coverage depends on indexing; use List notes for a complete listing. An empty body browses indexed notes without a default date window. Pages examine up to 100 index candidates, so access checks and filters may produce short or empty pages even when hasMore is true. Continue with cursor while hasMore is true. Cursors expire after 15 minutes and are bound to the API key and scope; access is rechecked on every page. After 10,000 examined candidates, completion_status is incomplete, hasMore is false, and cursor is null; narrow the search. Fetch-only keys return an empty result.



## OpenAPI

````yaml post /v1/notes/search
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/notes/search:
    post:
      summary: Search notes
      description: >-
        Search indexed note titles and shared summaries by keyword, or filter by
        calendar participant. Results contain the standard note summary plus
        meeting_at; use Get note to retrieve content. Filter by space_id to
        search a space and its folders; when folder_id is also provided, both
        filters apply. Each recording is a separate note. Private notes and
        transcripts are not searched. Only live notes with generated summaries
        are returned, including for compliance keys. Search coverage depends on
        indexing; use List notes for a complete listing. An empty body browses
        indexed notes without a default date window. Pages examine up to 100
        index candidates, so access checks and filters may produce short or
        empty pages even when hasMore is true. Continue with cursor while
        hasMore is true. Cursors expire after 15 minutes and are bound to the
        API key and scope; access is rechecked on every page. After 10,000
        examined candidates, completion_status is incomplete, hasMore is false,
        and cursor is null; narrow the search. Fetch-only keys return an empty
        result.
      operationId: search_notes
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                keywords:
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 200
                  minItems: 1
                  maxItems: 20
                  description: >-
                    Alternative keyword searches in titles and shared summaries.
                    All tokens of at least one entry must match.
                participant:
                  type: string
                  minLength: 1
                  maxLength: 200
                  description: >-
                    Participant name, email, company or domain from calendar
                    metadata. Filters attendance, not mentions in notes.
                folder_id:
                  type: string
                  pattern: ^[Ff][Oo][Ll]_[a-zA-Z0-9]{14}$
                space_id:
                  type: string
                  pattern: ^[Ss][Pp][Aa]_[a-zA-Z0-9]{14}$
                  description: >-
                    Return notes in this space and its folders. Space IDs are
                    case-insensitive. Use List spaces to discover accessible
                    spaces. When folder_id is also provided, both filters apply.
                  example: spa_8kTq2mWxLp4Rz7
                from_date:
                  anyOf:
                    - type: string
                      format: date
                    - type: string
                      format: date-time
                  description: >-
                    Inclusive meeting start time, falling back to note creation
                    time. Accepts a date or UTC timestamp; a date means midnight
                    UTC.
                  examples:
                    - '2026-01-27'
                    - '2026-01-27T15:30:00Z'
                to_date:
                  anyOf:
                    - type: string
                      format: date
                    - type: string
                      format: date-time
                  description: >-
                    Inclusive meeting end bound, using calendar start or note
                    creation time. Accepts a date or UTC timestamp; a date means
                    midnight UTC, not the end of that day.
                  examples:
                    - '2026-01-27'
                    - '2026-01-27T15:30:00Z'
                updated_after:
                  anyOf:
                    - type: string
                      format: date
                    - type: string
                      format: date-time
                  description: >-
                    Only notes whose content or shared summary changed after
                    this date or UTC timestamp. A date means midnight UTC.
                  examples:
                    - '2026-01-27'
                    - '2026-01-27T15:30:00Z'
                page_size:
                  type: integer
                  minimum: 1
                  maximum: 30
                  default: 10
                  description: Maximum number of notes to return per page
                  example: 10
                cursor:
                  type: string
                  minLength: 1
                  maxLength: 2048
                  description: Continue a search. Only page_size may accompany a cursor.
              additionalProperties: false
            examples:
              keywords:
                summary: Find notes with a calendar participant from Acme
                value:
                  keywords:
                    - budget review
                    - renewal
                  participant: acme.com
                  page_size: 10
              nextPage:
                summary: Continue with the cursor from the previous response
                value:
                  cursor: CURSOR_FROM_PREVIOUS_RESPONSE
                  page_size: 10
              browse:
                summary: Browse indexed notes without a date filter
                value: {}
      responses:
        '200':
          description: Matching note metadata and search continuation status
          content:
            application/json:
              schema:
                type: object
                properties:
                  notes:
                    type: array
                    items:
                      allOf:
                        - $ref: '#/components/schemas/NoteSummary'
                        - type: object
                          properties:
                            meeting_at:
                              type: string
                              format: date-time
                              description: >-
                                Calendar start time, falling back to note
                                creation time.
                          required:
                            - meeting_at
                  hasMore:
                    type: boolean
                    description: Whether another page can be fetched using cursor.
                  cursor:
                    type:
                      - string
                      - 'null'
                    description: The next-page cursor, or null when hasMore is false.
                  completion_status:
                    type: string
                    enum:
                      - more_available
                      - exhausted
                      - incomplete
                    description: >-
                      more_available: continue with cursor. exhausted: no more
                      matches. incomplete: the scan limit was reached; hasMore
                      is false and cursor is null. Start a narrower search.
                required:
                  - notes
                  - hasMore
                  - cursor
                  - completion_status
        '400':
          description: Invalid search filters or expired/mismatched cursor
        '401':
          description: Unauthorized - Invalid API key
        '404':
          description: >-
            Folder or space not found, spaces API unavailable, or scope not
            allowed
        '429':
          description: Rate limited
        '500':
          description: Search unavailable
      security:
        - ApiKeyAuth: []
components:
  schemas:
    NoteSummary:
      type: object
      properties:
        id:
          type: string
          pattern: ^not_[a-zA-Z0-9]{14}$
          description: The ID of the note
          example: not_1d3tmYTlCICgjy
        object:
          type: string
          enum:
            - note
          description: The object type of the note
        title:
          type:
            - string
            - 'null'
          description: The title of the note
          example: Quarterly yoghurt budget review
        owner:
          $ref: '#/components/schemas/User'
        created_at:
          type: string
          format: date-time
          description: The creation time of the note
          example: '2026-01-27T15:30:00Z'
        updated_at:
          type: string
          format: date-time
          description: The last update time of the note
          example: '2026-01-27T16:45:00Z'
        deleted_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            When the note was deleted, or null if it has not been. Only keys
            with access to all workspace notes can see deleted notes.
          example: null
      required:
        - id
        - object
        - title
        - owner
        - created_at
        - updated_at
        - deleted_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

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.