---
title: "Public Search"
method: GET
path: "/v1/public/search"
---

# Public Search

`GET /v1/public/search`

## Request

- Base URL: `https://ai-belarus.by` (the document declares no server; this is the origin it was published from)
- URL: `https://ai-belarus.by/v1/public/search`
- Auth: none declared

## Query parameters

- `q` string, required
- `limit` integer

## Response `200`

Successful Response

- SearchResponse
  - `results` object[], required
  - `search_backend` string, required
  - `degraded_search` boolean, required
  - `epistemic_policy` string, nullable
  - `data_boundary` string, nullable
  - `coverage` Coverage, required: Что именно было просмотрено, чтобы получить этот ответ. ⛔ БЕЗ ЭТОГО БЛОКА ПУСТОЙ ОТВЕТ НЕ ЗНАЧИТ НИЧЕГО: «посмотрели и не нашли» и «никуда не смотрели» приходили одной строкой, и вывод из них разный, а различить было нельзя.
    - `contract` string
    - `sources_consulted` SourceConsulted[]
      - `source_id` string, required
      - `name` string, nullable
      - `tier` integer, nullable
      - `disclosure_state` string, required
    - `corpus_as_of` string, nullable
    - `corpus_as_of_known` boolean, required: ⚠ Ложь означает «мы не знаем, насколько свежи наши сведения». Это не то же самое, что «сведения свежие»
    - `as_of` string, nullable
    - `as_of_pinned` boolean, required
    - `retrieval` RetrievalDiagnosis, required: Каким способом искали и чем ограничена полнота. ⛔ Прежде здесь был один булев флаг, и он отвечал на другой вопрос: «настроен ли указатель» вместо «ослаблен ли поиск». При поиске подстрокой наружу шло «не деградировано», и пустой ответ читался как доказательство отсутствия.
      - `backend` string, nullable
      - `mode` string, nullable: full_text_index | substring_only | degraded_fallback
      - `degraded` boolean, required: Указатель настроен и НЕ ОТВЕТИЛ — это поломка
      - `degraded_reason` string, nullable
      - `recall_limited` boolean, required: Находит меньше, чем полноценный поиск
      - `absence_is_informative` boolean, required: ⛔ Значит ли что-нибудь пустой результат. Ложь ⇒ вывод об отсутствии делать НЕЛЬЗЯ
    - `filters_applied` FilterApplied[]
      - `filter` string, required
      - `removed_count` integer, nullable
      - `counted` boolean, required
    - `legal_layer` LegalLayerState, required: Состояние правового слоя в ЭТОЙ сборке. ⚠ `available: false` НЕ ОЗНАЧАЕТ «ограничений нет». Оно означает, что права не проверялись. Прежде правового слоя не было в образе вовсе, и приложение отдавало сведения, чьё основание в контейнере отсутствовало даже в виде файлов.
      - `available` boolean, required
      - `reason_code` string, nullable
      - `why` string, nullable
      - `channels_loaded` integer
      - `policies_loaded` integer
  - `does_not_establish` string[], required

## Other responses

- `422`: Validation Error
- `429`: Too Many Requests
- `500`: Internal Server Error
- `503`: Service Unavailable

---

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