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

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

`GET /api/v1/core/directories`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/core/directories`
- 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`)

Возвращает типизированные и пользовательские справочники; права на переход в модуль клиент проверяет отдельно. Каталог отдаётся целиком: параметров limit и offset у него нет, потому что это дерево навигации, а не список данных — интерфейс, листающий собственное меню, показать его не может. Потолок при этом объявлен и назван в ответе полем 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`: Текущая роль не имеет требуемого права

---

[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)
