---
title: "Получить каталог справочников, доступных в кабинете"
method: GET
path: "/api/v1/reference/catalog"
tags: ["Core reference"]
---

# Получить каталог справочников, доступных в кабинете

`GET /api/v1/reference/catalog`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/reference/catalog`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`
  - OAuth 2 (authorization code, authorization URL `https://erp.akeda.ru/oauth2/authorize`, token URL `https://erp.akeda.ru/oauth2/token`, scopes: `akeda:delegate`)

Тот же состав, что и витрина раздела: правило доступа общее, второго не бывает. Справочник попадает в ответ, если модуль-владелец включён у кабинета и у роли есть право на чтение этого модуля. Каждая строка несёт полное имя (reference) и дескриптор (contract): пространство имён, форму записи с версией, источник правды, изменяемость, этап жизни и совместимость. Справочник удалённого приложения остаётся в каталоге только по исходу orphan, с этапом retired. Листания у каталога нет — он отдаётся целиком; потолок назван полем limit, а кабинет, не поместившийся в него, отвечает truncated=true. Обнаружение справочников поэтому один запрос, а не цикл по страницам.

## Headers

- `X-Tenant` string, required

## Response `200`

Доступные справочники

- CoreDirectoryPage
  - `count` integer, required
  - `limit` integer, required: Потолок каталога — сколько справочников конструктора он читает за раз. Параметра запроса у него нет: каталог отдаётся целиком, и число названо здесь, чтобы предел был виден, а не подразумевался
  - `truncated` boolean, required: Справочников в кабинете больше потолка, и часть в каталог не попала. Считается по кабинету точно, а не по длине ответа: после чтения набор ещё раз сужают права, и короткий ответ ничего об усечении не говорит. true означает ошибку моделирования на стороне кабинета, а не нормальный режим
  - `results` CoreDirectory[], required
    - `key` string, required: Ключ кабинета: одинаков во всех кабинетах, без пространства имён. У справочника приложения совпадает с полным именем
    - `label` string, required
    - `label_key` string: Ключ словаря для перевода названия
    - `description` string, required
    - `module` string, required: Модуль, чей код пишет и проверяет записи: у объявленного справочника — владелец, у списка кабинета и справочника приложения — core как хозяин конструктора
    - `kind` string, required: Природа справочника: сущность, список кодов, таксономия, стандарт или зеркало внешнего источника
    - `storage` string, required: Где лежат записи: своя типизированная таблица или универсальный конструктор
    - `origin` string, required: Откуда записи: штатный посев (system), ввод клиента (tenant), интеграция (integration) или установленное приложение (app)
    - `visibility` string, required: Кому виден справочник: только своему модулю, всему продукту или наружу
    - `group` string: Группа раздела в меню и каталоге
    - `icon` string: Значок из общего набора
    - `setup_step` integer: Порядок в чек-листе первичного заполнения кабинета
    - `deeplink` string, required
    - `mounts` CoreDirectoryMount[]: Дополнительные входы. Владение не переносят: справочник остаётся у своего модуля
      - `module` string, required: Модуль, из раздела которого открывается этот справочник
      - `path` string, required: Экран второго входа
    - `reference` string, required: Полное имя для внешнего кода: пространство имён владельца плюс ключ — core.units, marketplace.mp_expense_item, app.acme.crm.regions. Его называет manifest приложения, его же принимают операции /api/v1/reference наравне с ключом
    - `contract` CoreDirectoryContract, required: Дескриптор справочника для внешнего кода (Reference Data SDK). У штатного справочника приходит из объявления модуля-владельца, у списка кабинета выводится из его природы, у справочника приложения снимается с манифеста при установке. Форма дескриптора — preview: набор полей может расшириться
      - `namespace` string, required: Пространство имён: ключ модуля-владельца или app.<издатель>.<ключ> у приложения. Выводится из владельца, объявить иначе нельзя
      - `reference` string, required: Полное имя: namespace плюс ключ. То же, что reference у строки
      - `item_schema` string, required: Идентификатор формы записи с версией: core.contact.v1 у типизированного, core.dictionary_item.v1 у любого справочника конструктора, <полное имя>.v<N> у справочника приложения
      - `schema_version` integer, required: Версия формы записи из суффикса item_schema. Ломающее изменение формы — новая версия рядом со старой, а не тихая подмена
      - `authority` 'tenant' | 'platform' | 'provider' | 'app', required: Чьё слово последнее по записям: кабинет, сеятель Akeda, внешний источник или установленное приложение
      - `mutability` 'tenant_managed' | 'owner_managed' | 'shared', required: Что кабинет вправе делать с записями: править любые, только читать (записи держит владелец) или заводить свои рядом с записями владельца
      - `lifecycle` 'stable' | 'beta' | 'deprecated' | 'retired', required: Этап жизни: форма держится; форма меняется; выдавать перестали, существующие не трогают; владелец удалён, справочник остался ради ссылок
      - `compatibility` 'preview' | 'public', required: Объём обещания про форму записи: те же стадии, что у операции public API
      - `permission` string, required: Право, открывающее справочник: <модуль>:read. Им же витрина отбирает строки
    - `item_count` integer, nullable
    - `is_system` boolean, required
    - `dictionary_id` string

## Other responses

- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `500`: Внутренняя ошибка без раскрытия server-only деталей

---

[API](https://skmtc.dev/akeda/apis/akeda-erp-client-api.md) · [All operations](https://skmtc.dev/akeda/apis/akeda-erp-client-api/llms.txt) · [OpenAPI document](https://skmtc.dev/akeda/apis/akeda-erp-client-api/revisions/3c60ded179f2?raw)
