Перейти до основного вмісту

Платежі через API

Платежі через API використовують для передавання касових і банківських операцій у Skynum: оплат від покупців, оплат постачальникам, витрат, переказів між касами й рахунками, вхідних залишків, податків та інших фінансових операцій.

Платіж сам по собі відповідає за рух грошей. Якщо платіж має закривати документ, його потрібно повʼязати з документом через binds або використовувати автоматичне звʼязування, якщо сценарій це дозволяє.

Повʼязані інструкції:

Endpoint-и платежів

МетодEndpointПризначення
GET/v1/paymentsотримати список платежів
POST/v1/paymentsстворити платіж
GET/v1/payments/:idотримати один платіж
PUT/v1/payments/:idоновити платіж
DELETE/v1/payments/:idвидалити платіж
PUT/v1/payments/:id/activateактивувати платіж
PUT/v1/payments/:id/deactivateдеактивувати платіж

Типи платіжних документів

Поле typedoc визначає форму платіжного документа. Для POST /v1/payments це обовʼязкове поле.

API платежів підтримує такі типи:

typedocНазва в SkynumПризначення
bank_inВхідне платіжне дорученняНадходження коштів на банківський рахунок.
bank_outВихідне платіжне дорученняСписання коштів з банківського рахунку.
cash_inПрибутковий касовий ордерНадходження готівки в касу.
cash_outВидатковий касовий ордерВидача готівки з каси.
cash_conversionКонвертація готівкиОбмін готівки між валютами.
bank_conversionКонвертація безготівковаОбмін коштів між валютами на банківських рахунках.

Типи платежів

Поле typepayment визначає економічний зміст платежу. Воно відповідає тому, з ким або з чим повʼязана фінансова операція.

typepaymentНазваТиповий payment_subject_type
settlement_with_clientsРозрахунки з покупцямиContragent
settlement_with_suppliersРозрахунки з постачальникамиContragent
expenseВитратиExpense
money_on_wayГроші в дорозіContragent
encashmentІнкасаціяBankbox
cash_from_bankГотівка з банкуBankbox
founderЗасновникFounder
cashbox_transferПередача в касуCashbox
initial_cash_remainВхідний залишок по касіCashbox
initial_bank_remainВхідний залишок по банкуBankbox
initial_client_debtПочаткова заборгованість покупця/покупцюContragent
initial_debt_to_supplierПочаткова заборгованість постачальника/постачальникуContragent
bankbox_transferПередача в банкBankbox
universalУніверсальнийзалежить від сценарію
ndsОплата ПДВAgency
expense_creditorsКредитори за витратамиContragent
taxesІнші податкиTax
debtors_creditorsДебітори та кредиториContragent
settlement_with_employeesРозрахунки зі співробітникамиEmployee
salary_taxesЗарплатні податки та зборивикористовується для зарплатних податків

Набір допустимих typepayment також залежить від конкретного typedoc. Наприклад, для банківського вихідного платежу доступний ширший перелік типів, ніж для касового прихідного платежу.

Доступні типи платежів за документом

Для API важливо передавати не тільки правильний typedoc, а й typepayment, який підтримується для цього платіжного документа.

typedoctypepaymentНазва
bank_outsettlement_with_clientsРозрахунки з покупцями
bank_outsettlement_with_suppliersРозрахунки з постачальниками
bank_outfounderЗасновник
bank_outexpenseВитрати
bank_outsalary_taxesЗарплатні податки та збори
bank_outbankbox_transferПередача в банк
bank_outndsОплата ПДВ
bank_outexpense_creditorsКредитори за витратами
bank_outdebtors_creditorsДебітори та кредитори
bank_outtaxesІнші податки
bank_outmoney_on_wayГроші в дорозі
bank_insettlement_with_clientsРозрахунки з покупцями
bank_insettlement_with_suppliersРозрахунки з постачальниками
bank_infounderЗасновник
bank_inbankbox_transferПередача в банк
bank_inndsОплата ПДВ
bank_indebtors_creditorsДебітори та кредитори
bank_inmoney_on_wayГроші в дорозі
cash_insettlement_with_clientsРозрахунки з покупцями
cash_insettlement_with_suppliersРозрахунки з постачальниками
cash_infounderЗасновник
cash_incash_from_bankГотівка з банку
cash_incashbox_transferПередача в касу
cash_indebtors_creditorsДебітори та кредитори
cash_insettlement_with_employeesРозрахунки зі співробітниками
cash_outsettlement_with_clientsРозрахунки з покупцями
cash_outsettlement_with_suppliersРозрахунки з постачальниками
cash_outfounderЗасновник
cash_outexpenseВитрати
cash_outencashmentІнкасація
cash_outcashbox_transferПередача в касу
cash_outexpense_creditorsКредитори за витратами
cash_outdebtors_creditorsДебітори та кредитори
cash_outsettlement_with_employeesРозрахунки зі співробітниками

Для cash_conversion і bank_conversion використовуйте поля валюти, суми й конвертованої валюти.

попередження

Якщо typepayment не відповідає typedoc, API може не прийняти платіж або очистити субʼєкт платежу під час обробки. Для облікових інтеграцій краще явно зберігати мапу дозволених комбінацій на стороні інтеграції.

Отримання списку платежів

GET /v1/payments повертає список платежів. Параметр typedoc є обовʼязковим.

Підтримані фільтри:

ПараметрПризначення
typedocТип платіжного документа. Обовʼязковий.
offsetСторінка або зміщення списку. За замовчуванням 1.
limitКількість записів. За замовчуванням 100, максимум 1000.
date_fromДата платежу від.
date_toДата платежу до.
queryПошук за номером або кодом платежу.
contragent_idФільтр за контрагентом.
activeФільтр за активністю.
typepaymentФільтр за типом платежу.
cashbox_idФільтр за касою.
bankbox_idФільтр за банківським рахунком.
owner_idФільтр за власником.
executor_idФільтр за виконавцем.
updated_fromОновлено від.
updated_toОновлено до.
with_custom_fieldsДодати у відповідь додаткові поля.

Приклад:

GET /v1/payments?typedoc=cash_in&typepayment=settlement_with_clients&limit=100

Отримання одного платежу

GET /v1/payments/:id повертає один платіж за ID.

Додатково можна передати:

with_custom_fields=true

щоб отримати додаткові поля платежу.

Чернетка й активний платіж

Після створення платіж зберігається як чернетка. Чернетка не змінює фінансовий облік.

Щоб платіж провів рух коштів, його потрібно активувати:

PUT /v1/payments/:id/activate

У відповідях API важливі поля:

ПолеЩо означає
activeЧи активований платіж.
docstateСистемний стан платежу.
status_idСтатус платежу з налаштувань компанії.
typedocФорма платіжного документа.
typepaymentЕкономічний тип платежу.
попередження

Активний платіж змінює фінансовий облік. Якщо платіж повʼязаний з документом, він також впливає на взаєморозрахунки за цим документом.

Створення платежу

Мінімально для створення платежу потрібен typedoc:

{
"payment": {
"typedoc": "cash_in"
}
}

На практиці зазвичай передають:

  • typedoc - тип платіжного документа;
  • docdate - дату платежу;
  • amount - суму;
  • typepayment - тип платежу;
  • cashbox_id або bankbox_id - касу або банківський рахунок;
  • currency_id і currency_rate - валюту й курс;
  • payment_subject_type і payment_subject - обʼєкт, з яким повʼязаний платіж;
  • binds - звʼязки з документами, якщо платіж має закривати конкретні документи;
  • custom_fields - додаткові поля, якщо вони налаштовані.

Приклад оплати від покупця готівкою:

{
"payment": {
"typedoc": "cash_in",
"docdate": "2026-05-12",
"amount": 1000,
"typepayment": "settlement_with_clients",
"cashbox_id": "cashbox-id",
"currency_id": "currency-id",
"currency_rate": 1,
"payment_subject_type": "Contragent",
"payment_subject": {
"id": "contragent-id"
}
}
}

Поля для створення й оновлення платежу

ПолеПризначення
idВнутрішній ID платежу. Використовується для наявного платежу, коли інтеграція передає вже відомий запис.
typedocТип платіжного документа. Обовʼязкове поле для створення.
docdateДата платежу.
docnumНомер платежу.
codeКод платежу.
api_idЗовнішній ID інтеграції.
filial_idФілія або юридична особа.
cashbox_idКаса.
bankbox_idБанківський рахунок.
currency_idВалюта платежу.
currency_rateКурс валюти.
amountСума платежу.
ndsСума ПДВ.
typepaymentТип платежу.
reasonПідстава.
annexДодаток.
purposeПризначення платежу.
converted_currency_idВалюта, у яку виконується конвертація.
converted_amountСума після конвертації.
agreement_idДоговір.
payment_subject_typeТип обʼєкта платежу.
payment_subjectОбʼєкт платежу.
subject_signifyДодатковий субʼєкт платежу для окремих сценаріїв, зокрема витрат.
disable_autobindВимкнути автоматичне звʼязування.
bindsЗвʼязки з документами.
commentsКоментарі.
custom_fieldsДодаткові поля.

Поля короткої відповіді платежу

GET /v1/payments повертає список платежів у короткому форматі.

ПолеЩо означає
idВнутрішній ID платежу.
typedocТип платіжного документа.
noteНотатка платежу.
docnumНомер платежу.
typepaymentТип платежу.
reasonПідстава.
annexДодаток.
purposeПризначення платежу.
api_idЗовнішній ID інтеграції.
status_idСтатус платежу.
docstateСистемний стан платежу.
codeКод платежу.
filial_idФілія або юридична особа.
executor_idВиконавець.
owner_idВласник.
source_document_typeТип документа-джерела, якщо платіж створений з іншого процесу.
source_document_idID документа-джерела.
disable_autobindЧи вимкнене автоматичне звʼязування.
agreement_idДоговір.
payment_subject_typeТип субʼєкта платежу.
payment_subject_idID субʼєкта платежу.
subject_signify_idID додаткового субʼєкта платежу.
currency_idВалюта платежу.
converted_currency_idВалюта конвертації.
cashbox_idКаса.
bankbox_idБанківський рахунок.
docdateДата платежу.
activeЧи активований платіж.
currency_rateКурс валюти.
amountСума платежу.
converted_amountСума конвертації.
ndsСума ПДВ.
custom_fieldsДодаткові поля, якщо передано with_custom_fields=true.
created_atДата створення.
updated_atДата оновлення.

Поля повної відповіді платежу

GET /v1/payments/:id і write-запити повертають повніший обʼєкт платежу.

ПолеЩо означає
idВнутрішній ID платежу.
typedocТип платіжного документа.
docnumНомер платежу.
codeКод платежу.
api_idЗовнішній ID інтеграції.
noteНотатка платежу.
reasonПідстава.
annexДодаток.
purposeПризначення платежу.
typepaymentТип платежу.
status_idСтатус платежу.
docstateСистемний стан платежу.
filial_idФілія або юридична особа.
executor_idВиконавець платежу.
owner_idВласник платежу.
source_document_typeТип документа-джерела, якщо платіж створений з іншого процесу.
source_document_idID документа-джерела.
disable_autobindЧи вимкнене автоматичне звʼязування.
agreement_idДоговір.
docdateДата платежу.
activeЧи активований платіж.
currency_idID валюти платежу.
currency_titleНазва валюти платежу.
currency_codeКод валюти платежу.
converted_currency_idID валюти конвертації.
converted_currency_titleНазва валюти конвертації.
converted_currency_codeКод валюти конвертації.
cashbox_idID каси.
cashbox_titleНазва каси.
bankbox_idID банківського рахунку.
bankbox_titleНазва банківського рахунку.
currency_rateКурс валюти.
amountСума платежу.
converted_amountСума конвертації.
ndsСума ПДВ.
payment_subject_typeТип субʼєкта платежу.
payment_subject_idID субʼєкта платежу.
payment_subject_titleНазва субʼєкта платежу.
subject_signify_idID додаткового субʼєкта платежу.
subject_signify_titleНазва додаткового субʼєкта платежу.
commentsКоментарі.
bindsЗвʼязки з документами.
custom_fieldsДодаткові поля, якщо передано with_custom_fields=true.
created_atДата створення.
updated_atДата оновлення.

Каса або банківський рахунок

Для готівкових платежів використовується cashbox_id.

Для безготівкових платежів використовується bankbox_id.

Для конвертацій і переказів можуть використовуватися поля, повʼязані з касою, рахунком, валютою та сумою конвертації. У таких сценаріях заздалегідь перевіряйте напрям руху коштів у бізнес-процесі.

Субʼєкт платежу

Пара payment_subject_type і payment_subject визначає, до чого відноситься платіж.

Приклади:

  • Contragent - покупець або постачальник;
  • Expense - стаття витрат;
  • Bankbox - банківський рахунок;
  • Cashbox - каса;
  • Founder - засновник;
  • Agency - установа;
  • Tax - податок;
  • Employee - співробітник.

Для payment_subject використовується обʼєкт з такими полями:

ПолеПризначення
idID наявного обʼєкта платежу.
codeКод.
titleНазва або імʼя.
phoneТелефон, якщо обʼєктом є контрагент.
emailEmail, якщо обʼєктом є контрагент.
discount_cardДисконтна картка, якщо обʼєктом є контрагент.
addressАдреса, якщо обʼєктом є контрагент.
group_idГрупа, якщо обʼєктом є контрагент.
status_idСтатус.
entity_typeТип особи або компанії.
bank_idБанк.
bank_accountБанківський рахунок.
taxnumberПодатковий номер.
remarkПримітка.

Для контрагента найнадійніше передавати id, якщо він уже є в Skynum.

Додатковий субʼєкт платежу

Поле subject_signify використовується для окремих сценаріїв, де потрібно вказати додатковий субʼєкт платежу.

Зокрема, воно використовується з typepayment = expense. Наприклад, витрата може мати статтю витрат як основний обʼєкт, але додатково бути повʼязана з контрагентом.

У subject_signify приймаються такі поля:

ПолеПризначення
idID контрагента.
codeКод контрагента.
titleНазва або імʼя контрагента.
phoneТелефон.
emailEmail.
discount_cardДисконтна картка.
addressАдреса.
group_idГрупа контрагента.
status_idСтатус контрагента.
entity_typeТип особи або компанії.
bank_idБанк.
bank_accountБанківський рахунок.
taxnumberПодатковий номер.
remarkПримітка.

Звʼязок платежу з документом

Щоб привʼязати платіж до документа, використовується binds.

Приклад:

{
"payment": {
"typedoc": "cash_in",
"amount": 1000,
"typepayment": "settlement_with_clients",
"binds": [
{
"bind_id": "document-id",
"amount": 1000
}
]
}
}

bind_id - ID активованого документа, до якого привʼязується платіж. amount - сума, яка розподіляється на цей документ.

Якщо один платіж закриває кілька документів, у binds передають кілька рядків.

Документ у binds має відповідати платежу: дата документа не повинна бути пізнішою за дату платежу, контрагент, філія і валюта мають збігатися, документ має бути активованим, а сума звʼязку має бути більшою за нуль.

порада

Якщо інтеграція отримує оплату разом із замовленням або продажем, заздалегідь визначте, хто створює фінальний звʼязок: документ через оплату в документі, окремий платіж через binds або автоматичне звʼязування.

Автоматичне звʼязування

Поле disable_autobind керує автоматичним звʼязуванням платежу.

  • false - автоматичне звʼязування не вимкнене;
  • true - інтеграція вимикає автоматичне звʼязування і має передати потрібні звʼязки самостійно.

Якщо для інтеграції критично, який саме документ закриває платіж, передавайте binds явно.

ПДВ у платежі

Поле nds передає суму ПДВ у платежі.

Це поле потрібно використовувати обережно: API фіксує значення в платежі, але остаточне податкове трактування операції залежить від облікової політики компанії та налаштувань ПДВ у Skynum.

Докладніше: ПДВ.

Валюта і конвертація

Для звичайного платежу використовуються:

  • currency_id;
  • currency_rate;
  • amount.

Для конвертацій додатково використовуються:

  • converted_currency_id;
  • converted_amount.

Якщо компанія веде мультивалютний облік, інтеграція має передавати валюту й курс відповідно до сценарію платежу.

Докладніше: Мультивалютний облік.

Оновлення платежу

PUT /v1/payments/:id оновлює платіж.

Перед оновленням платежу потрібно врахувати його активність і звʼязки з документами.

попередження

Не оновлюйте активний платіж без розуміння наслідків для взаєморозрахунків, каси, банку й звітів. Якщо потрібно змінити облікову операцію, спочатку перевірте, чи можна деактивувати платіж.

Активація платежу

Endpoint:

PUT /v1/payments/:id/activate

Активація проводить рух грошей. Залежно від типу платежу, це може:

  • збільшити або зменшити залишок каси;
  • збільшити або зменшити залишок банківського рахунку;
  • закрити борг покупця або постачальника;
  • зафіксувати витрату;
  • провести податок;
  • перенести кошти між касою, банком або валютами.

Деактивація платежу

Endpoint:

PUT /v1/payments/:id/deactivate

Деактивація скасовує фінансовий рух, якщо це дозволено поточним станом обліку.

Деактивація може бути небажаною або неможливою, якщо платіж:

  • повʼязаний з активними документами;
  • уже бере участь у взаєморозрахунках;
  • впливає на закриті періоди;
  • створений автоматично іншим процесом;
  • повʼязаний з банківською випискою або роздрібною операцією.

Видалення платежу

DELETE /v1/payments/:id видаляє платіж, якщо це дозволено системою.

Для облікових інтеграцій безпечніше не покладатися на видалення як на основний сценарій виправлення. Краще:

  1. створювати платіж як чернетку;
  2. перевіряти відповідь API;
  3. активувати тільки після перевірки;
  4. у разі помилки фіксувати її в інтеграції й передавати оператору або відповідальному менеджеру.

Безпечний порядок роботи

Для інтеграцій із платежами рекомендований такий порядок:

  1. Отримати довідники кас, банківських рахунків, контрагентів, статей витрат, установ або податків.
  2. Визначити typedoc і typepayment.
  3. Передати суму, валюту, касу або рахунок.
  4. Передати payment_subject_type і payment_subject.
  5. Якщо платіж закриває документ, передати binds.
  6. Створити платіж як чернетку.
  7. Перевірити відповідь API.
  8. Активувати платіж.
  9. Повторно отримати платіж і перевірити active, суму, валюту й звʼязки.

Чеклист перед запуском

Перед запуском інтеграції з платежами перевірте:

  • які typedoc створює інтеграція;
  • які typepayment потрібні для бізнес-сценаріїв;
  • як визначається каса або банківський рахунок;
  • чи передається правильна валюта і курс;
  • чи потрібен ПДВ у платежі;
  • хто є субʼєктом платежу;
  • чи потрібно передавати subject_signify;
  • чи потрібно вимикати автоматичне звʼязування;
  • як платежі звʼязуються з документами;
  • що робити, якщо документ уже оплачений або сума платежу більша за суму документа;
  • як інтеграція обробляє повторні запити й помилки активації.

Підсумок

Платежі через API потрібно розглядати як фінансові документи. Для коректного обліку важливо правильно передати typedoc, typepayment, касу або банківський рахунок, суму, валюту, субʼєкта платежу й звʼязки з документами.