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

# Search Your Bookmark Library: Full-Text and Semantic

> Find anything instantly with full-text search on all plans, or upgrade to Pro for AI-powered semantic search that understands meaning, not just keywords.

Bkmark's search is built to find the right bookmark fast — whether you remember the exact title, a word from the description, or just the general idea of what you're looking for. Every plan includes full-text search, and Pro and Team users get an additional layer of AI-powered semantic understanding.

***

## How search works

### Full-text search (all plans)

Full-text search scans the title, description, and URL of every bookmark in your library. It is fast, always available, and works on every plan.

* **Exact and partial matches** — results include bookmarks where your query terms appear as whole words or as stemmed variants. Searching `typescript` will also surface `TypeScript` and related forms.
* **Fuzzy fallback** — if there are no exact matches, Bkmark automatically falls back to fuzzy matching so you still get relevant results even with typos or alternate spellings.
* **Fast** — results appear in milliseconds regardless of how large your library is.

### AI semantic search (Pro & Team)

<Note>
  AI semantic search requires a **Pro** or **Team** plan. On the Free plan, you get full-text search only.
</Note>

Semantic search understands the *meaning* behind your query rather than just matching characters. You can search using natural language descriptions, and Bkmark will surface bookmarks that are conceptually related — even if they don't share a single word with your query.

**Example:** Searching for `"how to speed up database queries"` with semantic search can surface bookmarks about query optimization, indexing strategies, and caching — even if those pages never use the phrase "speed up."

***

## Exact search vs. semantic search — what's the difference?

|                    | Full-text (all plans)         | Semantic search (Pro/Team)                      |
| ------------------ | ----------------------------- | ----------------------------------------------- |
| **How it works**   | Matches words and their stems | Matches meaning and concepts                    |
| **Best for**       | Known terms, titles, URLs     | Vague recollections, concepts, natural language |
| **Typo tolerance** | Yes (fuzzy fallback)          | Yes (intent is preserved)                       |
| **Speed**          | Very fast (milliseconds)      | Fast (AI-assisted)                              |
| **Requires**       | Free plan or above            | Pro or Team plan                                |

***

## Using search

### Search from the app

Click the **Search** bar at the top of the sidebar (or press `/` from anywhere in the app) and start typing. Results update live as you type.

### Search filters

Narrow your results using the filter controls next to the search bar:

| Filter    | Description                                         |
| --------- | --------------------------------------------------- |
| **Group** | Show only results inside a specific group           |
| **Tag**   | Show only results with a specific tag               |
| **Type**  | Limit results to `link`, `note`, `code`, or `image` |

You can combine filters with your query — for example, search for `"authentication"` filtered to the `Engineering` group and the `security` tag.

### Using the search API

You can query your library programmatically using the search endpoint.

```bash theme={null}
curl "https://api.bkmark.it/api/v1/search?q=typescript+patterns" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```

**Query parameters:**

| Parameter | Type   | Default  | Description                                |
| --------- | ------ | -------- | ------------------------------------------ |
| `q`       | string | Required | Your search query                          |
| `cursor`  | string | —        | Pagination cursor from a previous response |
| `limit`   | number | `20`     | Results per page (1–100)                   |
| `groupId` | string | —        | Filter by group UUID                       |
| `tagId`   | string | —        | Filter by tag UUID                         |

**Example response:**

```json theme={null}
{
  "data": [
    {
      "id": "3f7a9c12-...",
      "url": "https://www.typescriptlang.org/docs/handbook/2/types-from-types.html",
      "title": "TypeScript Handbook: Creating Types from Types",
      "description": "A deep dive into mapped types, conditional types, and template literal types.",
      "type": "link",
      "isFavorite": false,
      "isArchived": false,
      "tags": [{ "id": "uuid", "name": "typescript", "color": "blue" }],
      "groups": [{ "id": "uuid", "name": "Engineering References" }],
      "createdAt": "2025-03-15T10:22:00.000Z",
      "updatedAt": "2025-03-15T10:22:00.000Z"
    }
  ],
  "nextCursor": "3f7a9c12-..."
}
```

### Paginating results

Search uses cursor-based pagination. When a response includes a `nextCursor` value, pass it as the `cursor` parameter in your next request to fetch the following page. When `nextCursor` is `null`, you've reached the last page.

```bash theme={null}
# Page 1
curl "https://api.bkmark.it/api/v1/search?q=design+systems&limit=20" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

# Page 2 — pass nextCursor from the previous response
curl "https://api.bkmark.it/api/v1/search?q=design+systems&limit=20&cursor=3f7a9c12-..." \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```

***

## Tips for effective searching

<CardGroup cols={2}>
  <Card title="Search by concept, not just title" icon="lightbulb">
    On Pro or Team, try natural-language queries like `"articles about building design systems in React"` instead of guessing the exact title you used when saving.
  </Card>

  <Card title="Combine search with filters" icon="filter">
    Pair a short query with a group or tag filter to dramatically narrow results — especially useful when you have a large library with overlapping topics.
  </Card>

  <Card title="Use a few specific words" icon="text-cursor">
    On full-text search, two or three specific words from the title or description work better than long sentences. Try `"react server components"` instead of `"how to use react server components in next"`.
  </Card>

  <Card title="Try the URL or domain" icon="link">
    Remember the site but not the article? Search for the domain name (e.g., `"vercel.com"` or `"css-tricks"`) to surface all bookmarks from that source.
  </Card>
</CardGroup>
