Skip to content

REST API и вебхуки ​

Для подключения сайта, 1С, Telegram-бота или другой программы. Настройки → API и вебхуки. Тарифы Бизнес и Корпоративный.

Токен ​

  1. Создать токен → название и доступ: Только чтение или Чтение и запись.
  2. Токен (sk_live_…) показывается один раз — скопируйте и храните надёжно.
  3. Если не нужен — Отозвать: программа с ним сразу перестанет работать.

Токен работает от имени создавшего сотрудника и не может иметь прав больше, чем у него.

Запросы ​

Адрес: https://api.sklat.uz/api/v1. В каждом запросе заголовок:

bash
curl https://api.sklat.uz/api/v1/products?search=мука \
  -H "Authorization: Bearer sk_live_..."
МетодПутьЧто
GET/products?search=&folderId=&limit=&offset=&stockStoreId=allТовары (с остатком)
GET / POST / PUT/products/{id}, /productsЧтение, создание, изменение товара
GET/products/by-barcode/{штрихкод}Товар по штрихкоду
GET / POST / PUT/counterparties, /counterparties/{id}Контрагенты
GET/documents?type=demand&limit=&offset=Список документов
GET / POST / PUT/documents/{id}, /documentsЧтение, создание ("post": true — с проведением)
POST/documents/{id}/post, /documents/{id}/unpostПровести / отменить
GET/reports/stock?storeId=Остатки
GET/stores, /uoms, /price-types, /organizationsСправочники
  • Списки: { "rows": [...], "meta": { "size", "limit", "offset" } }; limit — по умолчанию 100, не больше 1000.
  • Суммы в тийинах (целое): 12 500 сум = 1250000. Количество — строка: "2.5".
  • Ошибки: { "errors": [{ "code", "message", "field" }] } — 401 неверный токен, 403 нет прав, 422 ошибка данных, 409 не хватает остатка, 429 слишком много запросов.
  • Лимит: 600 запросов в минуту на токен.

Пример создания отгрузки с проведением:

bash
curl -X POST https://api.sklat.uz/api/v1/documents \
  -H "Authorization: Bearer sk_live_..." -H "Content-Type: application/json" \
  -d '{"type":"demand","storeId":"…","counterpartyId":"…","post":true,
       "positions":[{"productId":"…","qty":"2","price":1500000}]}'

Вебхуки ​

Sklat отправляет POST на ваш адрес при изменениях: документ создан / изменён / проведён / отменён / удалён, товар и контрагент созданы / изменены.

json
{ "event": "document.posted", "occurredAt": "2026-10-13T09:00:00.000Z", "data": { "type": "document", "id": "…" } }

В сообщении только что изменилось — полные данные получайте через API (GET /documents/{id}).

  • Ответ 2xx — доставлено. Иначе повтор через 1 мин, 5 мин, 30 мин, 2 ч, 12 ч; затем «Ошибка».
  • Кнопка Журнал — статус последних 50 запросов; Тестовый запрос — ping.
  • Адрес не может указывать во внутреннюю сеть (localhost, 192.168.x.x…).

Проверка подписи ​

В каждом запросе X-Sklat-Signature: t=<время>,v1=<подпись>. Подпись = HMAC-SHA256(secret, "<время>.<тело запроса>"):

js
import { createHmac, timingSafeEqual } from 'node:crypto';

function verify(rawBody, header, secret) {
  const [, t, v1] = header.match(/^t=(\d+),v1=([0-9a-f]+)$/);
  if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false; // старше 5 минут
  const expected = createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
  return timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}