Sklado API для розробників
Повноцінний REST API + webhooks. Інтегруйте Sklado з вашим сайтом, ERP, CRM, мобільним додатком — будь-чим.
📚 OpenAPI 3.1 специфікація
Інтерактивна документація з усіма ендпойнтами, схемами запитів і спробою «в живу»:
Відкрити Swagger UI →JSON-spec доступна на https://api.sklado.com.ua/api/docs-json — для імпорту в Postman / Insomnia / OpenAPI Generator.
1. Отримати API-токен
Зайдіть у Налаштування → API-токени → «Створити». Токен показується лише раз — збережіть його у password manager. Можна обмежити токен скоупами (тільки read-only або лише products), задати TTL (термін дії) і відкликати у будь-який момент.
Передавайте токен у HTTP-заголовку:
Authorization: Bearer sklado_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx2. Приклади запитів
Список товарів
curl 'https://api.sklado.com.ua/api/v1/products?limit=20' \
-H 'Authorization: Bearer sklado_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'Створити контрагента (нове ТОВ)
curl 'https://api.sklado.com.ua/api/v1/counterparties' \
-X POST \
-H 'Authorization: Bearer sklado_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
-H 'Content-Type: application/json; charset=utf-8' \
-d '{
"name": "ТОВ \"Ромашка\"",
"kind": "LEGAL",
"edrpou": "12345678",
"phone": "+380501234567"
}'Усі тіла запитів і відповідей — JSON у UTF-8. Пагінація: query-параметри limit і offset. Відповідь: { data: [...], total, limit, offset }.
3. Скоупи (права токена)
При створенні токена можна обмежити його скоупами. Без обмежень — токен має всі права юзера, що його створив.
products.read / products.writeКаталог: товари, варіанти, групи
counterparties.read / counterparties.writeКлієнти і постачальники
warehouses.read / warehouses.writeСклади
organizations.read / organizations.writeЮр.особи (ФОП / ТОВ)
documents.read / documents.writeДокументи (рахунки, накладні, ордери)
payments.read / payments.writeПлатежі (вхідні / вихідні)
stock.readЗалишки на складах
settings.read / settings.writeWebhooks, токени, налаштування
4. Webhooks
Sklado шле POST-запити на ваш URL у відповідь на події. Створіть webhook у Налаштування → Webhooks. При створенні ви отримаєте secret (показується раз) — він використовується для перевірки підпису.
Підтримувані події
document.createdСтворено новий документ (будь-якого типу)
document.postedДокумент проведено (рух залишків / податків зафіксовано)
document.unpostedДокумент розпроведено (повернуто у draft)
document.deletedДокумент видалено (soft-delete)
payment.receivedЗареєстровано вхідний платіж
product.createdДодано новий товар
counterparty.createdДодано нового контрагента
low_stockЗалишок товару впав до або нижче minStock
Приклад payload
{
"event": "document.posted",
"tenantId": "01HXXXXXXXXXXXXXXXXXXXXXXX",
"timestamp": "2026-04-28T10:15:00.000Z",
"data": {
"id": "doc-uuid",
"number": "INV-2026-00042",
"type": "INVOICE_OUT",
"totalAmount": 12450.00,
"currency": "UAH"
}
}Заголовки запиту, який вам прийде
Content-Type: application/jsonX-Sklado-Signature: <hmac-sha256(body, secret)>User-Agent: Sklado-Webhook/1.0
Timeout: 10 секунд. Після 10 поспіль невдалих доставок webhook автоматично деактивується — і ви побачите його у /settings/webhooks з помилкою. Можна знов увімкнути після фіксу.
Перевірка підпису — Node.js / Express
import { createHmac, timingSafeEqual } from 'crypto';
// Express middleware for verifying Sklado webhook signatures.
// Save the secret you got when creating the webhook (returned ONCE).
const SKLADO_SECRET = process.env.SKLADO_WEBHOOK_SECRET!;
export function verifySkladoSignature(req, res, next) {
const sig = req.header('X-Sklado-Signature');
if (!sig) return res.status(401).send('missing signature');
const expected = createHmac('sha256', SKLADO_SECRET)
.update(JSON.stringify(req.body))
.digest('hex');
// timingSafeEqual prevents timing attacks
const a = Buffer.from(sig, 'hex');
const b = Buffer.from(expected, 'hex');
if (a.length !== b.length || !timingSafeEqual(a, b)) {
return res.status(401).send('invalid signature');
}
next();
}Перевірка підпису — Python / Flask
import hmac, hashlib, json
SKLADO_SECRET = b"<webhook secret from Sklado>"
def verify_sklado_signature(body: bytes, signature_header: str) -> bool:
expected = hmac.new(SKLADO_SECRET, body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, signature_header or "")
# Flask example
# @app.post("/sklado/webhook")
# def sklado_webhook():
# if not verify_sklado_signature(request.get_data(), request.headers.get("X-Sklado-Signature")):
# abort(401)
# event = request.json
# ...5. Rate limits / ліміти
Поточний ліміт: 60 запитів на хвилину на токен. У разі перевищення повертаємо 429 Too Many Requests. Якщо ваша інтеграція потребує більше — напишіть на sklado.com.ua@gmail.com.
6. Підтримка
Знайшли баг, маєте feature-request, або щось не виходить? Пишіть: sklado.com.ua@gmail.com. Відповідаємо якнайшвидше.