---
title: "Search project content"
method: GET
path: "/api/v2/projects/{slug}/search/"
tags: ["Projects"]
---

# Search project content

`GET /api/v2/projects/{slug}/search/`

## Request

- Base URL: `https://app.biel.ai`
- URL: `https://app.biel.ai/api/v2/projects/{slug}/search/`
- Auth: one of:
  - API key in header `Authorization`
  - none

Keyword search across indexed project content by default. Set
`search_type=hybrid` to combine keyword matches and semantic similarity.
Source selection is independent: omit `source_types` for web-page snippets,
or supply a comma-separated list of `page`, `file`, `repository`, `openapi`
(or `all`) to retrieve indexed chunks from those source categories without
generating an answer. Document results include source type, full chunk text,
and available page or worksheet references. Non-URL sources have `url: null`.
Explicit source selections also include an opaque `document_id`. Pass it to
`GET /api/v2/projects/{slug}/documents/{document_id}/` to read the complete
indexed text, following continuation cursors for larger documents.
References belong to this project and its current index; search again
after an index refresh. This endpoint does not accept a `limit` parameter;
the MCP search tool limits the results it presents to its caller.
Hybrid retrieval requires an index with embeddings configured. Backend
failures return an error without an automatic keyword fallback.
Existing project access, domain, trial, and interaction-limit checks apply.
URL-based `filter_title` filters exclude results without a matching URL.

Each successful search counts as one interaction toward your team's allowance.
With extra usage enabled, interactions beyond that allowance cost **$0.05** each. See
[extra usage](/administration/subscription#extra-usage).

**Required permission:** `search` (private projects only).

## Path parameters

- `slug` string, required

## Query parameters

- `q` string, required
- `url` string
- `search_type` 'keyword' | 'hybrid'
- `source_types` string
- `filter_title` string

## Response `200`

Search results

- object
  - `results` SearchResult[]
    - `title` string: Display title of the matched page, section or document.
    - `page_title` string: Parent page or document-page label used to group or cite the result.
    - `fragment` string: A snippet of text containing the search query or a relevant section of the document.
    - `url` string, uri, nullable: Public source URL, or null for non-URL documents when source_types is supplied.
    - `score` number: Relevance score.
    - `domain` string: Source domain or indexed non-web source label.
    - `is_title_match` boolean: Whether the page title contains the exact search query.
    - `source_type` 'page' | 'file' | 'repository' | 'openapi': Source category. Present when source_types is supplied.
    - `content` string: Full text of the matched indexed chunk. Present when source_types is supplied; no answer generation occurs.
    - `page` integer, nullable: Document page or slide number when available. Present when source_types is supplied.
    - `sheet` string: Worksheet name when available, otherwise blank. Present when source_types is supplied.
    - `chunk_index` integer: Zero-based chunk position within the source page. Present when source_types is supplied.
    - `file_path` string: Repository-relative file path when available, otherwise blank. Present when source_types is supplied.
    - `document_id` string: Opaque reference for reading this document through the indexed-document endpoint. Scoped to this project and current index. Present when source_types is supplied.

## Other responses

- `400`: Bad request. Invalid or missing data.
- `403`: Forbidden. Missing permissions.
- `404`: Resource not found.

---

[API](https://skmtc.dev/biel/apis/biel-ai-api.md) · [All operations](https://skmtc.dev/biel/apis/biel-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/biel/apis/biel-ai-api/revisions/ac7034d82696?raw)
