Call-центр: +7 (499) 500 00 01

Сервис: +7 (495) 447-36-45

Корзина

Кол-во товаров:0
Общая сумма:0

API каталога: выгрузка прайса с остатками

Автоматическая выгрузка вашего прайс-листа: розничная цена, ваша дилерская цена по индивидуальному соглашению и остатки по 10 складам. Один HTTP-запрос — и у вас всегда актуальные данные в учётной системе, на сайте или в Excel.

Обновление1 раз в сутки в 11:00 МСК
ФорматыJSON · CSV (Excel) · XML
Доступпо персональному API-ключу

Быстрый старт

  1. Получите API-ключ

    Ключ выдаёт ваш менеджер Терморос. Он персональный: по нему API определяет вашу компанию и считает цены по вашему соглашению. Не публикуйте ключ; при утечке менеджер отзовёт его и выдаст новый.

  2. Сделайте первый запрос

    bash
    curl -H "X-Api-Key: ВАШ_КЛЮЧ" \
      "https://www.termoros.com/api/v1/catalog/?format=json"

    Если система не умеет передавать заголовки (Excel, 1С, браузер), передайте ключ параметром:

    URL
    https://www.termoros.com/api/v1/catalog/?api_key=ВАШ_КЛЮЧ&format=csv
  3. Настройте ежедневную синхронизацию

    Данные меняются один раз в сутки после ночного обмена с 1С — достаточно одного запроса в день после 11:00 МСК.

Готовая коллекция для Postman

20 запросов со всеми сценариями и автотестами: выгрузки во всех форматах, фильтры, справочники, кэширование по ETag, обработка ошибок. Импортируйте файл в Postman, впишите свой ключ в переменную коллекции partnerApiKey — и запускайте.

Скачать коллекцию Postman

Справочник API

GEThttps://www.termoros.com/api/v1/catalog/

Аутентификация

Заголовок X-Api-Key: <ключ> (рекомендуется) или параметр ?api_key=<ключ>.

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

ПараметрЗначенияПо умолчанию
formatjson — для интеграций · csv — открывается в Excel · xml — для учётных системjson
brandбренды через запятую, например Danfoss,Baxi. Регистр не важен: RIFAR, Rifar и rifar — одно и то же. Точный список — в справочнике брендов (см. ниже)все
typeID разделов каталога через запятую. Раздел выгружается вместе со всеми вложенными — ID берутся из справочника разделов (см. ниже)все
storeID складов через запятую (таблица ниже). Влияет только на остатки: номенклатура выгружается всявсе
in_stock1 — оставить только позиции с остатком больше нуля (по складам из store, а без него — по любому)0

Склады

IDГородIDГород
1Москва6Санкт-Петербург
2Екатеринбург7Уфа
3Казань8Ростов-на-Дону
4Краснодар9Пятигорск
5Новосибирск10Нижний Новгород

Разделы каталога

Чтобы выгрузить один раздел, нужен его ID. Полный справочник отдаёт отдельный эндпоинт — по тому же ключу:

GEThttps://www.termoros.com/api/v1/catalog/sections/

Поддерживает те же форматы: ?format=json (по умолчанию), csv, xml.

JSON
{
  "meta": {"generated_at": "2026-08-12T22:52:39+03:00", "data_date": "2026-08-12", "sections_count": 205},
  "sections": [
    {
      "id": 1869,
      "name": "Краны шаровые",
      "parent_id": 1864,
      "depth": 4,
      "path": "Арматура и трубопроводы / Арматура / Арматура запорная / Краны шаровые",
      "items_count": 1368
    }
  ]
}

items_count — сколько позиций вернёт выгрузка с type=<id> без прочих фильтров (без brand, store, in_stock). path — путь от корня каталога, по нему удобно искать нужный раздел глазами. У корневых разделов parent_id пуст.

bash
# справочник разделов в Excel
curl -H "X-Api-Key: ВАШ_КЛЮЧ" -o sections.csv \
  "https://www.termoros.com/api/v1/catalog/sections/?format=csv"

# выгрузка раздела вместе со всеми вложенными:
# 1862 — «Арматура и трубопроводы», внутри и «Краны шаровые» из примера выше
curl -H "X-Api-Key: ВАШ_КЛЮЧ" \
  "https://www.termoros.com/api/v1/catalog/?type=1862&format=json"

Бренды

Фильтр brand принимает название бренда так, как оно заведено в 1С, но без учёта регистра: RIFAR, Rifar и rifar дадут один и тот же результат. Полный список названий отдаёт отдельный эндпоинт — по тому же ключу:

GEThttps://www.termoros.com/api/v1/catalog/brands/

Форматы те же: ?format=json (по умолчанию), csv, xml.

JSON
{
  "meta": {
    "generated_at": "2026-08-12T22:52:39+03:00",
    "data_date": "2026-08-12",
    "brands_count": 81,
    "items_without_brand": 34
  },
  "brands": [
    {"name": "Rifar", "items_count": 11423},
    {"name": "Gekon", "items_count": 9758}
  ]
}

items_count — сколько позиций вернёт выгрузка с brand=<название> без прочих фильтров. items_without_brand — позиции, у которых бренд в 1С не заполнен: они попадают в общую выгрузку, но никаким значением brand не выбираются.

bash
# список брендов в Excel
curl -H "X-Api-Key: ВАШ_КЛЮЧ" -o brands.csv \
  "https://www.termoros.com/api/v1/catalog/brands/?format=csv"

Пример ответа

JSON
{
  "meta": {
    "generated_at": "2026-08-12T22:52:39+03:00",
    "data_date": "2026-08-12",
    "partner": "Ваша компания",
    "currency": "RUB",
    "items_count": 36226
  },
  "items": [
    {
      "id": 255118,
      "xml_id": "92760dc3-7478-11ed-a2e5-3cecef424a55",
      "article": "KW.WFHT-08/W",
      "name": "Термостат проводной комнатный Kromwell, белый, 230В",
      "brand": "Kromwell",
      "product_type": "Термостаты комнатные",
      "type_id": 1857,
      "unit": "шт",
      "url": "https://www.termoros.com/product/termostat_provodnoy_komnatnyy_kromwell_belyy_230v/",
      "photos": [
        "https://www.termoros.com/upload/iblock/477/grgp3vy0pkqy56fchf06w8k59bagxe88.jpg",
        "https://www.termoros.com/upload/iblock/adb/toqamgfw7ki5rh0q6436w7y3d3az43r9.png"
      ],
      "price_retail": 3940.00,
      "price_partner": 3349.00,
      "discount_percent": 15,
      "stocks": {"Москва": 32, "Екатеринбург": 16, "Казань": 12}
    }
  ]
}

Поля позиции

ПолеОписание
articleартикул
xml_idидентификатор номенклатуры в 1С (GUID)
name, brand, product_type, unitнаименование, бренд, вид продукции, единица измерения
type_idID раздела каталога — то же значение, что принимает фильтр type. В CSV это колонка «Раздел ID»
urlкарточка товара на termoros.com
photosфотографии товара: первой идёт главная, затем снимки галереи. У товара без изображений список пуст. В CSV это последняя колонка «Фотографии», ссылки перечислены через запятую; если фотографий нет, ячейка пустая
price_retailрозничная цена, без округления
price_partnerваша цена по соглашению (= розничная − ваша скидка)
discount_percentваша скидка на товар, %
stocksсвободные остатки: город → количество (только выбранные склады). Товар, уже отложенный в резерв под заказы, из этого числа исключён — оно совпадает с остатком на карточке товара

CSV приходит в UTF-8 c BOM и разделителем «;» — открывается в Excel двойным кликом, остатки разложены колонками по городам. Ссылки на фотографии лежат в последней колонке «Фотографии» через запятую. XML — плоская структура <catalog><item>… с теми же полями.

Кавычки и другие спецсимволы в наименованиях

В названиях товаров встречаются кавычки (1/2"), амперсанды и угловые скобки. Каждый формат экранирует их по своим правилам, поэтому в сыром файле один и тот же текст выглядит по-разному:

JSON — "Термостат погружной 1/2\", L=50 мм" · CSV — поле берётся в кавычки, а внутренняя кавычка удваивается: "Термостат погружной 1/2"", L=50 мм" · XML — &lt; и &amp; вместо < и &.

Это не порча данных: любой стандартный парсер (Excel, json_decode, XML-библиотека) вернёт исходную строку. Ручной разбор «по запятой» или «по кавычке» такие названия сломает — используйте парсер формата.

Ещё примеры

bash
# прайс по двум брендам сразу в Excel-файл
curl -H "X-Api-Key: ВАШ_КЛЮЧ" -o price.csv \
  "https://www.termoros.com/api/v1/catalog/?format=csv&brand=Danfoss,Baxi"

# остатки только по Москве и Санкт-Петербургу, XML
curl -H "X-Api-Key: ВАШ_КЛЮЧ" \
  "https://www.termoros.com/api/v1/catalog/?store=1,6&format=xml"

Совет: кэшируйте по ETag

Сохраните заголовок ETag из ответа и передавайте его в следующем запросе в заголовке If-None-Match. Если данные не менялись, придёт короткий ответ 304 Not Modified без тела — вы не качаете мегабайты зря, а выгрузка обновится ровно тогда, когда обновятся данные.

Если ваш клиент не умеет работать с ETag, тот же результат даёт заголовок If-Modified-Since со значением Last-Modified из прошлого ответа. Оба заголовка относятся к конкретному URL с конкретным набором фильтров: если вы храните одно общее значение «last sync» и подставляете его в запросы с разными brand/type/store/in_stock, на новом сочетании фильтров получите пустой 304 вместо данных — сохраняйте значение отдельно для каждого набора параметров.

Что попадает в выгрузку

Активные товары каталога, у которых есть цена в прайсе 1С. Позиции без цены не выгружаются — это прайс-лист, а не полный номенклатурный справочник, поэтому число позиций в выгрузке меньше числа карточек на сайте.

data_date — дата, на которую собраны данные. Снапшот пересобирается раз в сутки, в 11:00 МСК, после ночного обмена с 1С; до этого времени выгрузка отдаёт вчерашние данные и data_date честно показывает вчерашнюю дату.

Ошибки

Любая ошибка — это JSON {"error": {"code", "message"}} с корректным HTTP-статусом:

HTTPКодЧто делать
401unauthorizedключ не передан, неверный или отозван — обратитесь к менеджеру
400bad_format / bad_filterневерный формат или фильтры; в details указано, что именно исправить
503snapshot_not_readyданные ещё готовятся — повторите запрос позже

Вопросы по интеграции вы можете направить вашему менеджеру «Терморос».