# Search · Content Delivery API

> Content Delivery API reference for search: GET /search.

> Markdown version of https://kanorio.com/en/developers/delivery-api/search. Append `.md` to any developer docs URL for this format. Index: https://kanorio.com/llms.txt · MCP: https://app.kanorio.com/api/mcp

Base URL: `https://{site}/api/v1` · [Errors](https://kanorio.com/en/developers/basics/errors) · [Pagination](https://kanorio.com/en/developers/basics/pagination)

### Site search

`GET /search`

- Stability: beta
- Authentication: none

**Parameters**

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `q` | query | string | yes | — |
| `kind` | query | string | no | — |
| `limit` | query | integer | no | Maximum number of results, 1-20. Defaults to 20. |
| `cursor` | query | string | no | Opaque cursor from the previous page's nextCursor. Omit for the first page. |
| `locale` | query | string | no | Locale to search. One of the site's locales from /site (a code such as `en-US` or the URL prefix such as `en`); omit it for the primary locale. Other values, including locales that are still translating, return 400 UNSUPPORTED_LOCALE. Titles, excerpts, snippets and `url` (with the locale's URL prefix) come from that locale's published translations; untranslated text stays in the primary locale. `resolvedLocale` in the response is the locale actually searched. A cursor only works with the same locale. |
| `total` | query | boolean | no | true adds total (the number of matching results across all pages) to the response, for a results count such as "12 results". It is counted in the same query as the results, so it adds no extra request. |

**Response** (200)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | object[] | yes | — |
| `hasMore` | boolean | yes | True when another page exists; pass nextCursor to fetch it. |
| `nextCursor` | string \| null | yes | Cursor for the next page, or null on the last page. |
| `q` | string | yes | — |
| `tokens` | string[] | yes | — |
| `resolvedLocale` | string | no | Locale actually searched: the requested locale when it is one of the site's published locales, otherwise the primary locale. |
| `total` | integer | no | Number of matching results across all pages. Present only when total=true. |

**Errors**

| Code | Status | When |
| --- | --- | --- |
| `QUERY_REQUIRED` | 400 | — |
| `QUERY_TOO_SHORT` | 400 | — |
| `QUERY_TOO_LONG` | 400 | — |
| `INVALID_KIND` | 400 | — |
| `INVALID_LIMIT` | 400 | — |
| `INVALID_CURSOR` | 400 | — |
| `SEARCH_BUSY` | 429 | — |
| `UNSUPPORTED_LOCALE` | 400 | — |

```bash
curl -X GET "https://{site}/api/v1/search"
```
