Перейти к содержанию

Публичный API v1

Публичный API v1 — часть публичного API DataForge только для чтения: содержимое РПИ, модель данных и витрины. Аутентификация, общие соглашения и коды ошибок описаны на странице API.

1 Публичный DF API — содержимое РПИ (df-api/v1)

Базовый путь: /df-api/v1. Аутентификация: X-Api-Key. Все эндпоинты — read-only и контролируются лицензией компании (раздел 5 страницы API). Эта группа объединяет эндпоинты доступа к проектам, версиям и содержимому РПИ (показатели, измерения, факты); эндпоинты модели данных и витрин описаны в разделе 9.8. Эндпоинты содержимого РПИ монтируются прямо под версией — …/versions/{version_id}/measures, без промежуточного сегмента /rmd/.

Общее для всех эндпоинтов группы: видны только проекты, доступные владельцу ключа (раздел 2.2 страницы API); page и pageSize в этой группе не ограничиваются (раздел 3.2 страницы API); format=xlsx вместо тела JSON возвращает { "downloadUrl": "<подписанная ссылка, действует 15 минут>" } (раздел 3.5 страницы API).

1.1 Список проектов

Запрос

GET /df-api/v1/projects

Параметр Где Тип Обяз. Описание
page query integer нет Номер страницы, нумерация с 1. По умолчанию 1
pageSize query integer нет Размер страницы. По умолчанию 20; не ограничивается
format query json | xlsx нет Формат вывода. По умолчанию json; xlsx формирует книгу с одним листом Projects

Детали

Список фильтруется по проектам, доступным владельцу ключа; недоступные проекты исключаются из страницы и из total. Параметр language не принимается — в ответе нет локализуемых полей.

Ответ

200 OK

{
  "projects": [
    { "id": 12, "name": "Sales Analytics", "description": "Production sales warehouse" }
  ],
  "pagination": { "total": 1, "page": 1, "pageSize": 20, "totalPages": 1 }
}
Поле Тип Описание
projects[].id integer Идентификатор проекта
projects[].name string Имя проекта
projects[].description string | null Описание проекта
pagination object total, page, pageSize, totalPages (раздел 3.2 страницы API)

Ошибки. Только общие ошибки (раздел 4 страницы API).

1.2 Список версий

Запрос

GET /df-api/v1/projects/{id}/versions

Параметр Где Тип Обяз. Описание
id путь integer да Идентификатор проекта
page query integer нет Номер страницы, нумерация с 1. По умолчанию 1
pageSize query integer нет Размер страницы. По умолчанию 20; не ограничивается
format query json | xlsx нет Формат вывода. По умолчанию json; xlsx формирует книгу с одним листом Versions

Детали

Мягко удалённые версии не возвращаются. Проект, недоступный владельцу ключа, отвечает 404 — факт существования не раскрывается.

Ответ

200 OK

{
  "versions": [ { "id": 33, "name": "Q4 2025", "is_global": true } ],
  "pagination": { "total": 1, "page": 1, "pageSize": 20, "totalPages": 1 }
}
Поле Тип Описание
versions[].id integer Идентификатор версии
versions[].name string Имя версии
versions[].is_global boolean true для опубликованной (глобальной) версии проекта
pagination object total, page, pageSize, totalPages

Ошибки. Только общие ошибки (раздел 4 страницы API).

1.3 Получение показателей

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/measures

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
language query ru | en нет Язык подписей полей-справочников. По умолчанию — Accept-Language, затем en
format query json | xlsx нет Формат вывода. По умолчанию json
page query integer нет Номер страницы, нумерация с 1. По умолчанию 1
pageSize query integer нет Размер страницы. По умолчанию 20; не ограничивается

Детали

Состав возвращаемых ключей соответствует колоночной раскладке таблицы показателей РПИ: каждая строка содержит все колонки, незаполненные — как null. Поля-справочники (measure_type, display_data_type, status, relevance, …) возвращаются как локализованные подписи (Base / Calculated, Number, …), а не как слаги. В формульных полях ссылки заменены с числовых ID на читаемые имена. original_source и original_object — свободный текст из РПИ.

Ответ

200 OK

{
  "measures": [
    {
      "row_number": 1,
      "group": "Revenue",
      "block": "Sales",
      "measure_name": "Total revenue",
      "measure_description": "Gross revenue across all channels",
      "original_source_type": "Database",
      "original_source": "ERP",
      "original_object": "sales.amount",
      "display_data_type": "Number",
      "measure_type": "Base",
      "restrictions": null,
      "formula": null,
      "report_for_verification": null,
      "comment": null,
      "status": "Active",
      "relevance": null,
      "required": null,
      "visibility": null,
      "responsible_for_data": null,
      "variation": null
    }
  ],
  "pagination": { "total": 42, "page": 1, "pageSize": 20, "totalPages": 3 }
}
Поле Тип Описание
measures[].row_number integer Позиция строки в таблице РПИ
measures[].group, block string | null Группирующие колонки РПИ
measures[].measure_name string Имя показателя
measures[].measure_description string | null Описание
measures[].original_source_type, original_source, original_object string | null Колонки происхождения; свободный текст
measures[].display_data_type string | null Локализованная подпись типа данных (Number, Text, Date, …)
measures[].measure_type string Локализованная подпись: Base или Calculated
measures[].restrictions string | null Колонка ограничений
measures[].formula string | null Формула расчётного показателя со ссылками вида [Имя]
measures[].report_for_verification, comment, responsible_for_data, variation string | null Текстовые колонки
measures[].status, relevance, required, visibility string | null Локализованные подписи справочников
pagination object total, page, pageSize, totalPages

Ошибки. Только общие ошибки (раздел 4 страницы API).

1.4 Получение измерений

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/dimensions

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
language query ru | en нет Язык подписей полей-справочников
format query json | xlsx нет Формат вывода. По умолчанию json
page query integer нет Номер страницы, нумерация с 1. По умолчанию 1
pageSize query integer нет Размер страницы. По умолчанию 20; не ограничивается

Детали

Каждая строка содержит все колонки таблицы измерений РПИ, незаполненные — как null; поля-справочники (dimension_type, display_data_type, status, …) возвращаются как локализованные подписи, ссылки в формулах — как читаемые имена. source_data_type вычисляется из connected_source: API разбирает объект источника (db, schema, table, column) и подставляет тип колонки из закешированной схемы соответствующего подключения. Возвращается null, если связанный источник не задан, не разрешается на колонку или для версии нет ни одной строки с connected_source. connected_source — объект источника из раздела 3.6 страницы API без поля connection (v1).

Ответ

200 OK

{
  "dimensions": [
    {
      "row_number": 1,
      "group": "Customer",
      "block": "Profile",
      "dimension_name": "Customer name",
      "dimension_description": "Full customer name",
      "original_source_type": null,
      "original_source": null,
      "original_object": null,
      "dimension_group": "Customers",
      "display_data_type": "Text",
      "source_data_type": "VARCHAR(255)",
      "dimension_type": "Primary",
      "formula": null,
      "connected_source": { "db": "analytics_db", "schema": "public", "table": "dim_customer", "column": "customer_name" },
      "comment": null,
      "value_options": null,
      "status": "Active",
      "relevance": null,
      "required": null,
      "visibility": null,
      "responsible_for_data": null
    }
  ],
  "pagination": { "total": 18, "page": 1, "pageSize": 20, "totalPages": 1 }
}
Поле Тип Описание
dimensions[].row_number integer Позиция строки в таблице РПИ
dimensions[].group, block string | null Группирующие колонки РПИ
dimensions[].dimension_name, dimension_description string / string | null Имя и описание
dimensions[].original_source_type, original_source, original_object string | null Колонки происхождения; свободный текст
dimensions[].dimension_group string | null Имя группы измерений, в которую входит измерение
dimensions[].display_data_type string | null Локализованная подпись типа данных
dimensions[].source_data_type string | null Физический тип колонки, полученный из закешированной схемы подключения
dimensions[].dimension_type string Локализованная подпись: Primary или Derived
dimensions[].formula string | null Формула производного измерения
dimensions[].connected_source object | null Объект источника { db, schema, table, column } (раздел 3.6 страницы API)
dimensions[].comment, responsible_for_data string | null Текстовые колонки
dimensions[].value_options string | null Колонка допустимых значений
dimensions[].status, relevance, required, visibility string | null Локализованные подписи справочников
pagination object total, page, pageSize, totalPages

Ошибки. Только общие ошибки (раздел 4 страницы API).

1.5 Получение фактов

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/facts

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
language query ru | en нет Язык подписей полей-справочников
format query json | xlsx нет Формат вывода. По умолчанию json
page query integer нет Номер страницы, нумерация с 1. По умолчанию 1
pageSize query integer нет Размер страницы. По умолчанию 20; не ограничивается

Детали

Каждая строка содержит все колонки таблицы фактов РПИ, незаполненные — как null; поля-справочники возвращаются как локализованные подписи, ссылки в формулах — как читаемые имена. source_data_type вычисляется из connected_source по закешированной схеме подключения и равен null, если связанный источник не задан или не разрешается на колонку.

Ответ

200 OK

{
  "facts": [
    {
      "row_number": 1,
      "group": "Sales",
      "block": "Orders",
      "fact_name": "Order line",
      "fact_description": "An individual line item on a sales order",
      "original_source_type": null,
      "original_source": null,
      "original_object": null,
      "source_data_type": "DECIMAL(18,2)",
      "fact_type": "Primary",
      "formula": null,
      "connected_source": { "db": "analytics_db", "schema": "public", "table": "fact_order_line", "column": "amount" },
      "report_for_verification": null,
      "comment": null,
      "status": null,
      "relevance": null,
      "required": null,
      "visibility": null,
      "responsible_for_data": null
    }
  ],
  "pagination": { "total": 6, "page": 1, "pageSize": 20, "totalPages": 1 }
}
Поле Тип Описание
facts[].row_number integer Позиция строки в таблице РПИ
facts[].group, block string | null Группирующие колонки РПИ
facts[].fact_name, fact_description string / string | null Имя и описание
facts[].original_source_type, original_source, original_object string | null Колонки происхождения; свободный текст
facts[].source_data_type string | null Физический тип колонки, полученный из закешированной схемы подключения
facts[].fact_type string Локализованная подпись: Primary или Derived
facts[].formula string | null Формула производного факта
facts[].connected_source object | null Объект источника { db, schema, table, column } (раздел 3.6 страницы API)
facts[].report_for_verification, comment, responsible_for_data string | null Текстовые колонки
facts[].status, relevance, required, visibility string | null Локализованные подписи справочников
pagination object total, page, pageSize, totalPages

Ошибки. Только общие ошибки (раздел 4 страницы API).

1.6 Получение полного РПИ (содержимое)

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/rmd

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
language query ru | en нет Язык подписей полей-справочников
format query json | xlsx нет Формат вывода. По умолчанию json

Детали

В df-api/v1 этот путь — сводный экспорт РПИ: показатели, измерения и факты вместе с моделью данных (группы измерений, таблицы фактов, связи), без пагинации. Он возвращает полный снимок метаданных версии с отметкой времени exported_at и предназначен для внешних каталогов и полной синхронизации состояния.

Ответ

200 OK

{
  "project": {
    "id": "12",
    "name": "Sales Analytics",
    "description": "Production sales warehouse"
  },
  "version": {
    "id": "33",
    "name": "Q4 2025",
    "is_global": true
  },
  "measures": [
    {
      "row_number": 1,
      "group": "Revenue",
      "block": "Sales",
      "measure_name": "Total revenue",
      "measure_description": "Gross revenue across all channels",
      "original_source_type": "Database",
      "original_source": "ERP",
      "original_object": "sales.amount",
      "display_data_type": "Number",
      "measure_type": "Base",
      "restrictions": null,
      "formula": null,
      "report_for_verification": null,
      "comment": null,
      "status": "Active",
      "relevance": null,
      "required": null,
      "visibility": null,
      "responsible_for_data": null,
      "variation": null
    }
  ],
  "dimensions": [
    {
      "row_number": 1,
      "group": "Customer",
      "block": "Profile",
      "dimension_name": "Customer name",
      "dimension_description": "Full customer name",
      "original_source_type": null,
      "original_source": null,
      "original_object": null,
      "dimension_group": "Customers",
      "display_data_type": "Text",
      "source_data_type": "VARCHAR(255)",
      "dimension_type": "Primary",
      "formula": null,
      "connected_source": { "db": "analytics_db", "schema": "public", "table": "dim_customer", "column": "customer_name" },
      "comment": null,
      "value_options": null,
      "status": "Active",
      "relevance": null,
      "required": null,
      "visibility": null,
      "responsible_for_data": null
    }
  ],
  "facts": [
    {
      "row_number": 1,
      "group": "Sales",
      "block": "Orders",
      "fact_name": "Order line",
      "fact_description": "An individual line item on a sales order",
      "original_source_type": null,
      "original_source": null,
      "original_object": null,
      "source_data_type": "DECIMAL(18,2)",
      "fact_type": "Primary",
      "formula": null,
      "connected_source": { "db": "analytics_db", "schema": "public", "table": "fact_order_line", "column": "amount" },
      "report_for_verification": null,
      "comment": null,
      "status": null,
      "relevance": null,
      "required": null,
      "visibility": null,
      "responsible_for_data": null
    }
  ],
  "dimension_groups": [
    {
      "id": "9",
      "name": "Geography",
      "description": "Geographic regions and countries",
      "primary_key": {
        "db": "analytics_db",
        "schema": "public",
        "table": "dim_geography",
        "column": "region_id"
      },
      "dimensions": [
        { "id": "722", "name": "Region", "level": 1, "data_type": "Text", "physical_column": "region_name" },
        { "id": "723", "name": "Country", "level": 2, "data_type": "Text", "physical_column": "country_code" }
      ],
      "related_fact_tables": ["11", "14"],
      "created_at": null
    }
  ],
  "fact_tables": [
    {
      "id": "11",
      "name": "fact_sales",
      "description": "Primary sales facts",
      "owner": "Pavel Shalavin",
      "created_at": "2026-04-15T08:30:00Z",
      "measures_count": 5,
      "dimensions_count": 3,
      "facts_count": 2,
      "verification_filters_count": 2,
      "related_dimension_groups_count": 1
    }
  ],
  "relationships": [
    {
      "id": "1101",
      "source_fact_table": { "id": "11", "name": "fact_sales" },
      "target_dimension_group": { "id": "9", "name": "Geography" },
      "foreign_key": { "db": "analytics_db", "schema": "public", "table": "fact_sales", "column": "region_id" },
      "primary_key": { "db": "analytics_db", "schema": "public", "table": "dim_geography", "column": "region_id" },
      "relationship_type": "Многие-к-одному",
      "created_at": null
    }
  ],
  "exported_at": "2026-05-05T08:30:00Z"
}
Поле Тип Описание
project object id, name, description проекта (id — строкой)
version object id, name, is_global версии
measures[].row_number integer Позиция строки в таблице РПИ
measures[].group, block string | null Группирующие колонки РПИ
measures[].measure_name string Имя показателя
measures[].measure_description string | null Описание
measures[].original_source_type, original_source, original_object string | null Колонки происхождения; свободный текст
measures[].display_data_type string | null Локализованная подпись типа данных (Number, Text, Date, …)
measures[].measure_type string Локализованная подпись: Base или Calculated
measures[].restrictions string | null Колонка ограничений
measures[].formula string | null Формула расчётного показателя со ссылками вида [Имя]
measures[].report_for_verification, comment, responsible_for_data, variation string | null Текстовые колонки
measures[].status, relevance, required, visibility string | null Локализованные подписи справочников
dimensions[].row_number integer Позиция строки в таблице РПИ
dimensions[].group, block string | null Группирующие колонки РПИ
dimensions[].dimension_name, dimension_description string / string | null Имя и описание
dimensions[].original_source_type, original_source, original_object string | null Колонки происхождения; свободный текст
dimensions[].dimension_group string | null Имя группы измерений, в которую входит измерение
dimensions[].display_data_type string | null Локализованная подпись типа данных
dimensions[].source_data_type string | null Физический тип колонки, полученный из закешированной схемы подключения
dimensions[].dimension_type string Локализованная подпись: Primary или Derived
dimensions[].formula string | null Формула производного измерения
dimensions[].connected_source object | null Объект источника { db, schema, table, column } (раздел 3.6 страницы API)
dimensions[].comment, responsible_for_data string | null Текстовые колонки
dimensions[].value_options string | null Колонка допустимых значений
dimensions[].status, relevance, required, visibility string | null Локализованные подписи справочников
facts[].row_number integer Позиция строки в таблице РПИ
facts[].group, block string | null Группирующие колонки РПИ
facts[].fact_name, fact_description string / string | null Имя и описание
facts[].original_source_type, original_source, original_object string | null Колонки происхождения; свободный текст
facts[].source_data_type string | null Физический тип колонки, полученный из закешированной схемы подключения
facts[].fact_type string Локализованная подпись: Primary или Derived
facts[].formula string | null Формула производного факта
facts[].connected_source object | null Объект источника { db, schema, table, column } (раздел 3.6 страницы API)
facts[].report_for_verification, comment, responsible_for_data string | null Текстовые колонки
facts[].status, relevance, required, visibility string | null Локализованные подписи справочников
dimension_groups[].id, name, description string / string / string | null Идентификация
dimension_groups[].primary_key object | null Объект источника { db, schema, table, column }
dimension_groups[].dimensions[] array Члены группы, упорядочены по уровню иерархии level; data_type — локализованный отображаемый тип, physical_column — колонка в исходной таблице
dimension_groups[].related_fact_tables[] string ID таблиц фактов, ссылающихся на группу; их конфигурация доступна через эндпоинты таблиц фактов
dimension_groups[].created_at null В v1 не заполняется
fact_tables[].id, name, description, owner, created_at Идентификация; owner — имя создателя
fact_tables[].measures_count, dimensions_count, facts_count integer Элементы, назначенные таблице фактов напрямую
fact_tables[].verification_filters_count integer Фильтры верификации уровня таблицы фактов
fact_tables[].related_dimension_groups_count integer Группы измерений, назначенные таблице фактов
relationships[].id string Идентификатор связи
relationships[].source_fact_table object id, name таблицы фактов с внешним ключом
relationships[].target_dimension_group object id, name группы измерений с первичным ключом
relationships[].foreign_key, primary_key object | null Объекты источника соединения
relationships[].relationship_type string Локализованная подпись кратности
relationships[].created_at null В v1 не заполняется
exported_at string Момент снятия снимка, ISO 8601

Ошибки. Только общие ошибки (раздел 4 страницы API).

2 Публичный DF API — модель данных и витрины (df-api/v1)

Базовый путь: /df-api/v1. Аутентификация: X-Api-Key. Все эндпоинты — read-only.

Эта группа сгруппирована в шесть логических областей: витрины, подключения, группы измерений, таблицы фактов, связи и сводный экспорт РПИ. Эндпоинты витрин и подключений возвращают только JSON; эндпоинты групп измерений, таблиц фактов, связей и сводного экспорта дополнительно поддерживают ?format=xlsx (см. раздел 3.5 страницы API). Эндпоинты содержимого РПИ (проекты, версии, показатели, измерения, факты) описаны в разделе 9.7.

Общее для всех эндпоинтов группы: {project_id} и {version_id} — обязательные целочисленные параметры пути; проект, недоступный владельцу ключа, отвечает 404; списочные эндпоинты отклоняют pageSize больше 100 с 400 DF_API.PAGE_SIZE_EXCEEDED и страничат с ключом total_pages (а не totalPages, раздел 3.2 страницы API). Объекты источника (primary_key, foreign_key) содержат db, schema, table, column и не содержат поля connection (раздел 3.6 страницы API).

2.1 Список витрин

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/data-marts

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
page query integer нет Номер страницы, нумерация с 1. По умолчанию 1
pageSize query integer нет Размер страницы. По умолчанию 20, максимум 100
language query ru | en нет Язык подписи type
type query string нет Фильтр по типу витрины: with_grouping, without_grouping, with_grouping_and_pivoting
merge_type query string нет Фильтр по типу слияния: union, join
search query string нет Поиск без учёта регистра по подстроке в name и description

Детали

type возвращается как локализованная подпись (зависит от language / Accept-Language), например "С группировкой" для ru, тогда как фильтр принимает сырой слаг. merge_type — всегда сырой слаг (union / join), не локализуется. Если у витрины нет описания, ключ description отсутствует (v2 возвращает null). Только JSON — format не принимается.

Ответ

200 OK

{
  "data_marts": [
    {
      "id": "57",
      "name": "Monthly Sales Mart",
      "description": "Aggregated by month and region",
      "owner": "Pavel Shalavin",
      "created_at": "2026-04-15T08:30:00Z",
      "type": "С группировкой",
      "merge_type": "union",
      "source_fact_table_count": 2,
      "has_physical_view": true
    }
  ],
  "pagination": { "page": 1, "pageSize": 20, "total": 45, "total_pages": 3 }
}
Поле Тип Описание
data_marts[].id string Идентификатор витрины
data_marts[].name string Отображаемое имя
data_marts[].description string Описание; ключ опускается, если описание не задано
data_marts[].owner string Имя владельца либо e-mail, если имя не заполнено
data_marts[].created_at string Дата создания, ISO 8601
data_marts[].type string Локализованная подпись типа витрины
data_marts[].merge_type string | null union / join; null для витрин на одной таблице фактов
data_marts[].source_fact_table_count integer Количество уникальных таблиц фактов-источников
data_marts[].has_physical_view boolean Материализован ли для витрины физический объект
pagination object page, pageSize, total, total_pages

Ошибки

Код HTTP Условие
DF_API.INVALID_TYPE 400 Значение type не входит в допустимый набор
DF_API.INVALID_MERGE_TYPE 400 Значение merge_type не входит в допустимый набор
DF_API.PAGE_SIZE_EXCEEDED 400 pageSize больше 100
Общие ошибки Раздел 4 страницы API

2.2 Получение деталей витрины

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/data-marts/{data_mart_id}

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
data_mart_id путь integer да Идентификатор витрины
language query ru | en нет Язык локализуемых подписей (type, data_type)

Детали

Возвращает полную конфигурацию витрины. Для транспонированных витрин (type = with_grouping_and_pivoting) ответ дополнительно содержит selected_measure_attributes, в котором неявный ключ транспонирования Measure name всегда добавлен в начало:

"selected_measure_attributes": [
  { "attribute_id": "3",  "attribute_name": "Measure name" },
  { "attribute_id": "27", "attribute_name": "Measure description" }
]

Ответ

200 OK

{
  "id": "57",
  "name": "Monthly Sales Mart",
  "description": "Aggregated by month and region",
  "owner": "Pavel Shalavin",
  "created_at": "2026-04-15T08:30:00Z",
  "type": "with_grouping",
  "merge_type": "union",
  "source_fact_tables": [
    { "id": "11", "name": "fact_sales", "description": "Primary sales facts" }
  ],
  "selected_measures": [
    {
      "instance_id": "204",
      "measure_id": "501",
      "measure_name": "Total revenue",
      "description": "Gross revenue",
      "formula": "SUM([Amount])",
      "data_type": "Numeric",
      "display_name": "Revenue",
      "aggregation_configuration": { "type": "default", "group_by_fields": [] },
      "source_fact_table_id": "11"
    }
  ],
  "selected_facts": [
    {
      "fact_id": "611",
      "fact_name": "Order line",
      "data_type": "Numeric",
      "display_name": "Order line",
      "include_in_result": true,
      "filter_condition": null,
      "source_fact_table_id": "11"
    }
  ],
  "selected_dimensions": [
    {
      "dimension_id": "722",
      "dimension_name": "Region",
      "description": "Geographic region",
      "data_type": "Text",
      "display_name": "Region",
      "include_in_result": true,
      "filter_condition": null,
      "source_fact_table_id": "11",
      "source_dimension_group_id": "9",
      "source_dimension_group_name": "Geography"
    }
  ],
  "physical_view": {
    "exists": false,
    "type": null, "database": null, "schema": null, "name": null, "created_at": null
  }
}
Поле Тип Описание
id string Идентификатор витрины
name string Отображаемое имя
description string Описание; ключ опускается, если описание не задано
owner string Имя владельца либо e-mail, если имя не заполнено
created_at string Дата создания, ISO 8601
type string Локализованная подпись типа витрины
merge_type string | null union / join; null для витрин на одной таблице фактов
source_fact_tables[] array Таблицы фактов-источники: id, name, description
selected_measures[].instance_id string Уникальный идентификатор экземпляра показателя в витрине (один показатель может входить несколько раз с разной настройкой агрегации)
selected_measures[].measure_id string Идентификатор показателя в РПИ
selected_measures[].formula string | null Формула расчётного показателя
selected_measures[].data_type string Локализованная подпись типа данных
selected_measures[].display_name string Имя колонки в витрине
selected_measures[].aggregation_configuration.type string default, none, custom или global
selected_measures[].aggregation_configuration.group_by_fields array Идентификаторы column-value полей группировки показателя
selected_facts[], selected_dimensions[] array Факты и измерения, используемые витриной
…include_in_result boolean false — элемент используется только для фильтрации и не попадает в проекцию
…filter_condition string | null Выражение фильтра с заменой column-value-ссылок на имена; null, если фильтра нет
selected_dimensions[].source_dimension_group_id / source_dimension_group_name string | null Разрешаются по модели данных, даже если группа измерений не указана явно в атрибутах витрины
physical_view object Метаданные материализованного объекта: exists, type (локализованная подпись вида объекта), database (сырой слаг), schema, name, created_at; поле connection здесь не возвращается

Ошибки

Код HTTP Условие
DF_API.DATA_MART_NOT_FOUND 404 Витрина не существует в указанной версии
Общие ошибки Раздел 4 страницы API

2.3 Получение метаданных физического представления

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/data-marts/{data_mart_id}/view

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
data_mart_id путь integer да Идентификатор витрины
language query ru | en нет Язык подписи type

Детали

Возвращает метаданные физического объекта, материализованного DataForge для витрины. Подключение к целевой СУБД не выполняется — возвращается только то, что известно платформе. Если представление не материализовано, exists равен false, а все остальные поля — null:

{ "exists": false, "type": null, "database": null, "schema": null, "name": null, "created_at": null, "connection": null }

Ответ

200 OK

{
  "exists": true,
  "type": "materialized_view",
  "database": "postgresql",
  "schema": "marts",
  "name": "monthly_sales",
  "created_at": "2026-04-21T09:00:00Z",
  "connection": { "id": "3", "name": "Production PostgreSQL", "db_type": "postgres" }
}
Поле Тип Описание
exists boolean Материализован ли объект
type string | null Локализованная подпись вида физического объекта (зависит от language); сырые слаги: regular_view, materialized_view, table
database string | null Сырой слаг типа СУБД: postgresql, clickhouse, sqlserver (не локализуется)
schema string | null Схема объекта. В v1 для ClickHouse здесь возвращается имя базы данных; v2 возвращает null
name string | null Имя объекта в СУБД
created_at string | null Дата создания объекта, ISO 8601
connection object | null id, name, db_type подключения, в котором создан объект; без учётных данных

Ошибки

Код HTTP Условие
DF_API.DATA_MART_NOT_FOUND 404 Витрина не существует в указанной версии
Общие ошибки Раздел 4 страницы API

2.4 Генерация SQL-скрипта

Запрос

POST /df-api/v1/projects/{project_id}/versions/{version_id}/data-marts/{data_mart_id}/generate-sql

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
data_mart_id путь integer да Идентификатор витрины
limit тело integer > 0 нет Добавляет ограничение строк в синтаксисе диалекта: LIMIT n OFFSET m для PostgreSQL/ClickHouse, OFFSET m ROWS FETCH NEXT n ROWS ONLY для MS SQL
offset тело integer ≥ 0 нет Смещение строк; действует только вместе с limit. offset без limit игнорируется

Тело запроса (необязательное):

{ "limit": 100, "offset": 0 }

Детали

Генерирует выражение SQL SELECT витрины. SQL только формируется и возвращается — он не выполняется, ничего не сохраняется. Для MS SQL, если в SQL отсутствует ORDER BY, сервис добавляет ORDER BY (SELECT NULL) для синтаксической валидности OFFSET … FETCH NEXT.

Эндпоинт отвечает 201 Created — стандартный статус POST в v1; тот же эндпоинт в v2 отвечает 200 и читает limit / offset из query-строки.

Если генерация SQL завершается ошибкой (повреждённые формулы или отсутствие привязок), ответ остаётся успешным (тот же статус 201), а сбой описывается в validation_errors. Это позволяет клиенту отличить «витрина не может сейчас сформировать SQL» от «витрины не существует» (404). В v1 поле message содержит сырой ключ причины (например, FORMULA.SOURCE_NOT_FOUND_FOR_METRIC); локализованный текст возвращает только v2.

Ответ

201 Created

{
  "sql_script": "SELECT ...\nFROM ...\nGROUP BY ...\nLIMIT 100 OFFSET 0",
  "target_db_type": "postgres",
  "validation_errors": []
}

При ошибке генерации:

{
  "sql_script": "",
  "target_db_type": null,
  "validation_errors": [
    { "code": "SQL_GENERATION_FAILED", "message": "FORMULA.SOURCE_NOT_FOUND_FOR_METRIC" }
  ]
}
Поле Тип Описание
sql_script string Сгенерированный SELECT; пустая строка при неудаче
target_db_type string | null Тип целевой СУБД (postgres, clickhouse, sqlserver); null при неудаче
validation_errors[] array Пустой при успехе
validation_errors[].code string Всегда SQL_GENERATION_FAILED
validation_errors[].message string Сырой ключ причины (v1)

Ошибки

Код HTTP Условие
DF_API.DATA_MART_NOT_FOUND 404 Витрина не существует в указанной версии
Общие ошибки Раздел 4 страницы API

2.5 Список подключений

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/connections

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
page query integer нет Номер страницы, нумерация с 1. По умолчанию 1
pageSize query integer нет Размер страницы. По умолчанию 20, максимум 100
language query ru | en нет Принимается для единообразия; в ответе нет локализуемых полей
db_type query string нет Фильтр по типу СУБД: postgresql, clickhouse, sqlserver
status query string нет Фильтр по статусу: active, inactive, never_verified, failed

Детали

Учётные данные не возвращаются никогда (раздел 6 страницы API). schema возвращается только для PostgreSQL: для MS SQL Server схема включается в имя таблицы в других местах системы, для ClickHouse вместо схемы используется имя базы данных — в обоих случаях null. Подключения к СУБД, не поддерживаемым публичным API (например MySQL), исключаются из списка и из total.

status рассчитывается из внутреннего состояния: приоритет имеет never_verified — без отметки об успешном обновлении система не может утверждать состояние; failed соответствует внутреннему UPDATE_ERROR; inactive соответствует DISABLED; в остальных случаях статус — active.

Ответ

200 OK

{
  "connections": [
    {
      "id": "1",
      "name": "Production PostgreSQL",
      "db_type": "postgresql",
      "host": "db.production.company.com",
      "port": 5432,
      "database": "analytics_db",
      "schema": "public",
      "username": "analytics_user",
      "status": "active",
      "last_updated_at": "2026-04-15T08:30:00Z"
    },
    {
      "id": "2",
      "name": "Legacy SQL Server",
      "db_type": "sqlserver",
      "host": "sqlserver.legacy.company.com",
      "port": 1433,
      "database": "legacy_warehouse",
      "schema": null,
      "username": "etl_service",
      "status": "active",
      "last_updated_at": "2026-04-14T10:00:00Z"
    }
  ],
  "pagination": { "page": 1, "pageSize": 20, "total": 8, "total_pages": 1 }
}
Поле Тип Описание
connections[].id string Идентификатор подключения
connections[].name string Отображаемое имя (уникально в пределах версии)
connections[].db_type string Сырой слаг: postgresql, clickhouse, sqlserver
connections[].host, port, database string / integer / string Сетевые координаты
connections[].schema string | null Схема подключения; только для PostgreSQL
connections[].username string Имя пользователя СУБД (не секрет)
connections[].status string active, inactive, never_verified, failed
connections[].last_updated_at string | null Момент последнего успешного обновления снимка схемы
pagination object page, pageSize, total, total_pages

Ошибки

Код HTTP Условие
DF_API.INVALID_DB_TYPE 400 Значение db_type не входит в допустимый набор
DF_API.INVALID_STATUS 400 Значение status не входит в допустимый набор
DF_API.PAGE_SIZE_EXCEEDED 400 pageSize больше 100
Общие ошибки Раздел 4 страницы API

2.6 Получение деталей подключения

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/connections/{connection_id}

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
connection_id путь integer да Идентификатор подключения
language query ru | en нет Принимается для единообразия; локализуемых полей нет
include_db_schema query boolean нет По умолчанию false. При true облегчённый массив db_tables заменяется полным объектом db_schema

Детали

db_tables[] содержит только name. db_schema.tables[] содержит table_name, schema (собственная схема таблицы; null для ClickHouse, где схем нет) и columns[] из column_name и data_type. Один и тот же объект структуры в этом эндпоинте называется db_schema, а в эндпоинте схемы (GET …/connections/{connection_id}/schema) — schema; состав таблиц в обоих случаях одинаков. В v1 объект структуры не содержит поля connection — его добавляет только v2. Схема — закешированный снимок, снятый при настройке подключения или ручном обновлении; момент снятия фиксирует last_updated_at.

Ответ

200 OKinclude_db_schema=false:

{
  "id": "1",
  "name": "Production PostgreSQL",
  "db_type": "postgresql",
  "host": "db.production.company.com",
  "port": 5432,
  "database": "analytics_db",
  "schema": "public",
  "username": "analytics_user",
  "status": "active",
  "last_updated_at": "2026-04-15T08:30:00Z",
  "db_tables": [ { "name": "fact_sales" }, { "name": "dim_customer" } ]
}

200 OKinclude_db_schema=true:

{
  "id": "1",
  "name": "Production PostgreSQL",
  "db_type": "postgresql",
  "host": "db.production.company.com",
  "port": 5432,
  "database": "analytics_db",
  "schema": "public",
  "username": "analytics_user",
  "status": "active",
  "last_updated_at": "2026-04-15T08:30:00Z",
  "db_schema": {
    "tables": [
      {
        "table_name": "fact_sales",
        "schema": "public",
        "columns": [
          { "column_name": "sale_id", "data_type": "int" },
          { "column_name": "sale_date", "data_type": "datetime" },
          { "column_name": "amount", "data_type": "decimal(18,2)" }
        ]
      }
    ]
  }
}
Поле Тип Описание
id string Идентификатор подключения
name string Отображаемое имя (уникально в пределах версии)
db_type string Сырой слаг: postgresql, clickhouse, sqlserver
host, port, database string / integer / string Сетевые координаты
schema string | null Схема подключения; только для PostgreSQL
username string Имя пользователя СУБД (не секрет)
status string active, inactive, never_verified, failed
last_updated_at string | null Момент последнего успешного обновления снимка схемы
db_tables[].name string Имя таблицы; присутствует, когда include_db_schema не задан
db_schema object Полная структура; присутствует вместо db_tables при include_db_schema=true
db_schema.tables[].table_name string Имя таблицы
db_schema.tables[].schema string | null Схема таблицы; null для ClickHouse
db_schema.tables[].columns[].column_name, data_type string Имя и тип колонки, как они получены из СУБД

Ошибки

Код HTTP Условие
DF_API.CONNECTION_NOT_FOUND 404 Подключение не существует в указанной версии
Общие ошибки Раздел 4 страницы API

2.7 Получение схемы подключения

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/connections/{connection_id}/schema

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
connection_id путь integer да Идентификатор подключения

Детали

Возвращает только закешированную схему (таблицы и колонки) подключения, без сетевых координат. Ключ верхнего уровня здесь называется schema (в эндпоинте деталей подключения тот же объект называется db_schema); его состав идентичен: tables[] с table_name, schema таблицы (null для ClickHouse) и columns[] из column_name и data_type.

Возвращаемая схема — закешированный снимок, снятый при настройке подключения или ручном обновлении. Он не отражает изменения целевой СУБД в реальном времени; last_updated_at фиксирует момент снятия снимка.

Ответ

200 OK

{
  "id": "1",
  "name": "Production PostgreSQL",
  "db_type": "postgresql",
  "last_updated_at": "2026-04-15T08:30:00Z",
  "schema": {
    "tables": [
      { "table_name": "fact_sales", "schema": "public",
        "columns": [
          { "column_name": "sale_id", "data_type": "int" },
          { "column_name": "sale_date", "data_type": "datetime" }
        ]
      }
    ]
  }
}
Поле Тип Описание
id, name, db_type string Идентификация подключения
last_updated_at string | null Момент снятия снимка
schema.tables[].table_name string Имя таблицы
schema.tables[].schema string | null Схема таблицы; null для ClickHouse
schema.tables[].columns[].column_name, data_type string Имя и тип колонки, как они получены из СУБД

Ошибки

Код HTTP Условие
DF_API.CONNECTION_NOT_FOUND 404 Подключение не существует в указанной версии
Общие ошибки Раздел 4 страницы API

2.8 Список групп измерений

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/dimension-groups

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
page query integer нет Номер страницы, нумерация с 1. По умолчанию 1
pageSize query integer нет Размер страницы. По умолчанию 20, максимум 100
language query ru | en нет Язык подписей data_type
format query json | xlsx нет По умолчанию json. xlsx формирует книгу с одним листом Dimension Groups

Детали

Возвращает группы измерений (справочники) версии проекта с их первичным ключом, составом измерений и идентификаторами таблиц фактов, ссылающихся на группу. primary_key — объект источника из раздела 3.6 страницы API без connection либо null, если у группы не разрешён физический ключ; v1 отдаёт сохранённую схему как есть. created_at присутствует, но для групп измерений не заполняется и возвращается как null.

Ответ

200 OK

{
  "dimension_groups": [
    {
      "id": "9",
      "name": "Geography",
      "description": "Geographic regions and countries",
      "primary_key": {
        "db": "analytics_db",
        "schema": "public",
        "table": "dim_geography",
        "column": "region_id"
      },
      "dimensions": [
        { "id": "722", "name": "Region", "level": 1, "data_type": "Text", "physical_column": "region_name" },
        { "id": "723", "name": "Country", "level": 2, "data_type": "Text", "physical_column": "country_code" }
      ],
      "related_fact_tables": ["11", "14"],
      "created_at": null
    }
  ],
  "pagination": { "page": 1, "pageSize": 20, "total": 12, "total_pages": 1 }
}
Поле Тип Описание
dimension_groups[].id, name, description string / string / string | null Идентификация
dimension_groups[].primary_key object | null Объект источника { db, schema, table, column }
dimension_groups[].dimensions[] array Члены группы, упорядочены по уровню иерархии level; data_type — локализованный отображаемый тип, physical_column — колонка в исходной таблице
dimension_groups[].related_fact_tables[] string ID таблиц фактов, ссылающихся на группу; их конфигурация доступна через эндпоинты таблиц фактов
dimension_groups[].created_at null В v1 не заполняется
pagination object page, pageSize, total, total_pages

Ошибки

Код HTTP Условие
DF_API.PAGE_SIZE_EXCEEDED 400 pageSize больше 100
Общие ошибки Раздел 4 страницы API

2.9 Получение деталей группы измерений

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/dimension-groups/{dimension_group_id}

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
dimension_group_id путь integer да Идентификатор группы измерений
language query ru | en нет Локализация
format query json | xlsx нет По умолчанию json

Детали

Возвращает полную конфигурацию одной группы измерений, включая связанные таблицы фактов с колонками внешних ключей. В отличие от списочного эндпоинта, детали в v1 не содержат массив dimensions (в v2 содержат). created_at / updated_at присутствуют, но равны null.

Ответ

200 OK

{
  "id": "9",
  "name": "Geography",
  "description": "Geographic regions and countries",
  "primary_key": {
    "db": "analytics_db",
    "schema": "public",
    "table": "dim_geography",
    "column": "region_id"
  },
  "related_fact_tables": [
    { "fact_table_id": "11", "fact_table_name": "fact_sales", "foreign_key_column": "region_id" },
    { "fact_table_id": "14", "fact_table_name": "fact_inventory", "foreign_key_column": "region_id" }
  ],
  "created_at": null,
  "updated_at": null
}
Поле Тип Описание
id, name, description string / string / string | null Идентификация
primary_key object | null Объект источника { db, schema, table, column }
related_fact_tables[] array fact_table_id, fact_table_name, foreign_key_column каждой таблицы фактов, соединённой с группой
created_at, updated_at null В v1 не заполняются

Ошибки

Код HTTP Условие
DF_API.DIMENSION_GROUP_NOT_FOUND 404 Группа измерений не существует в версии
Общие ошибки Раздел 4 страницы API

2.10 Список таблиц фактов

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/fact-tables

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
page query integer нет Номер страницы, нумерация с 1. По умолчанию 1
pageSize query integer нет Размер страницы. По умолчанию 20, максимум 100
language query ru | en нет Принимается; в списке нет локализуемых полей
format query json | xlsx нет По умолчанию json. xlsx формирует книгу с одним листом Fact Tables

Детали

dimensions_count учитывает только измерения, добавленные непосредственно в таблицу фактов (не входящие ни в одну группу измерений). Измерения, унаследованные через группы, доступны через related_dimension_groups_count и через эндпоинт деталей.

Ответ

200 OK

{
  "fact_tables": [
    {
      "id": "11",
      "name": "fact_sales",
      "description": "Primary sales facts",
      "owner": "Pavel Shalavin",
      "created_at": "2026-04-15T08:30:00Z",
      "measures_count": 5,
      "dimensions_count": 3,
      "facts_count": 2,
      "verification_filters_count": 2,
      "related_dimension_groups_count": 1
    }
  ],
  "pagination": { "page": 1, "pageSize": 20, "total": 6, "total_pages": 1 }
}
Поле Тип Описание
fact_tables[].id, name, description, owner, created_at Идентификация; owner — имя создателя
fact_tables[].measures_count, dimensions_count, facts_count integer Элементы, назначенные таблице фактов напрямую
fact_tables[].verification_filters_count integer Фильтры верификации уровня таблицы фактов
fact_tables[].related_dimension_groups_count integer Группы измерений, назначенные таблице фактов
pagination object page, pageSize, total, total_pages

Ошибки

Код HTTP Условие
DF_API.PAGE_SIZE_EXCEEDED 400 pageSize больше 100
Общие ошибки Раздел 4 страницы API

2.11 Получение деталей таблицы фактов

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/fact-tables/{fact_table_id}

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
fact_table_id путь integer да Идентификатор таблицы фактов
language query ru | en нет Язык подписей data_type и invalid_reason
include_dependencies query boolean нет По умолчанию false. При true каждый показатель несёт рекурсивное дерево dependencies, разрешающее ссылки формулы до целевых показателей
format query json | xlsx нет По умолчанию json. xlsx формирует пять листов: Measures, Dimensions, Facts, Dimension Groups, Verification Filters

Детали

Возвращает полную конфигурацию таблицы фактов — её показатели, измерения, факты, группы измерений (с первичными и внешними ключами) и фильтры верификации. measure_type и fact_type здесь — сырые слаги (base / calculated, primary / derived / constant). В v1 поле типа данных элемента называется data_type (в v2 — display_data_type, раздел 1 страницы Публичный API v2).

Ответ

200 OK

{
  "id": "11",
  "name": "fact_sales",
  "description": "Primary sales facts",
  "owner": "Pavel Shalavin",
  "created_at": "2026-04-15T08:30:00Z",
  "updated_at": "2026-04-21T09:00:00Z",
  "measures": [
    {
      "id": "501",
      "name": "Total revenue",
      "description": "Gross revenue",
      "formula": "SUM([Amount])",
      "data_type": "Numeric",
      "measure_type": "base",
      "dependencies": null
    }
  ],
  "dimensions": [
    {
      "id": "801",
      "name": "Sale date",
      "description": "Calendar date of the sale",
      "data_type": "Date",
      "physical_column": "sale_date",
      "is_from_dimension_group": false,
      "dimension_group_id": null
    }
  ],
  "facts": [
    {
      "id": "611",
      "name": "Order line",
      "description": null,
      "data_type": "Numeric",
      "fact_type": "primary",
      "formula": null,
      "physical_column": "amount"
    }
  ],
  "dimension_groups": [
    {
      "id": "9",
      "name": "Geography",
      "description": "Geographic regions and countries",
      "primary_key": { "db": "analytics_db", "schema": "public", "table": "dim_geography", "column": "region_id" },
      "foreign_key": { "db": "analytics_db", "schema": "public", "table": "fact_sales", "column": "region_id" }
    }
  ],
  "verification_filters": [
    {
      "id": "301",
      "name": "Valid sales only",
      "description": "Excludes test and cancelled orders",
      "conditions": "[Status] != 'cancelled'",
      "is_valid": true,
      "invalid_reason": null
    }
  ]
}
Поле Тип Описание
measures[].measure_type string base (источник напрямую) или calculated (производный по формуле)
measures[].dependencies array | null Присутствует и заполняется только при include_dependencies=true; узел содержит id, name, type, formula и рекурсивный массив dependencies
dimensions[].is_from_dimension_group boolean true — измерение унаследовано из связанной группы; false — задано прямо в таблице фактов
dimensions[].dimension_group_id string | null Группа, из которой унаследовано измерение
facts[].fact_type string primary, derived или constant
…physical_column string | null Колонка исходной таблицы, привязанная к элементу
dimension_groups[].primary_key, foreign_key object | null Объекты источника соединения (раздел 3.6 страницы API)
verification_filters[].is_valid boolean false, если выражение фильтра не разрешается (отсутствующая ссылка, ошибка синтаксиса); invalid_reason несёт локализованное объяснение

Ошибки

Код HTTP Условие
DF_API.FACT_TABLE_NOT_FOUND 404 Таблица фактов не существует в версии
Общие ошибки Раздел 4 страницы API

2.12 Список связей

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/relationships

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
page query integer нет Номер страницы, нумерация с 1. По умолчанию 1
pageSize query integer нет Размер страницы. По умолчанию 20, максимум 100
language query ru | en нет Язык подписи relationship_type
fact_table_id query integer нет Только связи с указанной таблицей фактов в качестве источника
dimension_group_id query integer нет Только связи с указанной группой измерений в качестве цели
format query json | xlsx нет По умолчанию json

Детали

Возвращает связи внешних ключей между таблицами фактов и группами измерений в версии проекта. relationship_type описывает кратность от источника (таблицы фактов) к цели (группе измерений); в v1 это локализованная подпись (Many-to-one / Многие-к-одному в зависимости от language) — слаг many_to_one возвращает только v2. created_at в v1 не заполняется (null). foreign_key и primary_key могут быть null, если соответствующий маппинг неполный; в этом случае связь видна, но не пригодна для построения SQL-join'а.

Ответ

200 OK

{
  "relationships": [
    {
      "id": "1101",
      "source_fact_table": { "id": "11", "name": "fact_sales" },
      "target_dimension_group": { "id": "9", "name": "Geography" },
      "foreign_key": { "db": "analytics_db", "schema": "public", "table": "fact_sales", "column": "region_id" },
      "primary_key": { "db": "analytics_db", "schema": "public", "table": "dim_geography", "column": "region_id" },
      "relationship_type": "Многие-к-одному",
      "created_at": null
    }
  ],
  "pagination": { "page": 1, "pageSize": 20, "total": 4, "total_pages": 1 }
}
Поле Тип Описание
relationships[].id string Идентификатор связи
relationships[].source_fact_table object id, name таблицы фактов с внешним ключом
relationships[].target_dimension_group object id, name группы измерений с первичным ключом
relationships[].foreign_key, primary_key object | null Объекты источника соединения
relationships[].relationship_type string Локализованная подпись кратности
relationships[].created_at null В v1 не заполняется
pagination object page, pageSize, total, total_pages

Ошибки

Код HTTP Условие
DF_API.PAGE_SIZE_EXCEEDED 400 pageSize больше 100
Общие ошибки Раздел 4 страницы API

2.13 Получение деталей связи

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/relationships/{relationship_id}

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
relationship_id путь integer да Идентификатор связи
language query ru | en нет Язык подписи relationship_type
format query json | xlsx нет По умолчанию json

Детали

Возвращает одну связь с описательными полями обеих сторон; целевая группа измерений дополнительно несёт свой primary_key.

Ответ

200 OK

{
  "id": "1101",
  "source_fact_table": {
    "id": "11",
    "name": "fact_sales",
    "description": "Primary sales facts"
  },
  "target_dimension_group": {
    "id": "9",
    "name": "Geography",
    "description": "Geographic regions and countries",
    "primary_key": { "db": "analytics_db", "schema": "public", "table": "dim_geography", "column": "region_id" }
  },
  "foreign_key": { "db": "analytics_db", "schema": "public", "table": "fact_sales", "column": "region_id" },
  "primary_key": { "db": "analytics_db", "schema": "public", "table": "dim_geography", "column": "region_id" },
  "relationship_type": "Многие-к-одному",
  "created_at": null,
  "updated_at": null
}
Поле Тип Описание
source_fact_table, target_dimension_group object Обе стороны с description; сторона группы повторяет свой primary_key
id string Идентификатор связи
foreign_key, primary_key object | null Объекты источника соединения
relationship_type string Локализованная подпись кратности
created_at, updated_at null В v1 не заполняются

Ошибки

Код HTTP Условие
DF_API.RELATIONSHIP_NOT_FOUND 404 Связь не существует в версии
Общие ошибки Раздел 4 страницы API

2.14 Сводный экспорт РПИ

Запрос

GET /df-api/v1/projects/{project_id}/versions/{version_id}/rmd

Параметр Где Тип Обяз. Описание
project_id путь integer да Идентификатор проекта
version_id путь integer да Идентификатор версии
language query ru | en нет Язык подписей полей-справочников
format query json | xlsx нет По умолчанию json. xlsx формирует шесть листов: Measures, Dimensions, Facts, Dimension Groups, Fact Tables, Relationships

Детали

Возвращает полный снимок метаданных версии проекта — содержимое РПИ (показатели, измерения, факты) и модель данных (группы измерений, таблицы фактов, связи) — в одном payload без пагинации, с отметкой времени exported_at. Предназначен для внешних каталогов и полной синхронизации состояния. Для отдельных постраничных секций РПИ используйте эндпоинты раздела 9.7.

Ответ

200 OK

{
  "project": {
    "id": "12",
    "name": "Sales Analytics",
    "description": "Production sales warehouse"
  },
  "version": {
    "id": "33",
    "name": "Q4 2025",
    "is_global": true
  },
  "measures": [
    {
      "row_number": 1,
      "group": "Revenue",
      "block": "Sales",
      "measure_name": "Total revenue",
      "measure_description": "Gross revenue across all channels",
      "original_source_type": "Database",
      "original_source": "ERP",
      "original_object": "sales.amount",
      "display_data_type": "Number",
      "measure_type": "Base",
      "restrictions": null,
      "formula": null,
      "report_for_verification": null,
      "comment": null,
      "status": "Active",
      "relevance": null,
      "required": null,
      "visibility": null,
      "responsible_for_data": null,
      "variation": null
    }
  ],
  "dimensions": [
    {
      "row_number": 1,
      "group": "Customer",
      "block": "Profile",
      "dimension_name": "Customer name",
      "dimension_description": "Full customer name",
      "original_source_type": null,
      "original_source": null,
      "original_object": null,
      "dimension_group": "Customers",
      "display_data_type": "Text",
      "source_data_type": "VARCHAR(255)",
      "dimension_type": "Primary",
      "formula": null,
      "connected_source": { "db": "analytics_db", "schema": "public", "table": "dim_customer", "column": "customer_name" },
      "comment": null,
      "value_options": null,
      "status": "Active",
      "relevance": null,
      "required": null,
      "visibility": null,
      "responsible_for_data": null
    }
  ],
  "facts": [
    {
      "row_number": 1,
      "group": "Sales",
      "block": "Orders",
      "fact_name": "Order line",
      "fact_description": "An individual line item on a sales order",
      "original_source_type": null,
      "original_source": null,
      "original_object": null,
      "source_data_type": "DECIMAL(18,2)",
      "fact_type": "Primary",
      "formula": null,
      "connected_source": { "db": "analytics_db", "schema": "public", "table": "fact_order_line", "column": "amount" },
      "report_for_verification": null,
      "comment": null,
      "status": null,
      "relevance": null,
      "required": null,
      "visibility": null,
      "responsible_for_data": null
    }
  ],
  "dimension_groups": [
    {
      "id": "9",
      "name": "Geography",
      "description": "Geographic regions and countries",
      "primary_key": {
        "db": "analytics_db",
        "schema": "public",
        "table": "dim_geography",
        "column": "region_id"
      },
      "dimensions": [
        { "id": "722", "name": "Region", "level": 1, "data_type": "Text", "physical_column": "region_name" },
        { "id": "723", "name": "Country", "level": 2, "data_type": "Text", "physical_column": "country_code" }
      ],
      "related_fact_tables": ["11", "14"],
      "created_at": null
    }
  ],
  "fact_tables": [
    {
      "id": "11",
      "name": "fact_sales",
      "description": "Primary sales facts",
      "owner": "Pavel Shalavin",
      "created_at": "2026-04-15T08:30:00Z",
      "measures_count": 5,
      "dimensions_count": 3,
      "facts_count": 2,
      "verification_filters_count": 2,
      "related_dimension_groups_count": 1
    }
  ],
  "relationships": [
    {
      "id": "1101",
      "source_fact_table": { "id": "11", "name": "fact_sales" },
      "target_dimension_group": { "id": "9", "name": "Geography" },
      "foreign_key": { "db": "analytics_db", "schema": "public", "table": "fact_sales", "column": "region_id" },
      "primary_key": { "db": "analytics_db", "schema": "public", "table": "dim_geography", "column": "region_id" },
      "relationship_type": "Многие-к-одному",
      "created_at": null
    }
  ],
  "exported_at": "2026-05-05T08:30:00Z"
}
Поле Тип Описание
project object id, name, description проекта (id — строкой)
version object id, name, is_global версии
measures[].row_number integer Позиция строки в таблице РПИ
measures[].group, block string | null Группирующие колонки РПИ
measures[].measure_name string Имя показателя
measures[].measure_description string | null Описание
measures[].original_source_type, original_source, original_object string | null Колонки происхождения; свободный текст
measures[].display_data_type string | null Локализованная подпись типа данных (Number, Text, Date, …)
measures[].measure_type string Локализованная подпись: Base или Calculated
measures[].restrictions string | null Колонка ограничений
measures[].formula string | null Формула расчётного показателя со ссылками вида [Имя]
measures[].report_for_verification, comment, responsible_for_data, variation string | null Текстовые колонки
measures[].status, relevance, required, visibility string | null Локализованные подписи справочников
dimensions[].row_number integer Позиция строки в таблице РПИ
dimensions[].group, block string | null Группирующие колонки РПИ
dimensions[].dimension_name, dimension_description string / string | null Имя и описание
dimensions[].original_source_type, original_source, original_object string | null Колонки происхождения; свободный текст
dimensions[].dimension_group string | null Имя группы измерений, в которую входит измерение
dimensions[].display_data_type string | null Локализованная подпись типа данных
dimensions[].source_data_type string | null Физический тип колонки, полученный из закешированной схемы подключения
dimensions[].dimension_type string Локализованная подпись: Primary или Derived
dimensions[].formula string | null Формула производного измерения
dimensions[].connected_source object | null Объект источника { db, schema, table, column } (раздел 3.6 страницы API)
dimensions[].comment, responsible_for_data string | null Текстовые колонки
dimensions[].value_options string | null Колонка допустимых значений
dimensions[].status, relevance, required, visibility string | null Локализованные подписи справочников
facts[].row_number integer Позиция строки в таблице РПИ
facts[].group, block string | null Группирующие колонки РПИ
facts[].fact_name, fact_description string / string | null Имя и описание
facts[].original_source_type, original_source, original_object string | null Колонки происхождения; свободный текст
facts[].source_data_type string | null Физический тип колонки, полученный из закешированной схемы подключения
facts[].fact_type string Локализованная подпись: Primary или Derived
facts[].formula string | null Формула производного факта
facts[].connected_source object | null Объект источника { db, schema, table, column } (раздел 3.6 страницы API)
facts[].report_for_verification, comment, responsible_for_data string | null Текстовые колонки
facts[].status, relevance, required, visibility string | null Локализованные подписи справочников
dimension_groups[].id, name, description string / string / string | null Идентификация
dimension_groups[].primary_key object | null Объект источника { db, schema, table, column }
dimension_groups[].dimensions[] array Члены группы, упорядочены по уровню иерархии level; data_type — локализованный отображаемый тип, physical_column — колонка в исходной таблице
dimension_groups[].related_fact_tables[] string ID таблиц фактов, ссылающихся на группу; их конфигурация доступна через эндпоинты таблиц фактов
dimension_groups[].created_at null В v1 не заполняется
fact_tables[].id, name, description, owner, created_at Идентификация; owner — имя создателя
fact_tables[].measures_count, dimensions_count, facts_count integer Элементы, назначенные таблице фактов напрямую
fact_tables[].verification_filters_count integer Фильтры верификации уровня таблицы фактов
fact_tables[].related_dimension_groups_count integer Группы измерений, назначенные таблице фактов
relationships[].id string Идентификатор связи
relationships[].source_fact_table object id, name таблицы фактов с внешним ключом
relationships[].target_dimension_group object id, name группы измерений с первичным ключом
relationships[].foreign_key, primary_key object | null Объекты источника соединения
relationships[].relationship_type string Локализованная подпись кратности
relationships[].created_at null В v1 не заполняется
exported_at string Момент снятия снимка, ISO 8601

Ошибки. Только общие ошибки (раздел 4 страницы API).