---
title: "Ai Context"
method: GET
path: "/v1/ai/context"
---

# Ai Context

`GET /v1/ai/context`

## 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/ai/context`
- Auth: none declared

Выдача для машины. ⭐ `as_of` добавлен 10.09.2026: без него ответ невоспроизводим.

⛔ Прежде единственный эндпойнт, объявленный «для агента», не умел закрепить время и
не нёс отпечатка ответа. Сослаться на конкретный ответ было нечем: ни агент не мог
доказать, что ему так ответили, ни служба — что она так ответила.

## Query parameters

- `q` string, required
- `limit` integer
- `official_only` boolean
- `as_of` string, nullable

## Headers

- `x-api-key` string, nullable

## Response `200`

Successful Response

- AiContextResponse: Выдача для машины.
  - `query` string, required
  - `result_count` integer, required
  - `entities` object[], required: ⚠ Пакеты сущностей собираются из базы и меняются вместе со схемой. Форма объявлена свободной НАМЕРЕННО: выдуманная здесь схема была бы хуже её отсутствия — машина поверила бы описанию
  - `retrieval_only` boolean
  - `retrieval_manifest` object, required
  - `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: ⭐ Чего этот ответ НЕ утверждает. Выводится из состояния, а не из шаблона: каждый пункт добавлен по условию
  - `absence` Absence: Почему здесь пусто. ⛔ Причина из закрытого словаря `epistemics.ABSENCE_REASONS`.
    - `reason` string, required: no_such_entity | not_at_as_of | withheld_by_policy | not_covered | retrieval_degraded | unknown
    - `detail` string
    - `as_of` string, nullable
    - `supports_negative_inference` boolean, required: ⛔ Можно ли из этого молчания заключить, что искомого нет. Истинно РОВНО в одном случае — когда искали полноценно и не нашли
  - `policy` object, required: ⚠ ОПИСАНИЕ КОНТРАКТА, а не измерение. Это постоянные свойства эндпойнта; измеренное про данный ответ лежит в coverage
  - `determinism` Determinism, required: Можно ли сослаться на этот ответ и позже доказать, что он был таким. ⛔ Прежде у выдачи для агента не было отпечатка вовсе, а `generated_at: now()` делал байты различными при каждом вызове. Сослаться было нечем ни агенту, ни самой службе.
    - `response_sha256` string, nullable, required: Отпечаток каноничных байтов ответа. ⛔ `null` означает, что вычислить его не удалось — значение НЕ подставляется наугад: отпечаток, который может оказаться неверным, хуже отсутствующего
    - `fingerprint_status` string, nullable: ok либо fingerprint_failed:<причина>
    - `canonicalization` string, nullable: ⚠ Профиль сериализации, по которому считан отпечаток. Без него независимый пересчёт есть гадание
    - `excluded_from_hash` string[], required: ⛔ Поля, НЕ покрытые отпечатком. Умолчание о них обесценило бы отпечаток целиком: пересчёт не сошёлся бы, и машина решила бы, что ответ подменён
    - `reproducible` boolean, required: Обещана ли повторяемость. Истинно только при закреплённом as_of
    - `why` string, required
  - `audit_recorded` boolean, nullable

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `404`: Not Found
- `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)
