8 Типи витрат
Оголосіть, які типи витрат існують на об'єкті та як вони розраховуються
Що таке типи витрат?
Типи витрат — це оголошення всіх витрат, пов'язаних з об'єктом: що потрібно сплачувати та як розраховується кожен платіж. Це шаблон налаштування, а не фактичні нарахування чи оплати. Типи витрат належать самому об'єкту, незалежно від того, чи він зараз орендований чи вільний.
Чим точніше налаштовані витрати, тим кращими будуть ваші договори оренди та тим зрозумілішими фінансові стосунки між орендодавцем та орендарем.
Робочий процес: як це працює
Крок 1: Створіть типи затрат (шаблони)
Спочатку ви визначаєте типи регулярних затрат (шаблони), такі як "Електрика", "Вода", "Опалення". Це категорії, які будуть використовуватися місяць за місяцем.
Приклад: Створіть тип затрат "Електрика" з періодом розрахунку "Щомісяця", типом споживання "За лічильниками", ціною за одиницю 2.50 EUR/кВт·год.
Крок 2: Створіть затрати (фактичні рахунки)
Після налаштування типів затрат ви створюєте затрати для конкретних періодів. Затрата представляє фактичне споживання за певний місяць.
Приклад: Для типу затрат "Електрика" створіть затрату за січень 2026: споживання 350 кВт·год × 2.50 EUR = 875 EUR.
Чому таке розділення?
Типи затрат визначають ЯК розраховуються затрати (ціна, період, формула). Затрати — це РЕЗУЛЬТАТИ - фактичні рахунки, надіслані орендарям. Це розділення дозволяє повторно використовувати конфігурації типів затрат щомісяця без повторного введення всіх деталей.
Типи споживання
Фіксований
Відома фіксована сума за розрахунковий період. Ціна не залежить від споживання чи показань лічильників.
За лічильниками
Розраховується за показаннями лічильників: споживання (поточний мінус попередній показник) помножене на ціну за одиницю. Витрата повинна бути пов'язана з одним або кількома лічильниками.
За фактом
Щомісячна сума заздалегідь невідома. Ви вводите реальну суму кожного періоду після отримання рахунку від постачальника послуг.
Фіксована абонплата
Фіксована щомісячна сума, незалежна від фактичного споживання. Орендар платить однакову суму щомісяця незалежно від того, скільки послуги було використано.
Зв'язок з лічильниками
Витрати за лічильниками прив'язані до конкретних лічильників, встановлених на об'єкті. При створенні нарахування система бере поточні та попередні показання, обчислює споживання та множить на налаштовану ціну за одиницю. Багатозонні тарифи (день/ніч або пік/напівпік/ніч) мають окремі ціни по зонах, і система розраховує кожну зону окремо.
Періоди розрахунку
Кожна витрата має період розрахунку, який визначає, як часто створюються нарахування. Система може автоматично генерувати нарахування за налаштованим розкладом.
Створення начислень вручну
Для витрат з типом споживання "По факту" або періодом розрахунку "Вручну" ви можете створювати начислення вручну через сторінку Начислення.
Коли використовувати ручні начислення
- Для витрат "По факту", де фактична сума змінюється кожного періоду
- Для витрат з періодом "Вручну", які не повинні автоматично генеруватися
Як створити
- Перейдіть до Об'єкти → [Об'єкт] → Начислення
- Натисніть синю кнопку "Додати начислення" (з'являється, лише якщо у вас є витрати, які потребують ручних начислень)
- Виберіть витрату з модального вікна (показує тип витрати, постачальника та метод розрахунку)
- Заповніть форму начислення: дата, період, сума та примітки
Форма показує інформацію про витрату, включаючи постачальника та будь-які примітки з конфігурації витрати.
Мультивалютність
Кожна витрата може використовувати свою валюту. Наприклад, один об'єкт може мати оренду в доларах, електроенергію в місцевій валюті, а інтернет в євро. Валюта встановлюється при налаштуванні витрати та застосовується до всіх нарахувань, згенерованих з неї.
Постачальники послуг
Кожна витрата може бути пов'язана з постачальником послуг — стороною, яка отримує оплату. Система підтримує чотири типи постачальників:
Постачальник послуг
Компанії з глобального довідника — комунальні підприємства, управляючі компанії, інтернет-провайдери. Пошук за назвою або кодом ЄДРПОУ.
Власний контрагент
Ваш особистий довідник контрагентів з повними контактними та банківськими реквізитами — назва, код ЄДРПОУ, IBAN, адреса.
Користувач системи
Існуючі користувачі платформи, які можуть отримувати оплати — обслуговуючий персонал, менеджери нерухомості. Прив'язка за email.
Запрошення партнера
Партнери, запрошені електронною поштою, які ще не зареєстровані в системі. Автоматично надсилається запрошення на email.
Документи нарахувань
До кожного нарахування можна прикріпити документи — рахунки, квитанції, підтвердження оплати або будь-які інші файли, пов'язані з нарахуванням. Документи завантажуються у захищене S3 сховище і доступні через HMAC-підписані URL. Завантаження використовує формат multipart/form-data.
file
Бінарний файл для завантаження (PDF, JPG, PNG тощо). Обов'язковий.
document_type_id
ID типу документа (напр. 1 = офіційний документ, 2 = квитанція). Обов'язковий.
comment
Необов'язковий текстовий коментар з описом документа.
Документи прикріплюються до конкретних нарахувань (не до витрати). Спочатку створіть або оновіть нарахування, потім завантажте до нього документи. Обмеження розміру та типу файлів налаштовуються для кожного типу документа.
Чому точне налаштування важливе
Налаштування витрат — це основа всіх фінансових операцій. Точно оголошені витрати забезпечують правильні договори оренди, точні розрахунки нарахувань, своєчасні нагадування про оплату та прозорі фінансові звіти. Коли орендар підписує договір, він бачить усі витрати, пов'язані з об'єктом.
Цей крок охоплює лише налаштування витрат — оголошення, які витрати існують. Фактичне створення нарахувань, обробка платежів та генерація квитанцій — це окремі операції, які відбуваються після налаштування витрат та активації договору оренди.
Як додати витрати
Витрати можна додати через веб-інтерфейс або через API. У веб-інтерфейсі перейдіть до будь-якого об'єкта та відкрийте вкладку «Витрати».
Об'єкт → Вкладка Витрати → Кнопка Додати витрату
Детальну документацію, включаючи API-ендпоінти та правила валідації, дивіться у розділі Витрати на нерухомість у Бібліотеці.
Поля витрати
При створенні витрати обов'язкові наступні поля:
expense_type_id
Тип витрати (електроенергія, газ, інтернет тощо). Отримайте ID через GET /api/expense-types
calculation_period
MANUAL, MONTHLY, QUARTERLY, SEMI_ANNUAL або ANNUAL
unit_price
Ціна за одиницю рядком (наприклад "4.3200"). Для фіксованих витрат — загальна сума
measurement_unit_id
ID одиниці виміру (кВт·год, м3, шт тощо)
currency_id
ID валюти для цієї витрати
start_date
Дата початку у форматі YYYY-MM-DD
Необов'язкові поля
fixed_consumption
Фіксований обсяг споживання для витрат фіксованого типу (наприклад "1.0000" для послуги з фіксованою ставкою)
end_date
Дата закінчення (необов'язкова). Після цієї дати нарахування не створюються
counter_ids
Масив ID лічильників для прив'язки (для витрат за лічильниками). Лічильники повинні належати тому ж об'єкту
zone_prices
Об'єкт зонних цін для багатозонних тарифів: {"PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16"}
service_provider_id
ID постачальника послуг (з endpoint expense-providers)
account_number
Номер особового рахунку у постачальника послуг
charge_day
День місяця (1-28) створення нарахування. За замовчуванням: 15
payment_days
Дні на оплату після нарахування. За замовчуванням: 3
reminder_days
Дні до дедлайну для надсилання нагадування. За замовчуванням: 3
notes
Вільний коментар (лише текст, HTML очищується)
Для розробників: REST API
Усі операції з витратами доступні через REST API. Потрібна автентифікація через Bearer-токен.
GET Список витрат
▶Повертає всі витрати об'єкта. Використовуйте active_only=true для фільтрації тільки активних витрат.
GET /api/v1/properties/{propertyId}/expenses
Фільтр лише активних:
GET /api/v1/properties/{propertyId}/expenses?active_only=true
Відповідь (200 OK):
{
"expenses": [
{
"id": 1,
"expense_type": {"id": 3, "code": "ELECTRICITY", "name_key": "expense_type.electricity"},
"calculation_period": "MONTHLY",
"unit_price": "4.3200",
"measurement_unit": {"id": 1, "symbol": "kWh", "name_key": "unit.kwh"},
"fixed_consumption": null,
"currency": {"id": 1, "code": "UAH", "symbol": "\u20b4"},
"start_date": "2026-01-01",
"end_date": null,
"service_provider": {"id": 5, "name": "Energozbut"},
"account_number": "0123456789",
"is_active": true,
"has_charges": true,
"can_delete": false,
"notes": null,
"charge_day": 15,
"payment_days": 3,
"reminder_days": 3,
"counters": [
{"id": 4, "serial_number": "NIK-2281-073915", "tariff_type": "THREE_ZONE"}
],
"zone_prices": {"PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16"},
"created_at": "2026-01-01T00:00:00+00:00",
"updated_at": "2026-02-15T10:30:00+00:00"
},
{
"id": 2,
"expense_type": {"id": 15, "code": "INTERNET", "name_key": "expense_type.internet"},
"calculation_period": "MONTHLY",
"unit_price": "500.0000",
"measurement_unit": {"id": 5, "symbol": "unit", "name_key": "unit.unit"},
"fixed_consumption": "1.0000",
"currency": {"id": 1, "code": "UAH", "symbol": "\u20b4"},
"start_date": "2026-01-01",
"end_date": null,
"service_provider": null,
"account_number": null,
"is_active": true,
"has_charges": false,
"can_delete": true,
"notes": null,
"charge_day": 1,
"payment_days": 5,
"reminder_days": 2,
"created_at": "2026-01-01T00:00:00+00:00",
"updated_at": "2026-01-01T00:00:00+00:00"
}
],
"total": 2
}
POST Створити витрату
▶Створює нову витрату для об'єкта. Допускається лише одна витрата кожного типу на об'єкт.
POST /api/v1/properties/{propertyId}/expenses
Заголовки:
Authorization: Bearer {token}
Content-Type: application/json
Фіксована витрата (наприклад, Інтернет):
{
"expense_type_id": 15,
"calculation_period": "MONTHLY",
"unit_price": "500.0000",
"measurement_unit_id": 5,
"fixed_consumption": "1.0000",
"currency_id": 1,
"start_date": "2026-01-01",
"charge_day": 1,
"payment_days": 5,
"reminder_days": 2,
"notes": "Fiber 100 Mbps"
}
Витрата за лічильником із зонними цінами (наприклад, Електроенергія):
{
"expense_type_id": 3,
"calculation_period": "MONTHLY",
"unit_price": "4.3200",
"measurement_unit_id": 1,
"currency_id": 1,
"start_date": "2026-01-01",
"counter_ids": [4],
"zone_prices": {
"PEAK": "4.32",
"HALF_PEAK": "3.24",
"NIGHT": "2.16"
},
"service_provider_id": 5,
"account_number": "0123456789"
}
Витрата за фактом (наприклад, Опалення):
{
"expense_type_id": 1,
"calculation_period": "MONTHLY",
"unit_price": "1.0000",
"measurement_unit_id": 6,
"currency_id": 1,
"start_date": "2026-01-01",
"charge_day": 20
}
Відповідь (201 Created):
{
"id": 3,
"expense_type": {"id": 15, "code": "INTERNET", "name_key": "expense_type.internet"},
"calculation_period": "MONTHLY",
"unit_price": "500.0000",
"measurement_unit": {"id": 5, "symbol": "unit", "name_key": "unit.unit"},
"fixed_consumption": "1.0000",
"currency": {"id": 1, "code": "UAH", "symbol": "\u20b4"},
"start_date": "2026-01-01",
"end_date": null,
"service_provider": null,
"account_number": null,
"is_active": true,
"has_charges": false,
"can_delete": true,
"notes": "Fiber 100 Mbps",
"charge_day": 1,
"payment_days": 5,
"reminder_days": 2,
"created_at": "2026-02-22T10:00:00+00:00",
"updated_at": "2026-02-22T10:00:00+00:00"
}
GET Отримати деталі витрати
▶Повертає повні деталі витрати, включаючи пов'язані лічильники, зонні ціни та історію нарахувань.
GET /api/v1/properties/{propertyId}/expenses/{id}
Відповідь (200 OK):
{
"id": 1,
"expense_type": {"id": 3, "code": "ELECTRICITY", "name_key": "expense_type.electricity"},
"calculation_period": "MONTHLY",
"unit_price": "4.3200",
"measurement_unit": {"id": 1, "symbol": "kWh", "name_key": "unit.kwh"},
"fixed_consumption": null,
"currency": {"id": 1, "code": "UAH", "symbol": "\u20b4"},
"start_date": "2026-01-01",
"end_date": null,
"service_provider": {"id": 5, "name": "Energozbut"},
"account_number": "0123456789",
"is_active": true,
"has_charges": true,
"can_delete": false,
"notes": null,
"charge_day": 15,
"payment_days": 3,
"reminder_days": 3,
"counters": [
{"id": 4, "serial_number": "NIK-2281-073915", "tariff_type": "THREE_ZONE"}
],
"zone_prices": {"PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16"},
"charges": [
{
"id": 12,
"charge_date": "2026-02-15",
"period_start": "2026-02-01",
"period_end": "2026-02-28",
"quantity": "279.000",
"amount": "1205.28",
"source": "auto",
"has_items": true
}
],
"total_charges": 1,
"required_zones": ["PEAK", "HALF_PEAK", "NIGHT"],
"created_at": "2026-01-01T00:00:00+00:00",
"updated_at": "2026-02-15T10:30:00+00:00"
}
PUT Оновити витрату
▶Частково оновлює витрату. Включайте лише поля, які хочете змінити. Коли передаються counter_ids або zone_prices, вони замінюють усі існуючі значення.
PUT /api/v1/properties/{propertyId}/expenses/{id}
Поля для оновлення (всі необов'язкові):
Тіло запиту:
{
"unit_price": "4.5600",
"zone_prices": {
"PEAK": "4.56",
"HALF_PEAK": "3.42",
"NIGHT": "2.28"
},
"charge_day": 10
}
Відповідь (200 OK):
{
"id": 1,
"expense_type": {"id": 3, "code": "ELECTRICITY", "name_key": "expense_type.electricity"},
"calculation_period": "MONTHLY",
"unit_price": "4.5600",
"charge_day": 10,
"zone_prices": {"PEAK": "4.56", "HALF_PEAK": "3.42", "NIGHT": "2.28"},
...
}
DELETE Видалити витрату
▶Видаляє витрату. Повертає 204 No Content при успіху.
DELETE /api/v1/properties/{propertyId}/expenses/{id}
Відповідь (204 No Content)
POST Перемикання активності
▶Активує або деактивує витрату. Деактивовані витрати не використовуються для автоматичного створення нарахувань.
POST /api/v1/properties/{propertyId}/expenses/{id}/toggle-active
Відповідь (200 OK):
{"id": 1, "is_active": false}
POST Оновити нарахування для витрати
▶Генерує нарахування для однієї витрати, якщо її розрахунковий період завершився і нарахування за поточний період не існує.
POST /api/v1/properties/{propertyId}/expenses/{id}/refresh
Відповідь (200 OK):
{
"success": true,
"charge_id": 15,
"message": "Charge created for period 2026-02-01 - 2026-02-28"
}
POST Оновити всі автоматичні нарахування
▶Генерує нарахування для всіх активних автоматичних (не MANUAL) витрат об'єкта. Повертає кількість створених, пропущених та помилкових нарахувань.
POST /api/v1/properties/{propertyId}/expenses/refresh-all
Відповідь (200 OK):
{
"created": 3,
"skipped": 2,
"errors": 0
}
Документи в модулі витрат
У модулі витрат є два рівні, до яких можна прикріпити документи:
Навіщо прикріплювати документи до витрат?
Документи витрат дозволяють зберігати важливі довідкові матеріали, які стосуються самої конфігурації регулярних витрат, а не окремих нарахувань. Це включає:
- Договори з постачальниками комунальних послуг
- Тарифні графіки та картки тарифів
- Угоди про рівень обслуговування (SLA)
- Інструкції до обладнання та графіки обслуговування
Тип затрат визначає повторюваний шаблон (напр., "Водопостачання"). Затрата — це фактичний екземпляр нарахування, створений з цього шаблону (напр., "Вода за січень 2026").
Нарахування
Конкретний запис нарахування за період (напр. електроенергія за січень). Рахунки, квитанції та підтвердження оплати прикріплюються тут через API. Шлях: /api/properties/{id}/charges/{chargeId}/documents
Тип затрат (Шаблон)
Визначення типу регулярних затрат (напр. "Електрика, щомісяця"). До типу затрат можна прикріпити документи, такі як договори з підрядниками або тарифні графіки. API шлях: /api/properties/{id}/expenses/{expenseId}/documents
Показання лічильників мають власні прикріплені документи, які управляються через модуль лічильників. Ендпоінти нижче призначені виключно для документів нарахувань витрат.
API документів нарахувань
Базовий шлях: /api/properties/{propertyId}/charges/{chargeId}/documents. Нарахування створюється з витрати і представляє конкретний розрахунковий період. Документи, прикріплені тут, є підтвердженням оплати або рахунками за це нарахування.
GET Список документів нарахування
▶Повертає всі документи, прикріплені до конкретного нарахування. Кожен документ містить безпечне посилання для завантаження, метадані файлу та необов'язковий коментар.
GET /api/v1/properties/{propertyId}/charges/{chargeId}/documents
Відповідь (200 OK):
{
"documents": [
{
"id": 1,
"document": {
"id": 10,
"original_name": "invoice_february.pdf",
"file_url": "https://landlordkeeper.com/file/abc123hash",
"mime_type": "application/pdf",
"file_size": 245760,
"document_type": {
"id": 1,
"code": "OFFICIAL_DOCUMENT",
"name_key": "document_type.official_document"
},
"created_at": "2026-02-15T10:30:00+00:00"
},
"comment": "Electricity invoice for February 2026",
"created_at": "2026-02-15T10:30:00+00:00"
},
{
"id": 2,
"document": {
"id": 11,
"original_name": "receipt_scan.jpg",
"file_url": "https://landlordkeeper.com/file/def456hash",
"mime_type": "image/jpeg",
"file_size": 128000,
"document_type": {
"id": 2,
"code": "RECEIPT",
"name_key": "document_type.receipt"
},
"created_at": "2026-02-16T14:00:00+00:00"
},
"comment": null,
"created_at": "2026-02-16T14:00:00+00:00"
}
],
"total": 2
}
POST Завантажити документ нарахування
▶Завантажує файл до нарахування. Використовує multipart/form-data (не JSON). Файл валідується згідно з обмеженнями типу документа (дозволені розширення, максимальний розмір) і зберігається в S3.
POST /api/v1/properties/{propertyId}/charges/{chargeId}/documents
Заголовки:
Authorization: Bearer {token}
Content-Type: multipart/form-data
Поля завантаження (multipart/form-data):
file
Бінарний файл (PDF, JPG, PNG тощо). Обов'язковий. Валідується за обмеженнями типу документа.
document_type_id
ID типу документа (ціле число). Обов'язковий. Визначає дозволені розширення файлів та максимальний розмір.
comment
Необов'язковий текстовий коментар (рядок, nullable). Звичайний текст, HTML-теги видаляються.
Відповідь (201 Created):
{
"id": 3,
"document": {
"id": 12,
"original_name": "water_bill_march.pdf",
"file_url": "https://landlordkeeper.com/file/ghi789hash",
"mime_type": "application/pdf",
"file_size": 184320,
"document_type": {
"id": 1,
"code": "OFFICIAL_DOCUMENT",
"name_key": "document_type.official_document"
},
"created_at": "2026-02-22T12:00:00+00:00"
},
"comment": "Water bill March 2026",
"created_at": "2026-02-22T12:00:00+00:00"
}
GET Деталі документа
▶Повертає повні деталі конкретного документа нарахування, включаючи безпечне посилання на файл, метадані файлу та коментар.
GET /api/v1/properties/{propertyId}/charges/{chargeId}/documents/{id}
Відповідь (200 OK):
{
"id": 1,
"document": {
"id": 10,
"original_name": "invoice_february.pdf",
"file_url": "https://landlordkeeper.com/file/abc123hash",
"mime_type": "application/pdf",
"file_size": 245760,
"document_type": {
"id": 1,
"code": "OFFICIAL_DOCUMENT",
"name_key": "document_type.official_document"
},
"created_at": "2026-02-15T10:30:00+00:00"
},
"comment": "Electricity invoice for February 2026",
"created_at": "2026-02-15T10:30:00+00:00"
}
PUT Оновити коментар документа
▶Оновлює коментар документа нарахування. Можна змінити лише поле коментаря. Надішліть JSON тіло з новим значенням коментаря. Встановіть null щоб видалити коментар.
PUT /api/v1/properties/{propertyId}/charges/{chargeId}/documents/{id}
Тіло запиту:
{
"comment": "Updated: electricity invoice Feb 2026 (paid)"
}
Відповідь (200 OK):
{
"id": 1,
"document": {
"id": 10,
"original_name": "invoice_february.pdf",
"file_url": "https://landlordkeeper.com/file/abc123hash",
...
},
"comment": "Updated: electricity invoice Feb 2026 (paid)",
"created_at": "2026-02-15T10:30:00+00:00"
}
DELETE Видалити документ нарахування
▶Остаточно видаляє документ з нарахування. Файл спочатку видаляється зі сховища S3, потім видаляється запис з бази даних. Цю дію неможливо скасувати.
DELETE /api/v1/properties/{propertyId}/charges/{chargeId}/documents/{id}
Відповідь (204 No Content)
Приклади cURL
▶1. Фіксована витрата (наприклад, Інтернет)
curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"expense_type_id": 15,
"calculation_period": "MONTHLY",
"unit_price": "500.0000",
"measurement_unit_id": 5,
"fixed_consumption": "1.0000",
"currency_id": 1,
"start_date": "2026-01-01",
"charge_day": 1
}'
2. Витрата за лічильником із зонними цінами (наприклад, Електроенергія)
curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"expense_type_id": 3,
"calculation_period": "MONTHLY",
"unit_price": "4.3200",
"measurement_unit_id": 1,
"currency_id": 1,
"start_date": "2026-01-01",
"counter_ids": [4],
"zone_prices": {"PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16"},
"service_provider_id": 5,
"account_number": "0123456789"
}'
3. Список витрат
curl https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
4. Оновити витрату
curl -X PUT https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses/1 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{"unit_price": "4.5600", "charge_day": 10}'
5. Перемикання активності
curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses/1/toggle-active \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
6. Оновити всі автоматичні нарахування
curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses/refresh-all \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
7. Завантажити документ нарахування
curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/charges/12/documents \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-F "file=@/path/to/invoice.pdf" \
-F "document_type_id=1" \
-F "comment=Electricity invoice February 2026"
8. Список документів нарахування
curl https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/charges/12/documents \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
9. Видалити документ нарахування
curl -X DELETE https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/charges/12/documents/1 \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
API документів типу затрат
Базовий шлях: /api/properties/{propertyId}/expenses/{expenseId}/documents. Документи, прикріплені до витрати (такі як угоди з підрядниками або тарифні розклади), керуються через ці кінцеві точки.
GET List Expense Documents
▶GET /api/v1/properties/{propertyId}/expenses/{expenseId}/documents
Retrieve all documents attached to an expense.
Response (200 OK):
{
"documents": [...],
"total": 2
}
POST Upload Expense Document
▶POST /api/v1/properties/{propertyId}/expenses/{expenseId}/documents
Upload a new document to an expense (multipart/form-data).
Request Body (multipart/form-data):
file: (binary file)
document_type_id: integer (required)
comment: string (optional)
Response (201 Created):
{ "id": 3, "document": {...}, "comment": "..." }
GET Get Expense Document
▶GET /api/v1/properties/{propertyId}/expenses/{expenseId}/documents/{id}
Retrieve details of a specific expense document.
PUT Update Expense Document
▶PUT /api/v1/properties/{propertyId}/expenses/{expenseId}/documents/{id}
Update the comment of an expense document.
Request Body (application/json):
{ "comment": "Updated comment" }
DELETE Delete Expense Document
▶DELETE /api/v1/properties/{propertyId}/expenses/{expenseId}/documents/{id}
Delete an expense document and its associated file from S3.
Response (204 No Content):
(empty)