Для разработчиков
ГлавБух принимает данные из любой системы через публичный API: детерминированный импорт операций, чтение журнала и документов, вебхуки о событиях. Ключи выпускаются в кабинете: Настройки → «API и интеграции» (нужен аккаунт — вход/регистрация).
Формат импорта: glavbuh-import/v1
JSON-файл с операциями и контрольными суммами. Схема glavbuh-import/v1 — постоянный синоним papacore-export/v1: принимаются оба значения, файл разбирается детерминированно (без ИИ). Суммы — целые в минорных единицах валюты дела (тиыны/копейки), externalId — ключ идемпотентности: повторный импорт той же записи — no-op. Контрольные суммы totals пересчитываются; расхождение = отказ файла целиком.
{
"schema": "glavbuh-import/v1",
"source": { "system": "my-crm", "exportedAt": "2026-07-17T03:00:00Z" },
"period": { "from": "2026-07-01", "to": "2026-07-31" },
"externalCaseRef": "shop-42",
"entries": [
{
"externalId": "op-1001",
"date": "2026-07-03",
"amountTiyn": 12500000,
"direction": "IN",
"party": "ТОО Ромашка",
"partyBin": "111222333444",
"purpose": "Оплата по счёту №14",
"categories": ["продажи"]
}
],
"totals": { "entriesCount": 1, "sumInTiyn": 12500000, "sumOutTiyn": 0 }
}Дело указывается параметром ?caseId= или полем externalCaseRef — оно сматчится с реквизитом дела meta.externalCaseRef (задаётся при настройке обмена). Необязательный блок payroll (начисления зарплаты) — как в экспорте PapaCore.
Импорт
curl -X POST "https://glavbuh.vercel.app/api/v1/import?caseId=ВАШ_CASE_ID" \ -H "Authorization: Bearer gbk_ВАШ_КЛЮЧ" \ -H "Content-Type: application/json" \ --data-binary @export.glavbuh.json
Ответ: { "accepted": true, "counts": { "inserted": 1, "skippedDuplicates": 0, ... } } или { "accepted": false, "reasons": [...] }. Файл сохраняется как источник — каждая операция в журнале ведёт к нему (трассировка).
Чтение
curl "https://glavbuh.vercel.app/api/v1/facts?caseId=ВАШ_CASE_ID&from=2026-07-01&to=2026-07-31" \ -H "Authorization: Bearer gbk_ВАШ_КЛЮЧ"
GET /api/v1/facts?caseId=&from=&to=&limit=&offset= — журнал (по умолчанию подтверждённые; суммы — строки в минорных единицах). GET /api/v1/documents?caseId= — метаданные сгенерированных документов. Нужен ключ со scope read.
Webhooks
События: document.generated, facts.confirmed, deadline.upcoming. Настраиваются там же, в «API и интеграции». Тело — JSON { event, createdAt, data }; подпись — HMAC-SHA256 от точных байтов тела в заголовке X-Glavbuh-Signature: sha256=<hex>. Доставка — до 3 попыток с бэкоффом; лог последних доставок виден в настройках.
// Node.js: проверка подписи вебхука
const crypto = require("node:crypto");
const expected = "sha256=" + crypto.createHmac("sha256", SECRET).update(rawBody, "utf8").digest("hex");
const ok = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers["x-glavbuh-signature"]));Лимиты
- импорт — 20 запросов в минуту на ключ, файл до 15 МБ;
- чтение — 60 запросов в минуту на ключ, страницы до 500 фактов;
- ключ можно отозвать в любой момент — он гаснет немедленно.
Нужна готовая интеграция?
Готовые коннекторы подключаем по спросу. Напиши, какая интеграция нужна — это честный счётчик: что наберёт голосов, то и сделаем первым.