---
title: "Search everything"
description: "Fuzzy search over everything you can open: titles, headings, the text of pages and documents, the text of HTML files and PDFs, folders, workspaces, the Guides…"
canonical_url: https://docs.markdrop.in/api/search/search-everything
last_updated: 2026-11-04
site: "Markdrop Docs"
index: https://docs.markdrop.in/llms.txt
---

# Search everything

`GET https://api.markdrop.in/api/v1/search`

Fuzzy search over everything you can open: titles, headings, the text of pages and documents, the text of HTML files and PDFs, folders, workspaces, the Guides pages you have a role on and, at the end, your Trash. Typos, partial words and any word order match. `items` is the ranked page of results; `groups` holds the first few of each kind, for a grouped list; `trash` lists matching items you can restore. Each result has its `kind`, `title`, `workspace`, `folder`, `owner` (named only when you're related to the item), `updated_at`, a `snippet` with the matched words' ranges in `marks`, `match` (`title`, `heading` or `body`), `url` (what the app opens) and `web_url` (always a full link). Encrypted and password-protected items match by title only and never have a snippet. Pass `next_cursor` back as `cursor` for more. `ai_suggested` is `true` when `q` reads like a question.

- **Authentication:** API token required: `Authorization: Bearer mdk_…`.
- **Rate limit:** 240 per minute per IP address.
- **CLI:** `markdrop search "onbording plyabook"`
- **MCP tool:** `search` ([tools](https://docs.markdrop.in/ai/tools))
- **Guide:** [Search](https://docs.markdrop.in/workspaces/search)

## Query parameters

- `q` (string): What to look for. Up to 200 characters. Default `""`.
- `scope` (string): `all` (the default) or `workspace:<workspace id>` for one workspace. Up to 40 characters.
- `kind` (string): Comma-separated kinds: `page`, `doc`, `file`, `folder`, `workspace`, `guide`. Up to 80 characters.
- `owner` (string): `me` keeps only your own items. One of `anyone`, `me`. One of `anyone`, `me`. Default `"anyone"`.
- `updated` (string): `week` or `month` keeps only what changed in that time. One of `any`, `week`, `month`. One of `any`, `week`, `month`. Default `"any"`.
- `current` (string): The id of the workspace you're in: its items rank a little higher. Up to 40 characters.
- `cursor` (string): The `next_cursor` of the previous answer. Up to 200 characters.
- `limit` (integer): Results per answer, up to 50. From 1 to 50. Default `20`.
- `trash` (boolean): `false` leaves out the Trash matches. Default `true`.

## Responses

- `200`: OK.
- `401`: No token, or the token is revoked or mistyped.
- `422`: The request didn't validate. `detail` lists each problem, with where it is (`loc`) and why (`msg`).
- `429`: Too many requests from your IP address. Wait the seconds in `Retry-After`.

## Examples

**curl**

```bash
curl 'https://api.markdrop.in/api/v1/search?q=onbording%20plyabook' \
  -H "Authorization: Bearer $MARKDROP_TOKEN"
```

**JavaScript**

```javascript
const res = await fetch("https://api.markdrop.in/api/v1/search?q=onbording%20plyabook", {
  headers: {
    Authorization: `Bearer ${process.env.MARKDROP_TOKEN}`,
  },
});
const data = await res.json();
```

**Python**

```python
import os

import requests

r = requests.get(
    "https://api.markdrop.in/api/v1/search?q=onbording%20plyabook",
    headers={"Authorization": f"Bearer {os.environ['MARKDROP_TOKEN']}"},
)
r.raise_for_status()
print(r.json())
```

**CLI**

```bash
markdrop search "onbording plyabook"
```
