REST API и вебхуки
Для подключения сайта, 1С, Telegram-бота или другой программы. Настройки → API и вебхуки. Тарифы Бизнес и Корпоративный.
Токен
- Создать токен → название и доступ: Только чтение или Чтение и запись.
- Токен (
sk_live_…) показывается один раз — скопируйте и храните надёжно. - Если не нужен — Отозвать: программа с ним сразу перестанет работать.
Токен работает от имени создавшего сотрудника и не может иметь прав больше, чем у него.
Запросы
Адрес: 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));
}