8 Typy wydatków
Zadeklaruj, jakie typy wydatków istnieją w nieruchomości i jak są obliczane
Czym są typy wydatków?
Typy wydatków to deklaracja wszystkich kosztów związanych z nieruchomością: co należy zapłacić i jak obliczany jest każdy płatność. To szablon konfiguracji, a nie faktyczne naliczenia czy płatności. Typy wydatków należą do samej nieruchomości, niezależnie od tego, czy jest wynajmowana czy wolna.
Im dokładniej skonfigurowane wydatki, tym lepsze będą Twoje umowy najmu i tym jaśniejsza relacja finansowa między wynajmującym a najemcą.
Przepływ pracy: jak to działa
Krok 1: Utwórz typy wydatków (szablony)
Najpierw definiujesz typy powtarzających się wydatków (szablony), takie jak "Elektryczność", "Woda", "Ogrzewanie". To kategorie, które będą używane miesiąc po miesiącu.
Przykład: Utwórz typ wydatku "Elektryczność" z okresem rozliczeniowym "Miesięcznie", typem zużycia "Według liczników", ceną jednostkową 2,50 EUR/kWh.
Krok 2: Utwórz opłaty (rzeczywiste rachunki)
Po skonfigurowaniu typów wydatków tworzysz opłaty dla określonych okresów. Opłata reprezentuje rzeczywiste zużycie w danym miesiącu.
Przykład: Dla typu wydatku "Elektryczność" utwórz opłatę za styczeń 2026: zużycie 350 kWh × 2,50 EUR = 875 EUR.
Dlaczego takie rozdzielenie?
Typy wydatków definiują JAK obliczane są opłaty (cena, okres, formuła). Opłaty to WYNIKI - rzeczywiste rachunki wysyłane do najemców. To rozdzielenie pozwala ponownie wykorzystywać konfiguracje typów wydatków co miesiąc bez ponownego wprowadzania wszystkich szczegółów.
Typy zużycia
Stały
Znana, stała kwota za okres rozliczeniowy. Cena nie zależy od zużycia ani odczytów liczników.
Według liczników
Obliczane na podstawie odczytów liczników: zużycie (bieżący minus poprzedni odczyt) pomnożone przez cenę jednostkową. Wydatek musi być powiązany z jednym lub kilkoma licznikami.
Według faktu (poniesione)
Miesięczna kwota nie jest znana z góry. Wprowadzasz rzeczywistą kwotę każdego okresu po otrzymaniu faktury od dostawcy usług.
Stała opłata
Stała miesięczna kwota niezależna od rzeczywistego zużycia. Najemca płaci tę samą kwotę każdego miesiąca bez względu na to, ile usługi zostało wykorzystane.
Powiązanie z licznikami
Wydatki według liczników są powiązane z konkretnymi licznikami zainstalowanymi w nieruchomości. Przy tworzeniu naliczenia system bierze bieżące i poprzednie odczyty, oblicza zużycie i mnoży przez skonfigurowaną cenę jednostkową. Taryfy wielostrefowe (dzień/noc lub szczyt/półszczyt/noc) mają oddzielne ceny per strefa, a system oblicza każdą strefę niezależnie.
Okresy rozliczeniowe
Każdy wydatek ma okres rozliczeniowy, który określa, jak często tworzone są naliczenia. System może automatycznie generować naliczenia zgodnie ze skonfigurowanym harmonogramem.
Ręczne tworzenie opłat
Dla wydatków z typem zużycia "W miarę występowania" lub okresem obliczeniowym "Ręcznie" możesz tworzyć opłaty ręcznie na stronie Opłaty.
Kiedy używać ręcznych opłat
- Dla wydatków "W miarę występowania", gdzie rzeczywista kwota różni się w każdym okresie
- Dla wydatków z okresem "Ręcznie", które nie powinny być generowane automatycznie
Jak utworzyć
- Przejdź do Nieruchomości → [Nieruchomość] → Opłaty
- Kliknij niebieski przycisk "Dodaj opłatę" (pojawia się tylko jeśli masz wydatki wymagające ręcznych opłat)
- Wybierz wydatek z okna modalnego (pokazuje typ wydatku, dostawcę i metodę obliczeniową)
- Wypełnij formularz opłaty: data, okres, kwota i notatki
Formularz pokazuje informacje o wydatku, w tym dostawcę i wszelkie notatki z konfiguracji wydatku.
Wielowalutowość
Każdy wydatek może używać własnej waluty. Na przykład jedna nieruchomość może mieć czynsz w dolarach, elektryczność w walucie lokalnej, a internet w euro. Waluta jest ustawiana przy konfiguracji wydatku i ma zastosowanie do wszystkich naliczeń z niego wygenerowanych.
Dostawcy usług
Każdy wydatek może być powiązany z dostawcą usług — stroną otrzymującą płatność. System obsługuje cztery typy dostawców:
Dostawca usług
Firmy z globalnego katalogu — przedsiębiorstwa komunalne, firmy zarządzające, dostawcy internetu. Wyszukiwanie po nazwie lub NIP.
Własny kontrahent
Twój osobisty katalog kontrahentów z pełnymi danymi kontaktowymi i bankowymi — nazwa, NIP, IBAN, adres.
Użytkownik systemu
Istniejący użytkownicy platformy, którzy mogą otrzymywać płatności — pracownicy obsługi, zarządcy nieruchomości. Powiązanie przez email.
Zaproszenie partnera
Partnerzy zaproszeni przez email, którzy nie są jeszcze zarejestrowani w systemie. Automatyczne zaproszenie jest wysyłane na email.
Dokumenty naliczeń
Do każdego naliczenia można dołączyć dokumenty — faktury, rachunki, potwierdzenia płatności lub inne pliki związane z naliczeniem. Dokumenty są przesyłane do bezpiecznego magazynu S3 i udostępniane przez podpisane HMAC adresy URL. Przesyłanie używa formatu multipart/form-data.
file
Plik binarny do przesłania (PDF, JPG, PNG itp.). Wymagany.
document_type_id
ID typu dokumentu (np. 1 = dokument urzędowy, 2 = rachunek). Wymagany.
comment
Opcjonalny komentarz tekstowy opisujący dokument.
Dokumenty są dołączane do konkretnych naliczeń (nie do wydatku). Najpierw utwórz lub odśwież naliczenie, a następnie prześlij do niego dokumenty. Ograniczenia rozmiaru i typu plików konfigurowane są dla każdego typu dokumentu.
Dlaczego dokładna konfiguracja ma znaczenie
Konfiguracja wydatków to fundament wszystkich operacji finansowych. Dokładnie zadeklarowane wydatki prowadzą do prawidłowych umów najmu, precyzyjnych obliczeń naliczeń, terminowych przypomnień o płatnościach i przejrzystych raportów finansowych. Gdy najemca podpisuje umowę, widzi wszystkie koszty związane z nieruchomością.
Ten krok obejmuje tylko konfigurację wydatków — deklarowanie, jakie koszty istnieją. Faktyczne tworzenie naliczeń, przetwarzanie płatności i generowanie rachunków to osobne operacje, które następują po skonfigurowaniu wydatków i aktywowaniu umowy najmu.
Jak dodać wydatki
Wydatki można dodać przez interfejs webowy lub przez API. W interfejsie webowym przejdź do dowolnej nieruchomości i otwórz zakładkę „Wydatki".
Nieruchomość → Zakładka Wydatki → Przycisk Dodaj wydatek
Szczegółową dokumentację, w tym endpointy API i reguły walidacji, znajdziesz w sekcji Wydatki na nieruchomość w Bibliotece.
Pola wydatku
Przy tworzeniu wydatku wymagane są następujące pola:
expense_type_id
Typ wydatku (elektryczność, gaz, internet itp.). Pobierz ID przez GET /api/expense-types
calculation_period
MANUAL, MONTHLY, QUARTERLY, SEMI_ANNUAL lub ANNUAL
unit_price
Cena za jednostkę jako string (np. "4.3200"). Dla stałych wydatków to całkowita kwota
measurement_unit_id
ID jednostki miary (kWh, m3, szt itp.)
currency_id
ID waluty dla tego wydatku
start_date
Data rozpoczęcia w formacie YYYY-MM-DD
Pola opcjonalne
fixed_consumption
Stałe zużycie dla wydatków stałego typu (np. "1.0000" dla usługi ryczałtowej)
end_date
Data zakończenia (opcjonalna). Po tej dacie naliczenia nie są tworzone
counter_ids
Tablica ID liczników do powiązania (dla wydatków licznikowych). Liczniki muszą należeć do tej samej nieruchomości
zone_prices
Obiekt cen strefowych dla taryf wielostrefowych: {"PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16"}
service_provider_id
ID dostawcy usług (z endpointu expense-providers)
account_number
Numer konta u dostawcy usług
charge_day
Dzień miesiąca (1-28) tworzenia naliczenia. Domyślnie: 15
payment_days
Dni na płatność po naliczeniu. Domyślnie: 3
reminder_days
Dni przed terminem do wysłania przypomnienia. Domyślnie: 3
notes
Dowolne notatki (tylko tekst, HTML jest oczyszczany)
Dla programistów: REST API
Wszystkie operacje na wydatkach są dostępne przez REST API. Wymagana autoryzacja przez Bearer token.
GET Lista wydatków
▶Zwraca wszystkie wydatki nieruchomości. Użyj active_only=true do filtrowania tylko aktywnych wydatków.
GET /api/v1/properties/{propertyId}/expenses
Filtruj tylko aktywne:
GET /api/v1/properties/{propertyId}/expenses?active_only=true
Odpowiedź (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 Utwórz wydatek
▶Tworzy nowy wydatek dla nieruchomości. Dozwolony jest tylko jeden wydatek danego typu na nieruchomość.
POST /api/v1/properties/{propertyId}/expenses
Nagłówki:
Authorization: Bearer {token}
Content-Type: application/json
Stały wydatek (np. Internet):
{
"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"
}
Wydatek licznikowy z cenami strefowymi (np. Elektryczność):
{
"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"
}
Wydatek wg faktu (np. Ogrzewanie):
{
"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
}
Odpowiedź (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 Pobierz szczegóły wydatku
▶Zwraca pełne szczegóły wydatku, w tym powiązane liczniki, ceny strefowe i historię naliczeń.
GET /api/v1/properties/{propertyId}/expenses/{id}
Odpowiedź (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 Aktualizuj wydatek
▶Częściowo aktualizuje wydatek. Dołącz tylko pola, które chcesz zmienić. Gdy podane counter_ids lub zone_prices, zastępują wszystkie istniejące wartości.
PUT /api/v1/properties/{propertyId}/expenses/{id}
Pola do aktualizacji (wszystkie opcjonalne):
Treść żądania:
{
"unit_price": "4.5600",
"zone_prices": {
"PEAK": "4.56",
"HALF_PEAK": "3.42",
"NIGHT": "2.28"
},
"charge_day": 10
}
Odpowiedź (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 Usuń wydatek
▶Usuwa wydatek. Zwraca 204 No Content w przypadku sukcesu.
DELETE /api/v1/properties/{propertyId}/expenses/{id}
Odpowiedź (204 No Content)
POST Przełączanie aktywności
▶Aktywuje lub dezaktywuje wydatek. Zdezaktywowane wydatki nie są używane do automatycznego tworzenia naliczeń.
POST /api/v1/properties/{propertyId}/expenses/{id}/toggle-active
Odpowiedź (200 OK):
{"id": 1, "is_active": false}
POST Odśwież naliczenia dla wydatku
▶Generuje naliczenie dla jednego wydatku, jeśli jego okres rozliczeniowy zakończył się i nie istnieje naliczenie za bieżący okres.
POST /api/v1/properties/{propertyId}/expenses/{id}/refresh
Odpowiedź (200 OK):
{
"success": true,
"charge_id": 15,
"message": "Charge created for period 2026-02-01 - 2026-02-28"
}
POST Odśwież wszystkie automatyczne naliczenia
▶Generuje naliczenia dla wszystkich aktywnych automatycznych (nie MANUAL) wydatków nieruchomości. Zwraca liczbę utworzonych, pominiętych i błędnych naliczeń.
POST /api/v1/properties/{propertyId}/expenses/refresh-all
Odpowiedź (200 OK):
{
"created": 3,
"skipped": 2,
"errors": 0
}
Dokumenty w module wydatków
W module wydatków dokumenty można dołączać na dwóch poziomach:
Po co dołączać dokumenty do wydatków?
Dokumenty wydatków umożliwiają przechowywanie ważnych materiałów referencyjnych dotyczących samej konfiguracji cyklicznych wydatków, a nie poszczególnych naliczeniów. Obejmuje to:
- Umowy serwisowe z dostawcami mediów
- Harmonogramy taryfowe i karty stawek
- Umowy o poziomie usług (SLA)
- Instrukcje sprzętu i harmonogramy konserwacji
Typ wydatku definiuje powtarzający się szablon (np. "Dostawa wody"). Opłata to rzeczywista instancja rozliczenia utworzona z tego szablonu (np. "Woda za styczeń 2026").
Naliczenie
Konkretny wpis rozliczeniowy za okres (np. prąd za styczeń). Faktury, rachunki i potwierdzenia płatności dołączane są tutaj przez API. Ścieżka: /api/properties/{id}/charges/{chargeId}/documents
Typ wydatku (Szablon)
Definicja typu powtarzającego się wydatku (np. "Elektryczność, miesięcznie"). Do typu wydatku można dołączyć dokumenty, takie jak umowy z kontrahentami lub harmonogramy taryfowe. Ścieżka API: /api/properties/{id}/expenses/{expenseId}/documents
Odczyty liczników mają własne załączone dokumenty zarządzane przez moduł liczników. Poniższe endpointy są przeznaczone wyłącznie dla dokumentów naliczeń wydatków.
API dokumentów naliczeń
Ścieżka bazowa: /api/properties/{propertyId}/charges/{chargeId}/documents. Naliczenie jest tworzone z wydatku i reprezentuje konkretny okres rozliczeniowy. Dokumenty dołączone tutaj służą jako dowody płatności lub faktury za to naliczenie.
GET Lista dokumentów naliczenia
▶Zwraca wszystkie dokumenty dołączone do konkretnego naliczenia. Każdy dokument zawiera bezpieczny link do pobrania, metadane pliku i opcjonalny komentarz.
GET /api/v1/properties/{propertyId}/charges/{chargeId}/documents
Odpowiedź (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 Prześlij dokument naliczenia
▶Przesyła plik do naliczenia. Używa multipart/form-data (nie JSON). Plik jest walidowany zgodnie z ograniczeniami typu dokumentu (dozwolone rozszerzenia, maksymalny rozmiar) i przechowywany w S3.
POST /api/v1/properties/{propertyId}/charges/{chargeId}/documents
Nagłówki:
Authorization: Bearer {token}
Content-Type: multipart/form-data
Pola przesyłania (multipart/form-data):
file
Plik binarny (PDF, JPG, PNG itp.). Wymagany. Walidowany wg ograniczeń typu dokumentu.
document_type_id
ID typu dokumentu (liczba całkowita). Wymagany. Definiuje dozwolone rozszerzenia plików i maks. rozmiar.
comment
Opcjonalny komentarz tekstowy (string, nullable). Zwykły tekst, tagi HTML usuwane.
Odpowiedź (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 Szczegóły dokumentu
▶Zwraca pełne szczegóły konkretnego dokumentu naliczenia, w tym bezpieczny link do pliku, metadane pliku i komentarz.
GET /api/v1/properties/{propertyId}/charges/{chargeId}/documents/{id}
Odpowiedź (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 Zaktualizuj komentarz dokumentu
▶Aktualizuje komentarz dokumentu naliczenia. Można zmienić tylko pole komentarza. Wyślij ciało JSON z nową wartością komentarza. Ustaw null aby usunąć komentarz.
PUT /api/v1/properties/{propertyId}/charges/{chargeId}/documents/{id}
Treść żądania:
{
"comment": "Updated: electricity invoice Feb 2026 (paid)"
}
Odpowiedź (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 Usuń dokument naliczenia
▶Trwale usuwa dokument z naliczenia. Plik jest najpierw usuwany z magazynu S3, a następnie usuwany jest rekord z bazy danych. Tej operacji nie można cofnąć.
DELETE /api/v1/properties/{propertyId}/charges/{chargeId}/documents/{id}
Odpowiedź (204 No Content)
Przykłady cURL
▶1. Stały wydatek (np. Internet)
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. Wydatek licznikowy z cenami strefowymi (np. Elektryczność)
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. Lista wydatków
curl https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
4. Aktualizuj wydatek
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. Przełączanie aktywności
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. Odśwież wszystkie automatyczne naliczenia
curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses/refresh-all \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
7. Prześlij dokument naliczenia
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. Lista dokumentów naliczenia
curl https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/charges/12/documents \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
9. Usuń dokument naliczenia
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 dokumentów typu wydatku
Ścieżka bazowa: /api/properties/{propertyId}/expenses/{expenseId}/documents. Dokumenty dołączone do wydatku (takie jak umowy z wykonawcami lub harmonogramy taryfowe) są zarządzane za pomocą tych punktów końcowych.
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)