API та вебхуки
Під’єднайте vporiadku до своєї системи
REST API для рахунків та інших документів, платежів, клієнтів, каталогу, витрат і отриманих е-фактур, і вебхуки, які повідомлять вас, коли щось станеться. Ключі з точними дозволами, OAuth 2.0 для застосунків, що обслуговують багатьох клієнтів, безпечне повторення запитів і довідник OpenAPI 3.1.
Що вміє API
Кожен запит проходить через ті самі правила, що й застосунок: серії нумерації, перевірку ставок ПДВ, ліміти тарифу та журнал аудиту. API є ще одним входом до продукту, а не його другою копією.
Рахунки та документи
Список із фільтрами за типом, статусом, клієнтом, датами, мітками та часом зміни, деталі, PDF, ISDOC і UBL, створення, копіювання, редагування, виставлення, надсилання електронною поштою, нагадування про оплату, кредит-нота (dobropis) і сторнування.
Платежі
Оплати документа: список, реєстрація, оплата решти суми одним викликом і видалення. Статус документа перераховується сам.
Клієнти
Довідник покупців: пошук за назвою, IČO, DIČ або електронною поштою, зміни з певного моменту, деталі, створення з перевіркою на дублікати, редагування та видалення.
Каталог
Позиції та послуги каталогу: фільтрування, сортування, створення, редагування та видалення. Входить до тарифу Profi.
Витрати
Отримані документи: список із фільтрами за статусом, категорією, періодом і часом зміни, проведення, редагування та видалення. Входить до тарифу Profi.
Отримані е-фактури
Скринька отриманих е-фактур: список, деталі з рядками та розбивкою ПДВ і архівований оригінал UBL. Читання через API нічого не позначає як прочитане.
Періодичні рахунки
Розклади періодичних рахунків та їхні останні запуски (лише для читання).
Профілі компаній
Компанії, від імені яких робочий простір виставляє документи, з позначкою компанії за замовчуванням (лише для читання).
Банківські рахунки
Банківські рахунки для оплати документів, з позначкою основного (лише для читання).
Вебхуки
Події, які vporiadku надсилає на вашу адресу: виставлення, оплата, нова витрата, отримана е-фактура тощо. Підписані HMAC-SHA256; керувати ними можна в застосунку або через API.
Партнерські застосунки
OAuth 2.0 із PKCE: клієнти під’єднують ваш застосунок одним кліком, а ви отримуєте токен для кожного робочого простору саме з тими дозволами, які вони схвалили.
Швидкий старт
Базова адреса API: https://api.vporiadku.sk/api/v1. Відповіді надходять у JSON, суми передаються десятковими числами у валюті документа, дати у форматі YYYY-MM-DD.
Крок 1
Увімкніть модуль Firma
Публічний API входить до додаткового модуля Firma для тарифу Profi. Без нього API відповідає кодом 403.
Крок 2
Створіть ключ
У розділі Налаштування → API власник або адміністратор створює ключ і вибирає для нього дозволи. Повний ключ показується лише один раз.
Крок 3
Надішліть перший запит
Ping перевіряє ключ і повертає його дозволи. Зберігайте ключ у змінній середовища й ніколи не зберігайте його в коді.
Крок 4
Продовжуйте в довіднику
Кожне поле кожного запиту й відповіді описано в довіднику OpenAPI 3.1, з якого ви також можете згенерувати клієнт.
curl https://api.vporiadku.sk/api/v1/ping \
-H "Authorization: Bearer $VPORIADKU_API_KEY"Автентифікація ключем
Надсилайте API-ключ в одному з двох заголовків, або, якщо запит іде від партнерського застосунку, токен доступу OAuth. Ключі починаються з fak_, а токени доступу з vpa_.
Authorization: Bearer fak_…
X-API-Key: fak_…
Authorization: Bearer vpa_…- Повний ключ показується лише під час створення; ми зберігаємо тільки його відбиток SHA-256. Втрачений ключ не відновлюється. Відкличте його та створіть новий.
- Ключ або токен доступу діє як власник свого робочого простору й ніколи не має доступу до іншого.
- API призначений для комунікації сервер-сервер. Ключу не місце в браузері чи мобільному застосунку: хто його побачить, той зможе ним скористатися.
- Ключ можна відкликати одним кліком у розділі Налаштування → API; наступний запит із ним отримає 401.
- Застосунок, який обслуговує багатьох клієнтів vporiadku, не збирає їхніх ключів: він під’єднується через OAuth 2.0 (про це в наступному розділі).
Партнерські застосунки (OAuth 2.0)
Створюєте інтеграцію для багатьох клієнтів vporiadku: платформу інтернет-магазинів, бухгалтерську програму, CRM? Зареєструйте її один раз як застосунок. Кожен клієнт під’єднає його одним кліком на екрані згоди, а ваш сервер отримає токен доступу для кожного робочого простору саме з тими дозволами, які схвалив цей клієнт. Стандартний потік із кодом авторизації (authorization code) та PKCE, ті самі дозволи, що й для API-ключів.
- 1
Зареєструйте застосунок
У розділі Налаштування → API → Застосунки: назва й вебсайт, які побачать клієнти, ваші адреси перенаправлення та максимум того, що застосунок може запитувати. Ви отримаєте client_id і client_secret; секрет показується лише один раз. Робочий простір може зареєструвати до 10 застосунків, і платний тариф для цього не потрібен.
- 2
Перенаправте клієнта на екран згоди
З response_type=code, вашим client_id, зареєстрованою адресою redirect_uri, потрібними дозволами (scope), параметром state і PKCE code_challenge (S256). Клієнт входить, вибирає робочий простір і схвалює доступ, або скасовує, і тоді ви отримаєте error=access_denied. Робочому простору потрібен модуль Firma, а схвалити може лише його власник або адміністратор.
- 3
Обміняйте код на токени
Код повертається на вашу адресу перенаправлення разом із вашим state. Протягом 10 хвилин обміняйте його на кінцевій точці токенів, передавши секрет застосунку та code_verifier. Ви отримаєте токен доступу, токен оновлення, надані дозволи (scope) і workspace_id.
- 4
Викликайте API
Надсилайте токен доступу в заголовку Authorization: Bearer у кожному запиті до /api/v1. Він дійсний 60 хвилин; ping покаже робочий простір і дозволи, які має токен.
- 5
Оновіть токен до завершення терміну дії
grant_type=refresh_token повертає нову пару токенів, а старий токен оновлення стає використаним. Токен оновлення діє 365 днів від видачі; якщо використаний токен пред’явити ще раз пізніше ніж через 30 секунд, буде відкликано весь ланцюжок.
- 6
Від’єднання
Відкличте токен на кінцевій точці відкликання (RFC 7009); відкликання останнього токена оновлення від’єднує застосунок від робочого простору. Клієнт теж може будь-коли від’єднати ваш застосунок. Тоді на його токени API відповідатиме 401.
Зареєструвати застосунок у розділі Налаштування → API → Застосунки →
Кінцеві точки
- Екран згоди
https://vporiadku.sk/oauth/authorize- Кінцева точка токенів
https://api.vporiadku.sk/api/oauth/token- Кінцева точка відкликання
https://api.vporiadku.sk/api/oauth/revoke
- Обов’язкові PKCE з S256 і параметр redirect_uri, що точно збігається із зареєстрованою адресою: https або http лише на localhost.
- Кожен застосунок є конфіденційним клієнтом OAuth: кінцева точка токенів вимагає секрет застосунку через HTTP Basic або як client_id і client_secret у формі, але ніколи обома способами одразу. Зберігайте секрет на своєму сервері.
- Дозволи ті самі, що й для API-ключів. На запит поза межами схваленого клієнтом API відповідає 403 API_KEY_SCOPE_MISSING із заголовком WWW-Authenticate: Bearer error="insufficient_scope".
- Ліміт діє окремо для кожного застосунку в кожному робочому просторі: 120 запитів за 60 секунд на кожен робочий простір, до якого під’єднано ваш застосунок; запити з оновленими токенами теж ураховуються.
- Через /webhooks ваш застосунок може зареєструвати до 5 кінцевих точок вебхуків у кожному під’єднаному робочому просторі; вони отримують лише події, дані яких ви можете читати за своїми дозволами, і видаляються, коли клієнт від’єднує застосунок.
- Помилки кінцевої точки токенів відповідають RFC 6749: поля error та error_description; застосунок, який звертається до неї надто часто, отримує 429 temporarily_unavailable із заголовком Retry-After. На прострочений токен доступу API відповідає 401 із WWW-Authenticate: Bearer error="invalid_token". Оновіть токен і повторіть запит.
import { createHash, randomBytes } from 'node:crypto'
const codeVerifier = randomBytes(32).toString('base64url')
const codeChallenge = createHash('sha256').update(codeVerifier).digest('base64url')
const state = randomBytes(16).toString('base64url')
// Keep codeVerifier and state in the user's session until the callback;
// send codeChallenge and state with the user to the consent screen.https://vporiadku.sk/oauth/authorize?response_type=code&client_id=$CLIENT_ID&redirect_uri=https%3A%2F%2Fyour-app.example%2Foauth%2Fcallback&scope=invoices%3Awrite%20clients%3Aread%20webhooks%3Awrite&state=$STATE&code_challenge=$CODE_CHALLENGE&code_challenge_method=S256curl -X POST https://api.vporiadku.sk/api/oauth/token \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d grant_type=authorization_code \
-d code="$CODE" \
-d redirect_uri=https://your-app.example/oauth/callback \
-d code_verifier="$CODE_VERIFIER"curl -X POST https://api.vporiadku.sk/api/oauth/token \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d grant_type=refresh_token \
-d refresh_token="$REFRESH_TOKEN"curl -X POST https://api.vporiadku.sk/api/v1/webhooks \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://your-app.example/hooks/vporiadku", "events": ["invoice.paid", "client.created"]}'Дозволи ключа
Кожен ключ може робити лише те, що йому дозволив власник під час створення, а партнерський застосунок лише те, що схвалив клієнт. Інтеграції інтернет-магазину потрібно записувати рахунки, інструменту звітності не потрібно записувати нічого.
| Дозвіл | Що дозволяє |
|---|---|
invoices:read | Читати документи: список, деталі, PDF, ISDOC і UBL. |
invoices:write | Створювати, копіювати, редагувати й видаляти чернетки, виставляти, надсилати електронною поштою, надсилати нагадування про оплату, виставляти кредит-ноти та сторнувати. |
payments:read | Читати платежі, зареєстровані за документами. |
payments:write | Реєструвати платежі, оплачувати решту суми документа та видаляти платежі. |
clients:read | Читати довідник клієнтів. |
clients:write | Створювати, редагувати й видаляти клієнтів. |
items:read | Читати каталог. |
items:write | Створювати, редагувати й видаляти позиції каталогу. |
expenses:read | Читати витрати. |
expenses:write | Проводити, редагувати й видаляти витрати. |
received_invoices:read | Читати отримані е-фактури та їхні оригінали. |
recurring_invoices:read | Читати розклади періодичних рахунків. |
company:read | Читати профілі компаній робочого простору. |
bank_accounts:read | Читати банківські рахунки робочого простору. |
webhooks:read | Читати кінцеві точки вебхуків, якими керує ключ або застосунок. |
webhooks:write | Реєструвати, змінювати, тестувати й видаляти кінцеві точки вебхуків для подій, дані яких можна читати за іншими дозволами. |
- Запис включає читання того самого ресурсу: хто створює рахунок, той отримує його назад у відповіді.
- Операція поза дозволами завершується відповіддю 403 API_KEY_SCOPE_MISSING, а в details.required указано дозвіл, якого бракує. Набір дозволів наявного ключа не змінюється: створіть новий ключ; застосунок натомість просить клієнта схвалити дозволи ще раз.
- Ключі, створені до запровадження дозволів, мають повний доступ (записаний як *), щоб наявні інтеграції працювали й далі.
Ліміти та пагінація
Кожен ключ (а також кожен партнерський застосунок у кожному робочому просторі, до якого його під’єднано) може надіслати 120 запитів за 60 секунд сукупно на всі кінцеві точки. Вікно фіксоване й після завершення повністю поновлюється.
HTTP/1.1 200 OK
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 119
X-RateLimit-Reset: 60- Кожна відповідь містить заголовки X-RateLimit-Limit, X-RateLimit-Remaining і X-RateLimit-Reset (кількість секунд до поновлення вікна).
- Після вичерпання ліміту надходить відповідь 429 RATE_LIMIT_EXCEEDED із заголовком Retry-After; зачекайте вказану кількість секунд. Кожен ключ має власне вікно, як і кожен застосунок у кожному робочому просторі, до якого його під’єднано.
- Після 30 невдалих автентифікацій з однієї адреси за 60 секунд API перестає перевіряти ключі з цієї адреси, доки вікно не мине.
- Списки приймають page (від 1) і limit (за замовчуванням 20, щонайбільше 100) і повертають { data, total, page, limit }.
Idempotency-Key
Надсилайте заголовок Idempotency-Key у запитах POST і PATCH: тоді повторення запиту після обриву з’єднання не створить другого рахунку. Ключ діє протягом 24 годин і належить API-ключу (або партнерському застосунку в цьому робочому просторі), який його надіслав.
- Повтор із тим самим методом, шляхом і тілом отримує збережену відповідь із Idempotent-Replayed: true, і нічого не виконується вдруге: ні другого рахунку, ні листа, ні вебхука.
- Той самий ключ з іншим запитом завершується відповіддю 409 IDEMPOTENCY_KEY_REUSED.
- Повтор, поки перший запит ще виконується, завершується відповіддю 409 IDEMPOTENCY_KEY_IN_USE. Спробуйте за мить.
- Зберігається лише успішна відповідь: невдалий запит можна повторити з тим самим ключем.
curl -X POST https://api.vporiadku.sk/api/v1/clients \
-H "Authorization: Bearer $VPORIADKU_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f1c2a9e-4b7d-4e0a-9c55-0f3e8a1b2c4d" \
-d '{"name": "Novák s.r.o.", "ico": "12345678", "email": "faktury@novak.sk"}'Помилки
Кожна помилка має однакову структуру. Орієнтуйтеся на error.code; повідомлення англійською і може змінюватися. Невідоме поле в тілі запиту дає помилку 400, а не мовчки ігнорується.
{
"data": null,
"meta": null,
"error": {
"code": "API_KEY_SCOPE_MISSING",
"message": "This API key lacks the \"invoices:write\" scope",
"details": {
"operation": "createInvoice",
"required": "invoices:write",
"granted": [
"invoices:read"
]
}
}
}| Код | Значення |
|---|---|
UNAUTHORIZED | 401: ключ або токен доступу відсутній, невідомий, відкликаний чи прострочений. |
FORBIDDEN | 403: у робочого простору немає модуля Firma. |
API_KEY_SCOPE_MISSING | 403: ключу або токену бракує дозволу; details.required його називає. |
FEATURE_NOT_AVAILABLE | 403: функція не входить до тарифу робочого простору. |
PLAN_LIMIT_REACHED | 403: вичерпано ліміт тарифу; details містить ліміт і поточний стан. |
VALIDATION_FAILED | 400: тіло запиту не пройшло перевірку; details.errors перелічує помилки. |
NOT_FOUND | 404: у цьому робочому просторі такого немає. |
IDEMPOTENCY_KEY_REUSED | 409: Idempotency-Key уже належить іншому запиту. |
IDEMPOTENCY_KEY_IN_USE | 409: запит із цим Idempotency-Key ще виконується. |
WEBHOOK_EVENT_NOT_ALLOWED | 403: подія вебхука потребує дозволу, якого немає в ключа чи токена, або її можна налаштувати лише в застосунку. |
RATE_LIMIT_EXCEEDED | 429: ліміт вичерпано; зачекайте стільки секунд, скільки вказано в Retry-After. |
INTERNAL_ERROR | 500: помилка на нашому боці; нічого внутрішнього ми не розкриваємо. Перш ніж повторити запис, перевірте, чи його не було виконано. |
Кінцеві точки
Операцій за адресою https://api.vporiadku.sk/api/v1: 49. Таблиця генерується з того самого каталогу, за яким працює сервер.
Усі поля, параметри й відповіді описано в довіднику API →
Ключ
| Запит | Що робить | Дозвіл |
|---|---|---|
GET/ping | Перевіряє ключ і повертає тариф, префікс і дозволи ключа. | немає |
Рахунки та документи
| Запит | Що робить | Дозвіл |
|---|---|---|
GET/invoices | Список документів усіх типів із рядками та клієнтом: фільтри за типом, статусом, станом оплати, клієнтом, датами, номером, мітками, валютою, текстом і updatedSince; із сортуванням. | invoices:read |
GET/invoices/{id} | Деталі документа з рядками та клієнтом. | invoices:read |
GET/invoices/{id}/pdf | PDF документа, саме такий, який отримає клієнт. | invoices:read |
GET/invoices/{id}/isdoc | Документ у форматі ISDOC 6.0.1 XML для бухгалтерських програм. | invoices:read |
GET/invoices/{id}/ubl | Виставлений рахунок у форматі Peppol BIS 3.0 UBL XML; потрібен модуль е-Фактура, який ми готуємо. | invoices:read |
POST/invoices | Створює документ; суми завжди перераховує сервер. | invoices:write |
PATCH/invoices/{id} | Редагує документ, доки його можна редагувати. | invoices:write |
DELETE/invoices/{id} | Видаляє чернетку без платежів (у кошик). | invoices:write |
POST/invoices/{id}/issue | Виставляє чернетку: підтверджує її номер і блокує вміст. | invoices:write |
POST/invoices/{id}/duplicate | Копіює документ у нову чернетку із сьогоднішньою датою. | invoices:write |
POST/invoices/{id}/send | Надсилає виставлений документ клієнтові електронною поштою з PDF. | invoices:write |
POST/invoices/{id}/reminder | Надсилає нагадування про оплату неоплаченого документа. | invoices:write |
POST/invoices/{id}/credit-note | Виставляє кредит-ноту до рахунку. | invoices:write |
POST/invoices/{id}/cancel | Сторнує виставлений документ сторнувальним документом. | invoices:write |
Платежі
| Запит | Що робить | Дозвіл |
|---|---|---|
GET/invoices/{id}/payments | Платежі, зареєстровані за документом. | payments:read |
POST/invoices/{id}/payments | Реєструє платіж; покритий документ позначається як оплачений. | payments:write |
POST/invoices/{id}/mark-paid | Оплачує решту суми документа одним платежем. | payments:write |
DELETE/payments/{id} | Видаляє платіж; статус документа перераховується. | payments:write |
Клієнти
| Запит | Що робить | Дозвіл |
|---|---|---|
GET/clients | Список клієнтів із пошуком за назвою, IČO, DIČ або електронною поштою, з updatedSince і сортуванням. | clients:read |
GET/clients/{id} | Деталі клієнта. | clients:read |
POST/clients | Створює клієнта з перевіркою на дублікати. | clients:write |
PATCH/clients/{id} | Редагує клієнта. | clients:write |
DELETE/clients/{id} | Видаляє клієнта, на якого не посилається жоден документ (у кошик). | clients:write |
Каталог
| Запит | Що робить | Дозвіл |
|---|---|---|
GET/items | Список позицій каталогу з фільтрами та сортуванням. | items:read |
GET/items/{id} | Деталі позиції каталогу. | items:read |
POST/items | Створює позицію каталогу. | items:write |
PATCH/items/{id} | Редагує позицію каталогу. | items:write |
DELETE/items/{id} | Видаляє позицію каталогу (у кошик). | items:write |
Витрати
| Запит | Що робить | Дозвіл |
|---|---|---|
GET/expenses | Список витрат із фільтрами за статусом, категорією, періодом і updatedSince. | expenses:read |
GET/expenses/{id} | Деталі витрати. | expenses:read |
POST/expenses | Проводить витрату. | expenses:write |
PATCH/expenses/{id} | Редагує витрату. | expenses:write |
DELETE/expenses/{id} | Видаляє витрату (у кошик). | expenses:write |
Отримані е-фактури
| Запит | Що робить | Дозвіл |
|---|---|---|
GET/received-invoices | Список отриманих е-фактур. | received_invoices:read |
GET/received-invoices/{id} | Деталі отриманої е-фактури з рядками та розбивкою ПДВ. | received_invoices:read |
GET/received-invoices/{id}/xml | Архівований оригінал UBL отриманої е-фактури з SHA-256. | received_invoices:read |
Періодичні рахунки
| Запит | Що робить | Дозвіл |
|---|---|---|
GET/recurring-invoices | Список розкладів періодичних рахунків. | recurring_invoices:read |
GET/recurring-invoices/{id} | Деталі розкладу з останніми запусками. | recurring_invoices:read |
Профілі компаній
| Запит | Що робить | Дозвіл |
|---|---|---|
GET/companies | Профілі компаній робочого простору. | company:read |
Банківські рахунки
| Запит | Що робить | Дозвіл |
|---|---|---|
GET/bank-accounts | Банківські рахунки робочого простору. | bank_accounts:read |
GET/bank-accounts/{id} | Деталі банківського рахунку. | bank_accounts:read |
Вебхуки
| Запит | Що робить | Дозвіл |
|---|---|---|
GET/webhooks | Кінцеві точки вебхуків, якими керує ключ або застосунок. | webhooks:read |
GET/webhooks/{id} | Деталі кінцевої точки вебхука. | webhooks:read |
POST/webhooks | Реєструє кінцеву точку для подій, дані яких можна читати за дозволами; її секрет повертає лише один раз. | webhooks:write |
PATCH/webhooks/{id} | Змінює адресу, події, назву або статус кінцевої точки. | webhooks:write |
DELETE/webhooks/{id} | Видаляє кінцеву точку. | webhooks:write |
POST/webhooks/{id}/rotate-secret | Замінює секрет підпису кінцевої точки. | webhooks:write |
POST/webhooks/{id}/test | Надсилає підписану подію ping і повідомляє відповідь. | webhooks:write |
Приклади
Приклади читають ключ зі змінної середовища VPORIADKU_API_KEY. Значення в кутових дужках замініть на ідентифікатори з попередніх відповідей.
curl "https://api.vporiadku.sk/api/v1/invoices?status=overdue&page=1&limit=50" \
-H "Authorization: Bearer $VPORIADKU_API_KEY"# 1. A draft; the server computes every total itself
curl -X POST https://api.vporiadku.sk/api/v1/invoices \
-H "Authorization: Bearer $VPORIADKU_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-2026-1001" \
-d '{"clientId": "<client id>", "issueDate": "2026-10-12", "dueDate": "2026-10-26", "items": [{"name": "Konzultácia", "quantity": 2, "unit": "hod", "unitPrice": 60, "vatRate": 23}]}'
# 2. Issue it: the number is fixed and the content locked
curl -X POST https://api.vporiadku.sk/api/v1/invoices/<invoice id>/issue \
-H "Authorization: Bearer $VPORIADKU_API_KEY"
# 3. E-mail it to the client with the PDF attached
curl -X POST https://api.vporiadku.sk/api/v1/invoices/<invoice id>/send \
-H "Authorization: Bearer $VPORIADKU_API_KEY"curl -X POST https://api.vporiadku.sk/api/v1/invoices/<invoice id>/payments \
-H "Authorization: Bearer $VPORIADKU_API_KEY" \
-H "Content-Type: application/json" \
-d '{"amount": 147.60, "paymentDate": "2026-10-20", "paymentMethod": "bank_transfer"}'Вебхуки
Подій: 35, груп: 13. vporiadku надсилає їх методом POST на адресу, яку ви зареєструєте, і підписує секретом цієї адреси.
- Адреса отримує лише вибрані вами події; кожна адреса має власний секрет whsec_.
- Підпис міститься в заголовку x-vporiadku-signature: v1= і HMAC-SHA256 рядка «мітка часу.тіло». Перевіряйте його на необробленому тілі, порівнюйте за сталий час і відхиляйте доставки, старіші за 300 секунд.
- Відповідайте кодом 2xx протягом 10 секунд. Інші спроби ми повторюємо зі зростаючим інтервалом, загалом 8 разів; після 400, 401, 403, 404, 405, 410 і 422 уже не повторюємо.
- Та сама доставка може надійти двічі. Відкидайте дублікати за idempotencyKey з конверта.
- Кінцеві точки, вибір подій, секрети, тестова подія та журнал доставок є в розділі Налаштування → API → Вебхуки. Через /webhooks із дозволом webhooks:write кінцеві точки можна реєструвати, змінювати, тестувати й видаляти, а також замінювати їхні секрети. Партнерський застосунок бачить лише ті кінцеві точки, які зареєстрував сам, і керує тільки ними.
- Через API кінцева точка може отримувати лише події, дані яких ключ або токен може читати: події рахунків і документів потребують invoices:read, події платежів потребують payments:read, події витрат expenses:read і так далі. Події підключення до банку, звітів з ПДВ, підписки й команди можна налаштувати лише в застосунку.
Події
- Рахунки
invoice.createdinvoice.updatedinvoice.sentinvoice.viewedinvoice.paidinvoice.overdueinvoice.cancelled- Інші документи
credit_note.createdquote.createdquote.acceptedquote.rejectedquote.expireddelivery_note.createdorder.created- Платежі
payment.recordedpayment.matched- Витрати
expense.createdexpense.updatedexpense.paid- Банк
bank_statement.importedbank_feed.syncedbank_feed.consent_expiring- е-Фактура
einvoice.senteinvoice.deliveredeinvoice.failedeinvoice.received- Контакти
client.createdsupplier.created- Каталог
item.created- Періодичні рахунки
recurring_invoice.generatedrecurring_invoice.failed- ПДВ
vat_report.generated- Підписка
subscription.updated- Команда
team.member_joined- Тест
ping
import { createHmac, timingSafeEqual } from 'node:crypto'
export const isGenuine = (rawBody, signature, timestamp, secret) => {
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false
const expected = 'v1=' + createHmac('sha256', secret)
.update(`${timestamp}.${rawBody}`)
.digest('hex')
const a = Buffer.from(expected)
const b = Buffer.from(String(signature))
return a.length === b.length && timingSafeEqual(a, b)
}
// rawBody = the request body exactly as received; signature = 'x-vporiadku-signature',
// timestamp = 'x-vporiadku-timestamp'. Answer 2xx within 10 seconds, work afterwards,
// and drop repeats by the envelope's idempotencyKey.Доступ і ціна
Публічний API та вебхуки входять до додаткового модуля Firma для тарифу Profi за 3,90 EUR на місяць без ПДВ. Модуль також додає команду з ролями, кілька компаній в одному акаунті та доступ для бухгалтера.
Ключами керує власник
Ключі створює й відкликає власник або адміністратор робочого простору в розділі Налаштування → API. Дайте кожній інтеграції власний ключ із мінімально потрібними дозволами.
Інтеграція для кількох клієнтів
Під’єднуєте інтернет-магазин, бухгалтерську програму чи іншу систему для кількох клієнтів vporiadku? Зареєструйте інтеграцію як застосунок у розділі Налаштування → API → Застосунки: кожен клієнт під’єднає його одним кліком і схвалить дозволи, які запитує ваш застосунок. Нікому не доведеться надсилати вам ключ. Напишіть нам на podpora@vporiadku.sk, і ми разом із вами розберемо інтеграцію.
Поширені запитання
- Скільки коштує доступ до API?
- API та вебхуки входять до додаткового модуля Firma для тарифу Profi. За виклики нічого додатково платити не потрібно; діє ліміт 120 запитів на хвилину для кожного ключа.
- Чи можна через API надсилати е-фактури в мережу Peppol?
- Ні. Отримані е-фактури через API читати можна, а надсилання через Peppol публічний API не пропонує.
- Чи є тестове середовище?
- Окремої пісочниці (sandbox) немає: API завжди працює з реальними даними вашого робочого простору. Почніть із ключа лише для читання, а записи пробуйте, пам’ятаючи, що навіть чернетка отримує номер зі своєї серії нумерації.
- Як змінюється API?
- Версія вказана в шляху: /api/v1. Додавання поля до відповіді не є зміною, яка щось зламає, тож невідомі поля ігноруйте. Зміна, яка зламала б наявну інтеграцію, з’явилася б у новій версії.
- Чи можна керувати вебхуками через API?
- Так. З дозволом webhooks:write через /webhooks можна реєструвати, змінювати, тестувати й видаляти кінцеві точки, лише для подій, дані яких ключ або токен може читати. Партнерський застосунок у кожному під’єднаному робочому просторі керує лише власними кінцевими точками.
- Як застосунок для багатьох клієнтів під’єднується до vporiadku?
- Через OAuth 2.0: зареєструйте застосунок у розділі Налаштування → API → Застосунки, перенаправте кожного клієнта на екран згоди й зберігайте отримані токени окремо для кожного робочого простору. Клієнт вибирає робочий простір, схвалює дозволи й може будь-коли від’єднати застосунок. Кожен під’єднаний робочий простір має власний ліміт: 120 запитів на хвилину.