---
title: Documentation Search API
description: Search DigitalOcean documentation over HTTPS without MCP or authentication, using the same index as the Documentation MCP server.
product: Reference
url: https://docs.digitalocean.com/reference/mcp/documentation-search-api/
last_updated: "2026-11-11"
---

> **For AI agents:** The documentation index is at [https://docs.digitalocean.com/llms.txt](https://docs.digitalocean.com/llms.txt). Markdown versions of pages use the same URL with `index.html.md` in place of the HTML page (for example, append `index.html.md` to the directory path instead of opening the HTML document).

# Documentation Search API

The Documentation Search API returns ranked DigitalOcean documentation pages for a keyword query as JSON. It uses the same index and ranking as the `docs-search` tool on the [Documentation MCP server](https://docs.digitalocean.com/reference/mcp/documentation-mcp-tools/index.html.md), so both return the same pages. Use it from scripts, IDE plugins, and retrieval pipelines that don’t use MCP. It requires no API token or account.

**Note**:

  The Documentation Search API is in [public preview](https://docs.digitalocean.com/platform/product-lifecycle/index.html.md#public-preview) and available to everyone without opting in. The response format and rate limits may change during the preview. Responses include `"stability": "preview"` in `meta`.

## Endpoint

Send a `GET` request to the following endpoint:

```text
https://docs.mcp.digitalocean.com/v1/search
```

| Parameter | Required | Description |
|---|---|---|
| `q` | Yes | Search keywords, up to 256 bytes. |
| `limit` | No | Number of results to return, from `1` to `50`. Defaults to `10`. |
| `product` | No | Restricts results to one product or area, such as `droplets`, `app platform`, `vpc`, `support`, or `api`. |

The endpoint rejects unknown or repeated parameters with a `400` error.

## Example

The following request searches for pages about deploying container images and returns the top two results:

```shell
curl 'https://docs.mcp.digitalocean.com/v1/search?q=deploy+from+container+image&limit=2'
```

The response lists the matching pages in `results` and describes the search in `meta`:

```json
{
  "results": [
    {
      "title": "How to Deploy from Container Images",
      "url": "https://docs.digitalocean.com/products/app-platform/how-to/deploy-from-container-images/",
      "markdown_url": "https://docs.digitalocean.com/products/app-platform/how-to/deploy-from-container-images/index.html.md",
      "product": "App Platform",
      "page_type": "how-to",
      "last_modified": "2026-07-13",
      "excerpt": "You can deploy containerized apps to App Platform from supported container registries..."
    },
    {
      "title": "How to Use Container Images for Paperspace Deployments",
      "url": "https://docs.digitalocean.com/products/paperspace/deployments/how-to/use-images/",
      "markdown_url": "https://docs.digitalocean.com/products/paperspace/deployments/how-to/use-images/index.html.md",
      "product": "Paperspace",
      "page_type": "how-to",
      "last_modified": "2023-12-14",
      "excerpt": "Container images are required to run a Paperspace App..."
    }
  ],
  "meta": {
    "query": "deploy from container image",
    "total": 2,
    "pages_searched": 6587,
    "stability": "preview"
  }
}
```

To read a full page, fetch its `markdown_url`.

## Response Fields

Each object in `results` has the following fields. Fields without a value are omitted.

| Field | Description |
|---|---|
| `title` | Page title. |
| `url` | Canonical URL of the page. |
| `markdown_url` | Markdown version of the page. |
| `product` | Product or area the page belongs to. |
| `page_type` | Kind of page, such as `how-to`, `reference`, `support`, or `getting-started`. |
| `last_modified` | Date the page was last updated, in `YYYY-MM-DD` format. |
| `excerpt` | Passage from the page body that matches the query, or the page description when no passage matches. |

The `meta` object contains `query`, `product` (when you set it), `total` (the number of results returned), `pages_searched`, and `stability`.

Ranking uses page titles, descriptions, products, and URLs. Page body text is used for excerpts but not for ranking, so a query for a term that only appears in a page body, such as an exact error string, may not find that page.

## Errors

Errors return a JSON body with an `id` and a `message`:

| Status | `id` | Cause |
|---|---|---|
| `400` | `bad_request` | A missing, invalid, unknown, or repeated parameter. |
| `405` | `method_not_allowed` | A method other than `GET`. |
| `429` | `too_many_requests` | The rate limit for your IP address was exceeded. |
| `503` | `service_unavailable` | The documentation index is temporarily unavailable. Retry later. |

## Rate Limits

Requests are rate limited per client IP address. When you exceed the limit, the response has status `429` and a `Retry-After` header with the number of seconds to wait. Successful responses are cached for up to five minutes, so repeating the same query does not return newer results within that window.

To process the whole documentation set, such as to build your own search index, don’t page through search results. Use the bulk feeds instead:

- [`llms-index.json`](https://docs.digitalocean.com/llms-index.json) lists every page with its title, description, product, URL, and last-modified date.
- [`docs-corpus.jsonl`](https://docs.digitalocean.com/docs-corpus.jsonl) contains page content in chunks, split into shards that you can fetch and update individually.
- Every page has a Markdown version at its URL with `index.html.md` appended.