Разделы документации

API v1 · Справочник

Методы, параметры и ответы

Семь методов чтения. Схемы полей и примеры ответов согласованы с OpenAPI. Запросы выполняются вашим сервером; эта страница не принимает и не отправляет ваши ключи.

GET

/api/v1/me

Проверка ключа, разрешения и валюта

Возвращает владельца области ключа, его права и валюту. Не принимает JWT сессии CRM. Разрешение: Любой действующий ключ.

Разрешение: Любой действующий ключ

Параметры запроса

Параметры не требуются.

Запрос

curl --fail-with-body --get 'https://bloomhub.ru/api/v1/me' \
  --header "Authorization: Bearer $BLOOMHUB_API_KEY" \
  --header 'Accept: application/json'

Успешный ответ · 200 OK

Ответ /me
{
  "apiVersion": 1,
  "tenantId": "00000000-0000-4000-8000-000000000001",
  "scopes": [
    "catalog:read",
    "stock:read",
    "orders:read"
  ],
  "locationId": null,
  "currency": "RUB"
}

Учебный пример. ID, суммы и названия показаны для иллюстрации.

Поля ответа

ПолеТипОписание
apiVersionintegerВерсия внешнего контракта; сейчас 1.
tenantIdstring · uuidID магазина, которому принадлежит ключ.
scopesstring[]Разрешения, выданные этому ключу.
locationIdstring · uuid | nullID точки. null означает отсутствие ограничения/привязки, где это допускает объект.
currencystringКод валюты магазина, например RUB. Денежные поля передаются в её основных единицах.
GET

/api/v1/locations

Доступные точки магазина

Возвращает все доступные активные точки без пагинации. Ключ одной точки видит только её. Разрешение: Любой действующий ключ.

Разрешение: Любой действующий ключ

Параметры запроса

Параметры не требуются.

Запрос

curl --fail-with-body --get 'https://bloomhub.ru/api/v1/locations' \
  --header "Authorization: Bearer $BLOOMHUB_API_KEY" \
  --header 'Accept: application/json'

Успешный ответ · 200 OK

Ответ /locations
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000003",
      "name": "Учебный салон",
      "city": "Абакан",
      "address": null,
      "timezone": "Asia/Krasnoyarsk"
    }
  ]
}

Учебный пример. ID, суммы и названия показаны для иллюстрации.

Поля items[]

ПолеТипОписание
idstring · uuidУстойчивый ID объекта. Сохраняйте его как строку; названия и короткие номера не заменяют ID.
namestringНазвание объекта.
citystring | nullГород либо null.
addressstring | nullАдрес салона либо null. Это адрес точки, не адрес клиента.
timezonestringЧасовой пояс точки, например Asia/Krasnoyarsk.
GET

/api/v1/products

Активные товары и розничные цены

Активные неархивные товары и базовые розничные цены. Наличие берите отдельно из /stock; варианты и цены по точкам не входят в этот DTO. Разрешение: catalog:read.

Разрешение: catalog:read

Параметры запроса

ПараметрТип и значениеПравило
page

query

integer

По умолчанию: 1

Номер страницы. По умолчанию 1; предел 10000.
limit

query

integer

По умолчанию: 50

Объектов на странице: 1–100, по умолчанию 50.
updatedAfter

query

string · date-timeИзменения с указанного момента ВКЛЮЧИТЕЛЬНО. ISO 8601 с часовым поясом; знак + кодируйте как %2B.
locationId

query

string · uuidID активной точки. Если ключ закреплён за точкой, нельзя выбрать другую. Для /stock нужен, если у ключа нет своей точки. В /recipes не означает наличие на точке.

Запрос

curl --fail-with-body --get 'https://bloomhub.ru/api/v1/products?page=1&limit=50&locationId=00000000-0000-4000-8000-000000000003' \
  --header "Authorization: Bearer $BLOOMHUB_API_KEY" \
  --header 'Accept: application/json'

Успешный ответ · 200 OK

Ответ /products
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000005",
      "name": "Учебная роза",
      "sku": "ROSE-001",
      "barcode": null,
      "sellPrice": 100,
      "unit": "шт",
      "image": null,
      "categoryId": "00000000-0000-4000-8000-000000000007",
      "trackStock": true,
      "updatedAt": "2026-10-21T03:00:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 50,
    "hasMore": false
  }
}

Учебный пример. ID, суммы и названия показаны для иллюстрации.

Поля items[]

ПолеТипОписание
idstring · uuidУстойчивый ID объекта. Сохраняйте его как строку; названия и короткие номера не заменяют ID.
namestringНазвание объекта.
skustring | nullАртикул. Может отсутствовать.
barcodestring | nullШтрихкод. Может отсутствовать.
sellPricenumberБазовая розничная цена в основных единицах валюты магазина, например рублях.
unitstringЕдиница измерения; количество может быть дробным.
imagestring | nullСсылка на основное изображение либо null. Относительную ссылку разрешайте от https://bloomhub.ru.
categoryIdstring · uuid | nullID категории товара либо null. Справочник категорий отдельным методом v1 не предоставляется.
trackStockbooleanВедётся ли количественный учёт. false означает, что остаток не определяет доступность услуги/позиции.
updatedAtstring · date-timeМомент последнего изменения объекта в ISO 8601 с часовым поясом.

pagination.page — текущая страница; limit — размер; hasMore — есть следующая. Продолжайте выгрузку, пока hasMore равно true. Алгоритм синхронизации

GET

/api/v1/recipes

Активные рецепты: карточки букетов и композиции

Общие активные карточки букетов и композиций. Это каталог, а не расчёт наличия, готовой витрины или возможности сборки. Разрешение: catalog:read.

Разрешение: catalog:read

Параметры запроса

ПараметрТип и значениеПравило
page

query

integer

По умолчанию: 1

Номер страницы. По умолчанию 1; предел 10000.
limit

query

integer

По умолчанию: 50

Объектов на странице: 1–100, по умолчанию 50.
updatedAfter

query

string · date-timeИзменения с указанного момента ВКЛЮЧИТЕЛЬНО. ISO 8601 с часовым поясом; знак + кодируйте как %2B.
locationId

query

string · uuidID активной точки. Если ключ закреплён за точкой, нельзя выбрать другую. Для /stock нужен, если у ключа нет своей точки. В /recipes не означает наличие на точке.

Запрос

curl --fail-with-body --get 'https://bloomhub.ru/api/v1/recipes?page=1&limit=50' \
  --header "Authorization: Bearer $BLOOMHUB_API_KEY" \
  --header 'Accept: application/json'

Успешный ответ · 200 OK

Ответ /recipes
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000008",
      "name": "Учебный букет",
      "description": "Букет для примера интеграции",
      "sku": "BOUQUET-001",
      "sellPrice": 1200,
      "image": null,
      "photos": [],
      "video": null,
      "sectionId": null,
      "updatedAt": "2026-10-21T03:00:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 50,
    "hasMore": false
  }
}

Учебный пример. ID, суммы и названия показаны для иллюстрации.

Поля items[]

ПолеТипОписание
idstring · uuidУстойчивый ID объекта. Сохраняйте его как строку; названия и короткие номера не заменяют ID.
namestringНазвание объекта.
descriptionstring | nullПубличное описание карточки рецепта.
skustring | nullАртикул. Может отсутствовать.
sellPricenumberБазовая розничная цена в основных единицах валюты магазина, например рублях.
imagestring | nullСсылка на основное изображение либо null. Относительную ссылку разрешайте от https://bloomhub.ru.
photosstring[]Ссылки на дополнительные фотографии. Массив может быть пустым.
videostring | nullСсылка на видео карточки либо null.
sectionIdstring · uuid | nullID раздела рецептов либо null. Справочник разделов не входит в v1.
updatedAtstring · date-timeМомент последнего изменения объекта в ISO 8601 с часовым поясом.

pagination.page — текущая страница; limit — размер; hasMore — есть следующая. Продолжайте выгрузку, пока hasMore равно true. Алгоритм синхронизации

GET

/api/v1/stock

Физический остаток, резерв и свободное количество на точке

Физический остаток, резерв и свободное количество читаются отдельно для точки. Передайте locationId, если ключ не закреплён за точкой. Разрешение: stock:read.

Разрешение: stock:read

Параметры запроса

ПараметрТип и значениеПравило
page

query

integer

По умолчанию: 1

Номер страницы. По умолчанию 1; предел 10000.
limit

query

integer

По умолчанию: 50

Объектов на странице: 1–100, по умолчанию 50.
updatedAfter

query

string · date-timeИзменения с указанного момента ВКЛЮЧИТЕЛЬНО. ISO 8601 с часовым поясом; знак + кодируйте как %2B.
locationId

query

string · uuidID активной точки. Если ключ закреплён за точкой, нельзя выбрать другую. Для /stock нужен, если у ключа нет своей точки. В /recipes не означает наличие на точке.

Запрос

curl --fail-with-body --get 'https://bloomhub.ru/api/v1/stock?page=1&limit=50&locationId=00000000-0000-4000-8000-000000000003' \
  --header "Authorization: Bearer $BLOOMHUB_API_KEY" \
  --header 'Accept: application/json'

Успешный ответ · 200 OK

Ответ /stock
{
  "items": [
    {
      "inventoryItemId": "00000000-0000-4000-8000-000000000004",
      "productId": "00000000-0000-4000-8000-000000000005",
      "variantId": null,
      "name": "Учебная роза",
      "unit": "шт",
      "locationId": "00000000-0000-4000-8000-000000000003",
      "physicalStock": 10,
      "reservedStock": 3,
      "freeStock": 7,
      "trackStock": true,
      "updatedAt": "2026-10-21T03:00:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 50,
    "hasMore": false
  }
}

Учебный пример. ID, суммы и названия показаны для иллюстрации.

Поля items[]

ПолеТипОписание
inventoryItemIdstring · uuidID учётной позиции склада; отличается от ID товара.
productIdstring · uuid | nullID товара для связи с /products. Может отсутствовать у учётной позиции.
variantIdstring · uuid | nullID варианта либо null. Отдельный справочник вариантов не входит в v1.
namestringНазвание объекта.
unitstringЕдиница измерения; количество может быть дробным.
locationIdstring · uuidID точки. null означает отсутствие ограничения/привязки, где это допускает объект.
physicalStocknumberВесь физический остаток на точке. Резерв сюда повторно не прибавляется; значение может быть отрицательным.
reservedStocknumberКоличество, занятое резервами на точке.
freeStocknumberphysicalStock − reservedStock. Отрицательное значение не обнуляется: это дефицит относительно резервов.
trackStockbooleanВедётся ли количественный учёт. false означает, что остаток не определяет доступность услуги/позиции.
updatedAtstring · date-timeМомент последнего изменения объекта в ISO 8601 с часовым поясом.

pagination.page — текущая страница; limit — размер; hasMore — есть следующая. Продолжайте выгрузку, пока hasMore равно true. Алгоритм синхронизации

GET

/api/v1/orders

Сводка заказов и состав

Возвращает сводки обычных заказов и мгновенных кассовых продаж со строками состава. Персональные данные клиентов, история платежей и чеки не входят в ответ. Разрешение: orders:read.

Разрешение: orders:read

Параметры запроса

ПараметрТип и значениеПравило
page

query

integer

По умолчанию: 1

Номер страницы. По умолчанию 1; предел 10000.
limit

query

integer

По умолчанию: 50

Объектов на странице: 1–100, по умолчанию 50.
updatedAfter

query

string · date-timeИзменения с указанного момента ВКЛЮЧИТЕЛЬНО. ISO 8601 с часовым поясом; знак + кодируйте как %2B.
locationId

query

string · uuidID активной точки. Если ключ закреплён за точкой, нельзя выбрать другую. Для /stock нужен, если у ключа нет своей точки. В /recipes не означает наличие на точке.

Запрос

curl --fail-with-body --get 'https://bloomhub.ru/api/v1/orders?page=1&limit=50&locationId=00000000-0000-4000-8000-000000000003' \
  --header "Authorization: Bearer $BLOOMHUB_API_KEY" \
  --header 'Accept: application/json'

Успешный ответ · 200 OK

Ответ /orders
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000009",
      "orderNumber": "0042-A",
      "status": "NEW",
      "totalAmount": 1500,
      "paidAmount": 500,
      "isPosSale": false,
      "locationId": "00000000-0000-4000-8000-000000000003",
      "deliveryDate": "2026-10-22T05:00:00Z",
      "createdAt": "2026-10-21T03:00:00Z",
      "updatedAt": "2026-10-21T03:00:00Z",
      "items": [
        {
          "id": "00000000-0000-4000-8000-000000000013",
          "productId": "00000000-0000-4000-8000-000000000005",
          "recipeId": null,
          "variantId": null,
          "name": "Учебная роза",
          "quantity": 3,
          "unitPrice": 100,
          "total": 300
        },
        {
          "id": "00000000-0000-4000-8000-000000000014",
          "productId": null,
          "recipeId": "00000000-0000-4000-8000-000000000008",
          "variantId": null,
          "name": "Учебный букет",
          "quantity": 1,
          "unitPrice": 1200,
          "total": 1200
        }
      ]
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 50,
    "hasMore": false
  }
}

Учебный пример. ID, суммы и названия показаны для иллюстрации.

Поля items[]

ПолеТипОписание
idstring · uuidУстойчивый ID объекта. Сохраняйте его как строку; названия и короткие номера не заменяют ID.
orderNumberstring | nullКороткий номер для человека. Может отсутствовать или повторяться со временем; ключом интеграции служит id.
statusstringТекущее состояние заказа. Значение — строка; обрабатывайте также незнакомые состояния. Оно не подтверждает фискализацию.
totalAmountnumberИтоговая сумма заказа в валюте магазина. Используйте её, а не самостоятельную сумму строк: итог может учитывать скидки и доставку.
paidAmountnumberЗаписанная в CRM сумма оплат. Это не подтверждение печати чека или статуса ОФД.
isPosSalebooleantrue — мгновенная продажа через кассу; false — заказ на исполнение.
locationIdstring · uuid | nullID точки. null означает отсутствие ограничения/привязки, где это допускает объект.
deliveryDatestring · date-time | nullВремя получения/доставки с часовым поясом либо null.
createdAtstring · date-timeМомент создания в ISO 8601.
updatedAtstring · date-timeМомент последнего изменения объекта в ISO 8601 с часовым поясом.
itemsOrderItem[]Строки состава заказа. Не включают персональные контакты, банковские реквизиты и себестоимость.
Поля строк состава · items[] внутри заказа
ПолеТипОписание
idstring · uuidУстойчивый ID объекта. Сохраняйте его как строку; названия и короткие номера не заменяют ID.
productIdstring · uuid | nullID товара для связи с /products. Может отсутствовать у учётной позиции.
recipeIdstring · uuid | nullID рецепта для связи с /recipes либо null.
variantIdstring · uuid | nullID варианта либо null. Отдельный справочник вариантов не входит в v1.
namestringНазвание объекта.
quantitynumberКоличество позиции. Возможно дробное значение.
unitPricenumberЦена единицы в основных единицах валюты магазина.
totalnumberСумма строки в основных единицах валюты магазина.

pagination.page — текущая страница; limit — размер; hasMore — есть следующая. Продолжайте выгрузку, пока hasMore равно true. Алгоритм синхронизации

GET

/api/v1/orders/{id}

Один заказ и состав по ID

Возвращает заказ по устойчивому UUID в области ключа. Короткий orderNumber не является идентификатором этого метода. Разрешение: orders:read.

Разрешение: orders:read

Параметры запроса

ПараметрТип и значениеПравило
id

path · обязателен

string · uuidУстойчивый UUID заказа, не короткий номер.
locationId

query

string · uuidID активной точки. Если ключ закреплён за точкой, нельзя выбрать другую. Для /stock нужен, если у ключа нет своей точки. В /recipes не означает наличие на точке.

Запрос

curl --fail-with-body --get 'https://bloomhub.ru/api/v1/orders/00000000-0000-4000-8000-000000000009' \
  --header "Authorization: Bearer $BLOOMHUB_API_KEY" \
  --header 'Accept: application/json'

Успешный ответ · 200 OK

Ответ /orders/{id}
{
  "order": {
    "id": "00000000-0000-4000-8000-000000000009",
    "orderNumber": "0042-A",
    "status": "NEW",
    "totalAmount": 1500,
    "paidAmount": 500,
    "isPosSale": false,
    "locationId": "00000000-0000-4000-8000-000000000003",
    "deliveryDate": "2026-10-22T05:00:00Z",
    "createdAt": "2026-10-21T03:00:00Z",
    "updatedAt": "2026-10-21T03:00:00Z",
    "items": [
      {
        "id": "00000000-0000-4000-8000-000000000013",
        "productId": "00000000-0000-4000-8000-000000000005",
        "recipeId": null,
        "variantId": null,
        "name": "Учебная роза",
        "quantity": 3,
        "unitPrice": 100,
        "total": 300
      },
      {
        "id": "00000000-0000-4000-8000-000000000014",
        "productId": null,
        "recipeId": "00000000-0000-4000-8000-000000000008",
        "variantId": null,
        "name": "Учебный букет",
        "quantity": 1,
        "unitPrice": 1200,
        "total": 1200
      }
    ]
  }
}

Учебный пример. ID, суммы и названия показаны для иллюстрации.

Поля order

ПолеТипОписание
idstring · uuidУстойчивый ID объекта. Сохраняйте его как строку; названия и короткие номера не заменяют ID.
orderNumberstring | nullКороткий номер для человека. Может отсутствовать или повторяться со временем; ключом интеграции служит id.
statusstringТекущее состояние заказа. Значение — строка; обрабатывайте также незнакомые состояния. Оно не подтверждает фискализацию.
totalAmountnumberИтоговая сумма заказа в валюте магазина. Используйте её, а не самостоятельную сумму строк: итог может учитывать скидки и доставку.
paidAmountnumberЗаписанная в CRM сумма оплат. Это не подтверждение печати чека или статуса ОФД.
isPosSalebooleantrue — мгновенная продажа через кассу; false — заказ на исполнение.
locationIdstring · uuid | nullID точки. null означает отсутствие ограничения/привязки, где это допускает объект.
deliveryDatestring · date-time | nullВремя получения/доставки с часовым поясом либо null.
createdAtstring · date-timeМомент создания в ISO 8601.
updatedAtstring · date-timeМомент последнего изменения объекта в ISO 8601 с часовым поясом.
itemsOrderItem[]Строки состава заказа. Не включают персональные контакты, банковские реквизиты и себестоимость.
Поля строк состава · items[] внутри заказа
ПолеТипОписание
idstring · uuidУстойчивый ID объекта. Сохраняйте его как строку; названия и короткие номера не заменяют ID.
productIdstring · uuid | nullID товара для связи с /products. Может отсутствовать у учётной позиции.
recipeIdstring · uuid | nullID рецепта для связи с /recipes либо null.
variantIdstring · uuid | nullID варианта либо null. Отдельный справочник вариантов не входит в v1.
namestringНазвание объекта.
quantitynumberКоличество позиции. Возможно дробное значение.
unitPricenumberЦена единицы в основных единицах валюты магазина.
totalnumberСумма строки в основных единицах валюты магазина.
Справочник методов — BloomHub API v1 | BloomHub