Delect API Lite · для разработчика

Документация

Delect API Lite

Выгружайте актуальные цены и остатки на свой сервер — без ручного скачивания прайсов. Прайс дистрибьютора — одним запросом, формат NDJSON. До покупки доступен тестовый ключ: образцы до 100 строк по всем активным поставщикам. Настройка — в кабинете → «Delect API Lite», здесь — инструкция для разработчика.

Адрес APIhttps://delect.ru
1

Получите ключ

Кабинет → «Delect API Lite»: сгенерируйте тестовый токен. После оплаты выберите поставщиков для полных прайсов. Токен работает с одного сервера — адрес закрепится при первом запросе. Смена сервера — перевыпуск токена; динамический IP — к администратору.

2

Узнайте свой список

GET /api/v1/lite/distributors с токеном: в песочнице — все активные поставщики; в полном режиме — выбранные и доступные по оплате. total_estimate в песочнице равен null, в полном режиме это оценка числа предложений.

3

Скачайте прайсы

На каждого дистрибьютора — GET на /api/v1/lite/export/{дистрибьютор}: его прайс (до 100 строк в песочнице) одним NDJSON-ответом. В конце файла проверьте маркер _eof.

Проверка целостности

Проверка целостности обязательна. Последняя строка выгрузки — маркер {"_eof":true,"count":…}. Перед загрузкой прайса в учёт убедитесь: последняя непустая строка содержит "_eof":true, а count равен числу прочитанных строк-предложений. Маркера нет или число не сошлось — файл оборван: не загружайте его (иначе неполный прайс встанет на место полного и обнулит живой ассортимент), скачайте заново.

Как работает выгрузка
GET /distributors→GET /export/{дистрибьютор}→строки NDJSON→{"_eof":true}
Одно предложение — одна строка JSON; кодировка UTF-8 без BOM; media type application/x-ndjson. Прайс дистрибьютора (образец в песочнице) приходит одним ответом — из одного консистентного снимка каталога.
Лимиты

Песочница: 20 запросов в минуту и 200 в час на аккаунт, дополнительно действует общий лимит IP. В полном режиме частота зависит от тарифа и видна в настройках API; общих потоков выгрузки — до 6. HTTP 429 содержит Retry-After в секундах. Запросы с одного IP делят общий бюджет; не повторяйте запрос без паузы.

Тестовый ключ до покупки

Зарегистрируйтесь, подтвердите почту, укажите ИНН компании в профиле и примите обязательные соглашения. В кабинете → «Delect API Lite» получите токен dlk_live_…. Песочница выдаётся один раз на ИНН и аккаунт и доступна в том числе во время пробного периода тарифа. 14 дней отсчитываются с первого успешного запроса по токену, а не с его создания. Перевыпуск токена срок не продлевает.

Выбирать поставщиков не нужно: доступны все активные поставщики, по каждому — первые 100 строк в порядке offer_id того же отбора (наличие или транзит, цена > 0, без уценки). Если строк меньше — придут все доступные. Заголовок X-Delect-Sample: 100 и поля "sample":true,"sample_limit":100 в _eof означают образец: не подменяйте им полный прайс и не удаляйте отсутствующие в образце товары.

После оплаты тарифа с API тот же токен переходит на полный режим. Выберите оплаченных поставщиков в кабинете. Отдельная проба полных прайсов после оплаты сохраняется; песочница её не расходует и счетов не создаёт. Действующие условия и цены.

Скачать пример NDJSON — пример, значения условные; имена поставщиков и товары вымышлены.

Эндпоинты
МетодURLНазначение
GET/api/v1/lite/distributorsВаши дистрибьюторы и оценка числа предложений
GET/api/v1/lite/export/{distributor}Прайс дистрибьютора (образец в песочнице) одним ответом (NDJSON)
Аутентификация
Передайте токен из настроек Delect API Lite — подойдёт любой из способов ниже.

Authorization Bearer (рекомендуется)

Authorization: Bearer dlk_live_ВАШ_ТОКЕН

Заголовок X-Delect-API-Key

X-Delect-API-Key: dlk_live_ВАШ_ТОКЕН
Условные запросы (ETag / If-None-Match / 304)
Как правило ответ выгрузки несёт заголовок ETag — отпечаток снимка прайса. Сохраните его и в следующем запросе пришлите в заголовке If-None-Match: если прайс не изменился с прошлого раза, сервер ответит 304 Not Modified без тела — экономия трафика и времени на регулярной синхронизации. Если ETag в ответе отсутствует (например, кэш снимка временно недоступен) — просто не присылайте If-None-Match, получите обычный 200 с прайсом. В песочнице при недоступном кэше — 503 sample_unavailable, выдача полного прайса вместо образца исключена.

1. Запомните ETag из ответа

HTTP/1.1 200 OK ETag: W/"a1b2c3d4e5f6a7b8c9d0e1f2" Content-Type: application/x-ndjson

2. Пришлите его в следующем запросе

curl "https://delect.ru/api/v1/lite/export/Поставщик Пример" \ -H "Authorization: Bearer dlk_live_ВАШ_ТОКЕН" \ -H 'If-None-Match: W/"a1b2c3d4e5f6a7b8c9d0e1f2"' \ -o "Поставщик Пример.ndjson"
304 — это не пустой прайс

304 = данные не менялись, используйте прошлый файл. Это НЕ пустой прайс — не обнуляйте ассортимент. Пустое тело при 304 означает «изменений с прошлого запроса нет», а не «товаров нет». Тот же класс аварии, ради которого существует маркер _eof: перезапись каталога пустотой обнулит живой ассортимент. Обновляйте ассортимент только при 200 с валидным маркером _eof.

Поля в ответе
Каждая строка-предложение содержит все поля таблицы — выбора полей нет.
ПолеЧто это
offer_id *Уникальный ID позиции в Delect. Обязателен для синхронизации. Пример: 1847291
updated_at *Время последнего обновления прайса (ISO 8601). Пример: 2026-06-18T14:30:00+00:00
nameНаименование товара у дистрибьютора. Пример: SSD Example 1TB
part_numberАртикул / part number. Пример: EX-SSD-1TB
vendorВендор (производитель) — как в каталоге Delect. Пример: Example
distributorНазвание дистрибьютора. Пример: Поставщик Пример
price_rubЦена в рублях. Пример: 12490.50
price_usdЦена в долларах США. Пример: 135.20
price_currencyВалюта прайса: цена в ней — та, по которой мы работаем с этим поставщиком. Цена в другой валюте, если она есть, обычно наш пересчёт по курсу ЦБ на момент импорта. Пример: USD
stockСкладской остаток: число или текст («+», «мало»). 0 — на складе нет, позиция едет транзитом. Пример: 12
transitТранзит: число или текст, в скобках — срок прибытия в том виде, как его прислал дистрибьютор (единого формата у поставщиков нет). 0 — транзита нет. Пример: много (13.08.2026)
* — служебные поля, всегда в ответе.
В выгрузку попадают предложения со складским наличием, с транзитом или с тем и другим — как в каталоге с включённой колонкой «Транзит». Предложение без наличия и без транзита не попадает. Уценка (некондиция) не выгружается никогда, даже если она есть на складе и видна в каталоге, — поэтому часть предложений каталога в выгрузке отсутствует намеренно. Машиночитаемо отбор назван в ответе: availability = stock_or_transit, price_scope = positive_only.
Цены: price_currency — валюта прайса, цена в ней и есть цена поставщика. Цена в другой валюте, как правило, наш пересчёт по курсу ЦБ на момент импорта: она не пересчитывается между импортами и может отличаться от пересчёта по сегодняшнему курсу. Нужна точность до копейки — берите цену в валюте price_currency и считайте своим курсом. Предложения без цены и с нулевой ценой в выгрузку не попадают: хотя бы одно из полей price_rub / price_usd в каждой строке больше нуля.
Пример: список дистрибьюторов
curl "https://delect.ru/api/v1/lite/distributors" \ -H "Authorization: Bearer dlk_live_ВАШ_ТОКЕН"
Ответ:
{ "distributors": ["Поставщик Пример", "Поставщик Демонстрация"], "availability": "stock_or_transit", "price_scope": "positive_only", "total_estimate": null, "sample": true, "sample_limit": 100 }
distributors — в песочнице — все активные поставщики, в полном режиме — выбранные в кабинете; total_estimate — оценка суммарного числа предложений по всем ним.
Пример: выгрузка прайса
curl "https://delect.ru/api/v1/lite/export/Поставщик Пример" \ -H "Authorization: Bearer dlk_live_ВАШ_ТОКЕН" \ -o "Поставщик Пример.ndjson"
Имя дистрибьютора в URL — ровно как в списке из /api/v1/lite/distributors; URL-кодирование кириллицы выполняет ваш HTTP-клиент, просто передавайте URL в кавычках.
Пример ответа NDJSON
{"offer_id":1847001,"updated_at":"2026-07-16T12:00:00+00:00","name":"SSD Example 1TB","part_number":"EX-SSD-1TB","vendor":"Example","distributor":"Поставщик Пример","price_rub":12490.5,"price_usd":158.11,"price_currency":"RUB","stock":12,"transit":0} {"offer_id":1847002,"updated_at":"2026-07-16T12:00:00+00:00","name":"SSD Example 2TB","part_number":"EX-SSD-2TB","vendor":"Example","distributor":"Поставщик Пример","price_rub":21990.0,"price_usd":278.35,"price_currency":"USD","stock":0,"transit":"много (13.08.2026)"} {"_eof":true,"count":2,"distributor":"Поставщик Пример","availability":"stock_or_transit","price_scope":"positive_only","generated_at":"2026-07-16T21:00:00+00:00","sample":true,"sample_limit":100}
Каждая строка — самостоятельный JSON-объект (не массив). Последняя строка — маркер _eof: здесь count: 2 совпадает с числом строк-предложений — образец получен целиком, но это не весь прайс поставщика. При sample: true нельзя заменять им полный ассортимент.
Что делать при 429
429 — не ошибка интеграции, а сигнал «подождите»: превышена частота запросов или заняты все 6 слотов одновременной отдачи. В ответе есть заголовок Retry-After — число секунд (для занятых слотов — 5). Правильный ретрай: подождать указанное время и повторить тот же запрос. Не повторяйте запросы в цикле без паузы.
Рекомендации для 1С
  • Скачивайте сразу в файл: Соединение.Получить(Запрос, ИмяФайла) — прайс на десятки мегабайт не должен попадать в строку в памяти.
  • Читайте построчно: ЧтениеТекста с явной КодировкаТекста.UTF8; каждую строку разбирайте ПрочитатьJSON.
  • Последняя строка — маркер _eof: проверьте "_eof":true и что count совпал с числом прочитанных предложений. Не совпало — файл оборван: не загружайте его, скачайте заново.
  • Таймаут соединения задайте явно — 300 секунд: большой прайс по медленному каналу качается дольше таймаута по умолчанию.
  • Экономьте трафик: сохраняйте ETag и шлите If-None-Match. Ответ 304 — прайс не менялся, оставьте прошлый файл; не воспринимайте 304 как пустой прайс.
  • Получили 429 — подождите Retry-After секунд и повторите запрос.
Если что-то пошло не так
КодЧто делать
304Не ошибка. Прайс не изменился с вашего прошлого запроса (вы прислали If-None-Match). Тело пустое — используйте ранее скачанный файл. Не трактуйте 304 как пустой прайс и не обнуляйте ассортимент.
402 sample_expiredПесочница закончилась. Выберите тариф; токен менять не нужно.
403 sample_revokedПесочница отозвана администратором.
503 sample_unavailableОбразец временно недоступен; повторите через Retry-After секунд.
402 access_expiredСрок выданного доступа закончился. Выберите тариф; токен менять не нужно.
402 api_lite_trial_expiredОтдельная проба полных прайсов закончилась; оплатите поставщиков в кабинете.
401Токен неверен или отозван, API выключен во вкладке «Настройки» или доступ снят администратором. Проверьте токен и статус API.
403Запрос с сервера, не закреплённого за токеном (токен привязан к другому IP). Сменили сервер — перегенерируйте токен в кабинете: привязка сбросится и закрепится за новым сервером при первом запросе. Либо не приняты обязательные юридические документы в кабинете.
404unknown_distributor — поставщика нет в доступном списке. Возьмите имя из /api/v1/lite/distributors и подставьте в URL без изменений.
429Превышена частота запросов или заняты все слоты одновременной отдачи. Подождите Retry-After секунд (заголовок ответа) и повторите запрос.
429 auth_throttledСлишком много неудачных попыток авторизации с одного IP (порог ~30/мин). Подождите указанное в Retry-After время (60 с) и проверьте правильность токена.