---
title: "Search notes"
method: POST
path: "/v1/notes/search"
---

# Search notes

`POST /v1/notes/search`

## Request

- Base URL: `https://public-api.granola.ai`
- URL: `https://public-api.granola.ai/v1/notes/search`
- Auth: HTTP bearer

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.

## Request body

- object
  - `keywords` string[]: Alternative keyword searches in titles and shared summaries. All tokens of at least one entry must match.
  - `participant` string: Participant name, email, company or domain from calendar metadata. Filters attendance, not mentions in notes.
  - `folder_id` string
  - `space_id` string: 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.
  - `from_date` union: Inclusive meeting start time, falling back to note creation time. Accepts a date or UTC timestamp; a date means midnight UTC.
    - string, date
    - string, date-time
  - `to_date` union: 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.
    - string, date
    - string, date-time
  - `updated_after` union: Only notes whose content or shared summary changed after this date or UTC timestamp. A date means midnight UTC.
    - string, date
    - string, date-time
  - `page_size` integer: Maximum number of notes to return per page
  - `cursor` string: Continue a search. Only page_size may accompany a cursor.

## Response `200`

Matching note metadata and search continuation status

- object
  - `notes` object[], required
    - `id` string, required: The ID of the note
    - `object` 'note', required: The object type of the note
    - `title` string, nullable, required: The title of the note
    - `owner` User, required
      - `name` string, nullable, required: The name of the user
      - `email` string, email, required: The email of the user
    - `created_at` string, date-time, required: The creation time of the note
    - `updated_at` string, date-time, required: The last update time of the note
    - `deleted_at` string, date-time, nullable, required: When the note was deleted, or null if it has not been. Only keys with access to all workspace notes can see deleted notes.
    - `meeting_at` string, date-time, required: Calendar start time, falling back to note creation time.
  - `hasMore` boolean, required: Whether another page can be fetched using cursor.
  - `cursor` string, nullable, required: The next-page cursor, or null when hasMore is false.
  - `completion_status` 'more_available' | 'exhausted' | 'incomplete', required: 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.

## Other responses

- `400`: Invalid search filters or expired/mismatched cursor
- `401`: Unauthorized - Invalid API key
- `404`: Folder or space not found, spaces API unavailable, or scope not allowed
- `429`: Rate limited
- `500`: Search unavailable

## Changes

- **2026-10-27** `409b491fd084`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/granola/apis/granola-api/changes/v1/notes/search/post.md)

---

[API](https://skmtc.dev/granola/apis/granola-api.md) - [All operations](https://skmtc.dev/granola/apis/granola-api/llms.txt) - [OpenAPI document](https://skmtc.dev/granola/apis/granola-api/revisions/24329b15cdfe?raw)
