KSeF Mobile

Dokumentacja

API KSeF Mobile

Programistyczny dostęp do wszystkiego, co widzisz w panelu: firm i połączeń z KSeF, faktur otrzymanych i wystawionych (z PDF, XML i pozycjami), tagów i reguł, eksportów, raportów, kalkulatora podatku i wysyłki do księgowej. REST, JSON, jeden klucz.

Podstawy

Adres bazowyhttps://ksefmobile.pl/api/v1
FormatJSON (UTF-8) w zapytaniach i odpowiedziach; pliki (PDF, XML, Excel) jako binaria
UwierzytelnianieNagłówek Authorization: Bearer ksm_…
FirmaNagłówek X-Organization: <id firmy> (albo all na listach)
Wersjav1 — w ścieżce. Zmiany wstecznie niezgodne tylko w nowej wersji.

API działa na tych samych danych co aplikacja i panel — faktura oznaczona przez API jako opłacona jest od razu opłacona w telefonie. Monitorowanie KSeF i powiadomienia działają dalej po naszej stronie: Twoja integracja tylko czyta i porządkuje dane.

Tylko odczyt z KSeF

KSeF Mobile pobiera faktury z KSeF, ale ich do KSeF nie wysyła — token wystarczy z uprawnieniem do przeglądania faktur. Faktury wystawiasz dalej w swoim programie do fakturowania.

Szybki start

Od klucza do pierwszych faktur w pięciu krokach. Wystarczy terminal z cURL albo Python.

  1. 1

    Utwórz klucz API

    W panelu otwórz API → Utwórz klucz. Na początek wystarczy klucz tylko do odczytu. Klucz zobaczysz tylko raz — zapisz go w zmiennej środowiskowej:

    Terminal
    export KSEF_MOBILE_API_KEY=ksm_…
  2. 2

    Sprawdź, czy działa — lista firm

    Każda firma (NIP) ma swoje połączenie z KSeF i swoje faktury. Zapamiętaj jej id.

    GET/api/v1/organizations/
    curl https://ksefmobile.pl/api/v1/organizations/ \
      -H "Authorization: Bearer $KSEF_MOBILE_API_KEY"
    Odpowiedź 200
    [
      {
        "id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
        "name": "Jan Kowalski Usługi",
        "nip": "7262475736",
        "address": "ul. Szewska 1/1, 91-855 Łódź",
        "role": "owner",
        "notifications_enabled": true,
        "connection": {
          "status": "active",
          "auth_method": "token",
          "environment": "DEMO",
          "last_success_at": "2026-10-01T17:38:32.872871Z",
          "last_error": "",
          "certificate_expires_at": null,
          "last_poll_at": "2026-10-01T17:38:32.853142Z",
          "next_poll_at": "2026-10-01T17:48:43.520343Z",
          "poll_interval_seconds": 600
        },
        "unread_count": 1,
        "invoice_count": 585
      }
    ]
  3. 3

    Pobierz najnowsze faktury kosztowe

    Nagłówek X-Organization wybiera firmę. Filtry działają tak jak w panelu — tu: otrzymane faktury z września.

    GET/api/v1/invoices/
    curl -G https://ksefmobile.pl/api/v1/invoices/ \
      -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
      -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
      -d direction=received \
      -d date_from=2026-09-01 \
      -d date_to=2026-09-30 \
      -d page_size=10
  4. 4

    Szczegóły i PDF faktury

    Szczegóły zawierają strony, pozycje, płatność i podsumowanie VAT z XML-a. PDF ma ten sam wygląd co w aplikacji.

    GET/api/v1/invoices/{id}/pdf/
    curl https://ksefmobile.pl/api/v1/invoices/c8beaf06-9b5b-5758-acaa-b57c306408c3/pdf/ \
      -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
      -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
      -o faktura.pdf
  5. 5

    Oznacz jako opłaconą

    Zmiany wymagają klucza z uprawnieniem odczyt i zapis. Oznaczenie od razu widać w aplikacji i w panelu.

    PATCH/api/v1/invoices/{id}/
    curl -X PATCH https://ksefmobile.pl/api/v1/invoices/c8beaf06-9b5b-5758-acaa-b57c306408c3/ \
      -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
      -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
      -H "Content-Type: application/json" \
      -d '{
      "is_paid": true,
      "tags": [
        "zapłacone-przelewem"
      ]
    }'
  6. Dalej: synchronizacja z ERP, wszystkie filtry listy faktur, obsługa błędów.

Uwierzytelnianie

Każde zapytanie wysyłasz z kluczem API w nagłówku Authorization. Klucz działa w imieniu Twojego konta.

Nagłówek
Authorization: Bearer ksm_9fQ2…Xk3w

Klucze

  • Klucze tworzysz i unieważniasz w panelu: API. Zaczynają się od ksm_. Pełny klucz widać tylko raz — przechowujemy wyłącznie jego skrót.
  • Klucz może wygasać po 30, 90 albo 365 dniach albo działać bezterminowo. Unieważnienie działa natychmiast.
  • Klucz widzi tylko firmy, dla których API jest włączone. Firma dodana przez API ma je włączone od razu.

Uprawnienia

UprawnieniePozwala na
readTylko odczyt: zapytania GET — listy, szczegóły, PDF, XML, raporty, podatki.
writeOdczyt i zapis: także POST, PUT, PATCH, DELETE — firmy, połączenia z KSeF, oznaczenia, tagi, reguły, eksporty, wysyłka do księgowej.

Kluczem nie zrobisz rzeczy dostępnych tylko dla zalogowanego człowieka: logowania i rejestracji, zmiany hasła i usunięcia konta, płatności za plan, rejestracji telefonów i ustawień powiadomień push oraz zarządzania kluczami API. Takie zapytania kończą się kodem not_available_via_api.

Dobre praktyki

  • Trzymaj klucz po stronie serwera — w zmiennej środowiskowej albo w menedżerze sekretów. Nigdy w kodzie przeglądarki, aplikacji mobilnej ani w repozytorium.
  • Osobny klucz dla każdej integracji: łatwo go unieważnić bez zatrzymywania pozostałych. Panel pokazuje, kiedy i skąd każdy klucz był ostatnio użyty.
  • Wybieraj read, gdy integracja nie musi niczego zmieniać (np. hurtownia danych, BI).
  • Klucz wyciekł? Unieważnij go w panelu i utwórz nowy — to zajmuje kilka sekund.

Błędy uwierzytelniania

StatuscodeZnaczenie
401invalid_api_keyKlucz nieprawidłowy, wygasły albo unieważniony.
403insufficient_scopeZapis kluczem tylko do odczytu.
403not_available_via_apiOperacja dostępna tylko w panelu.
403api_disabledŻadna z Twoich firm nie ma włączonego API.

Firmy i nagłówek X-Organization

Jedno konto może obsługiwać wiele firm (NIP-ów). Większość zapytań dotyczy jednej z nich.

  • X-Organization: <id> — zapytanie dotyczy tej firmy. Bez nagłówka używamy pierwszej firmy konta (wygodne, gdy masz jedną).
  • X-Organization: all — wszystkie firmy naraz. Działa na listach i zestawieniach: faktury, tagi, podsumowanie, raporty, eksporty. Każda faktura ma wtedy organization_id i organization_name.
  • Zapytania, które zmieniają jedną firmę (reguły, ustawienia księgowej, podatki), przyjmują też pole organization w treści albo w parametrach — ma pierwszeństwo przed nagłówkiem.
  • Firma spoza konta albo z wyłączonym API → 404 organization_not_found.
GET/api/v1/invoices/summary/
curl -G https://ksefmobile.pl/api/v1/invoices/summary/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: all" \
  -d month=2026-09

Paginacja

Lista faktur jest stronicowana kursorem — szybko i bez duplikatów, nawet gdy w trakcie przychodzą nowe faktury.

  • GET /invoices/ zwraca results oraz next i previous — gotowe adresy kolejnych stron (z Twoimi filtrami) albo null.
  • page_size: domyślnie 30, najwyżej 100. Kolejność: od ostatnio zapisanej w KSeF (ksef_stored_at malejąco).
  • Pozostałe listy (firmy, tagi, reguły) są krótkie i zwracają od razu całą tablicę.
Python — wszystkie strony
url = f"{API}/invoices/"
params = {"direction": "issued", "date_from": "2026-01-01", "page_size": 100}
invoices = []
while url:
    page = requests.get(url, headers=HEADERS, params=params).json()
    invoices += page["results"]
    url, params = page["next"], None  # kolejna strona albo None na końcu
Odpowiedź 200
{
  "next": "https://ksefmobile.pl/api/v1/invoices/?cursor=cD0yMDI2LTA5LTI2KzA3JTNBMTIlM0EwMCUyQjAwJTNBMDA%3D&date_from=2026-09-01&date_to=2026-09-30&direction=received&page_size=2",
  "previous": null,
  "results": [
    "…"
  ]
}

Błędy

Standardowe kody HTTP i stały, maszynowy kod błędu. Komunikaty są po polsku — logikę opieraj na polu code.

Odpowiedź 403
{
  "detail": "Ten klucz API ma uprawnienia tylko do odczytu.",
  "code": "insufficient_scope"
}
Błąd walidacji 400
{
  "nip": [
    "Nieprawidłowy NIP."
  ],
  "ksef_token": [
    "Podaj token KSeF."
  ]
}

Błędy walidacji (400) mają klucz dla każdego pola z listą komunikatów; błędy ogólne mają detail i code. Każda odpowiedź ma nagłówek X-Request-Id — podaj go, pisząc do nas o problemie.

StatusKiedy
200 / 201 / 202Sukces; 202 = przyjęte do wykonania w tle (eksport, import, wysyłka do księgowej).
204Usunięto — bez treści.
400Błąd walidacji albo niepoprawne parametry.
401Brak lub nieprawidłowy klucz.
402Limit planu: faktura poza limitem (quota_exceeded) albo limit firm (organization_limit).
403Brak uprawnień: zakres klucza, funkcja planu płatnego (plan_required), operacja tylko w panelu.
404Nie ma takiego zasobu w Twoich firmach.
409Stan nie pozwala na operację (np. import przed skonfigurowaniem połączenia).
429Za dużo zapytań — nasz limit albo limit KSeF. Odczekaj Retry-After sekund.
502KSeF nie odpowiada — spróbuj ponownie za chwilę.

Najczęstsze kody

codeZnaczenie
plan_requiredFunkcja planu płatnego (raporty, podatki, wysyłka do księgowej). Pole feature mówi która.
quota_exceededSzczegóły, PDF i XML faktury są poza miesięcznym limitem planu. Faktura i jej nagłówek są zapisane.
organization_not_foundFirma z X-Organization nie należy do konta albo nie ma włączonego API.
ksef_rate_limitedKSeF ogranicza pobieranie XML (64 na godzinę na firmę). Pole retry_after w sekundach.
throttledPrzekroczony limit zapytań klucza.
invalid_api_keyKlucz nieprawidłowy, wygasły albo unieważniony.
insufficient_scopeKlucz tylko do odczytu.

Limity zapytań

Limity chronią stabilność usługi i KSeF. Odpowiedzi mówią, ile zapytań zostało.

LimitWartość
Zapytania na klucz30 na minutę
Pobieranie XML z KSeF (fetch-xml)64 na godzinę na firmę — limit Ministerstwa Finansów
Test połączenia z KSeF10 na godzinę
Eksportdo 5 000 faktur w jednym pliku; pliki dostępne 24 godziny
Wysyłka do księgowejdo 5 adresów, załączniki do 12 MB
Nagłówki odpowiedzi
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 27
X-RateLimit-Reset: 42
X-Request-Id: 7196…0f5a

Limit liczymy w przesuwanym oknie 60 sekund, osobno dla każdego klucza. X-RateLimit-Remaining to zapytania, które zostały w oknie, a X-RateLimit-Reset — za ile sekund zwolni się miejsce. Po przekroczeniu limitu dostaniesz 429 z nagłówkiem Retry-After (sekundy). Ponów zapytanie po tym czasie; przy kolejnych błędach wydłużaj przerwę (exponential backoff).

Nowe faktury nie pojawiają się częściej niż sprawdzamy KSeF

KSeF sprawdzamy co 10 minut w planach płatnych i co 60 minut w planie Free. Odpytywanie API częściej nic nie da — synchronizację ustaw co 5–10 minut.

Formaty danych

Kilka zasad, które obowiązują w całym API.

DaneFormatPrzykład
Kwotystring z dwoma miejscami po kropce — nigdy liczba zmiennoprzecinkowa"1388.00"
Walutakod ISO 4217"PLN"
DatyRRRR-MM-DD"2026-09-30"
Data i czasISO 8601 ze strefą (w bazie UTC, prezentacja Europe/Warsaw)"2026-09-30T16:24:40+02:00"
IdentyfikatoryUUID"c8beaf06-…-b57c306408c3"
NIP10 cyfr bez kresek (przyjmujemy też „PL 526-025-02-74”)"7262475736"
Kierunek fakturyreceived — otrzymana (koszt), issued — wystawiona (sprzedaż)"received"
Puste wartościnull albo pusty string — pola zawsze są w odpowiedzinull
Przewodniki

Synchronizacja faktur z ERP

Gotowy wzorzec: co kilka minut przenoś nowe faktury kosztowe z KSeF do swojego systemu — bez duplikatów.

Najprostszy niezawodny znacznik „już przeniesione” to tag. Pobierasz faktury bez tagu w-erp, zapisujesz je u siebie i jednym zapytaniem oznaczasz tagiem. Gdy coś się nie uda, faktura po prostu wróci w następnym przebiegu. Tag widać też w panelu — księgowa od razu wie, co jest już w systemie.

  1. GET /invoices/?direction=received&tags_none=w-erp z X-Organization: all.
  2. Dla faktur z has_details: true pobierz GET /invoices/{id}/ (pozycje, płatność, VAT) — opcjonalnie PDF albo XML.
  3. Zapisz u siebie i oznacz: POST /invoices/bulk-tags/ z add: ["w-erp"].
sync_ksef.py
import os
import time
import requests

API = "https://ksefmobile.pl/api/v1"
HEADERS = {
    "Authorization": f"Bearer {os.environ['KSEF_MOBILE_API_KEY']}",
    "X-Organization": "all",  # wszystkie firmy z włączonym API
}
DONE_TAG = "w-erp"  # znacznik: faktura już przeniesiona


def new_invoices():
    """Faktury otrzymane bez tagu DONE_TAG, od najnowszej — strona po stronie."""
    url = f"{API}/invoices/"
    params = {"direction": "received", "tags_none": DONE_TAG, "page_size": 100}
    while url:
        r = requests.get(url, headers=HEADERS, params=params, timeout=30)
        if r.status_code == 429:  # limit zapytań — poczekaj i spróbuj ponownie
            time.sleep(int(r.headers.get("Retry-After", "5")))
            continue
        r.raise_for_status()
        page = r.json()
        yield from page["results"]
        url, params = page["next"], None  # "next" zawiera już wszystkie parametry


def sync():
    done = []
    for invoice in new_invoices():
        if not invoice["has_details"]:
            continue  # XML jeszcze się pobiera — weźmiemy przy następnym przebiegu
        detail = requests.get(f"{API}/invoices/{invoice['id']}/", headers=HEADERS, timeout=30).json()
        save_to_erp(detail)  # Twoja logika: nagłówek, pozycje (detail["lines"]), płatność…
        done.append(invoice["id"])
    if done:
        requests.post(
            f"{API}/invoices/bulk-tags/",
            headers=HEADERS,
            json={"invoice_ids": done, "add": [DONE_TAG]},
            timeout=30,
        ).raise_for_status()
    print(f"Przeniesiono {len(done)} faktur")


def save_to_erp(invoice):
    print(invoice["invoice_number"], invoice["counterparty_name"], invoice["gross_amount"], invoice["currency"])


if __name__ == "__main__":
    sync()  # uruchamiaj np. co 10 minut (cron, harmonogram zadań)

Dlaczego has_details?

Fakturę widać w API od razu po jej wykryciu w KSeF (nagłówek: numer, kontrahent, kwoty). Pełny XML z pozycjami pobieramy chwilę później — przy dużym imporcie historii może to potrwać dłużej ze względu na limity KSeF. Pole has_details zmienia się na true, gdy szczegóły są gotowe.

Wolisz bez tagów? Zapamiętuj największe ksef_stored_at z poprzedniego przebiegu i czytaj listę (posortowaną od najnowszych), dopóki nie trafisz na starsze. Do oznaczania przetworzonych możesz też użyć pola is_read.

Podłączenie firmy do KSeF przez API

Biura rachunkowe i integratorzy mogą dodawać firmy klientów bez klikania w panelu.

  1. Dodaj firmę — POST /organizations/ z NIP-em. Nazwę i adres możesz podać albo uzupełnić później.
  2. Zapisz połączenie — PUT /ksef/connection/ z tokenem KSeF (uprawnienie InvoiceRead) albo certyfikatem. Sekrety szyfrujemy i nigdy ich nie zwracamy.
  3. Sprawdź — POST /ksef/connection/test/ łączy się z KSeF. Po sukcesie sami zaczynamy import historii.
  4. Poczekaj na import — GET /ksef/connection/, aż initial_import_done będzie true. Od tej chwili nowe faktury pojawiają się same.
POST/api/v1/organizations/
curl -X POST https://ksefmobile.pl/api/v1/organizations/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "nip": "5260250274",
  "name": "Acme Dostawy sp. z o.o."
}'
PUT/api/v1/ksef/connection/
curl -X PUT https://ksefmobile.pl/api/v1/ksef/connection/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "environment": "PRODUCTION",
  "nip": "5260250274",
  "auth_method": "token",
  "ksef_token": "20261001-EC-…",
  "monitor_received": true,
  "monitor_issued": true
}'
POST/api/v1/ksef/connection/test/
curl -X POST https://ksefmobile.pl/api/v1/ksef/connection/test/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"

Plan

Liczba firm na koncie zależy od planu. Po przekroczeniu dostaniesz 402 organization_limit.

Comiesięczne zestawienie dla księgowej

Jedno zapytanie: otrzymane i wystawione za poprzedni miesiąc, jako dwa pliki Excel, prosto do skrzynki księgowej.

Dostępne w planach Standard i Biuro. Wysyłamy z naszej domeny; odpowiedź księgowej trafia do Ciebie, a Ty dostajesz kopię z dopiskiem, do kogo poszła. Możesz też włączyć wysyłkę automatyczną w ustawieniach — wtedy nie potrzebujesz żadnego kodu.

POST/api/v1/accountant/send/
curl -X POST https://ksefmobile.pl/api/v1/accountant/send/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "recipients": [
    "[email protected]"
  ],
  "format": "xlsx",
  "parts": [
    {
      "direction": "received",
      "filters": {
        "date_from": "2026-09-01",
        "date_to": "2026-09-30"
      }
    },
    {
      "direction": "issued",
      "filters": {
        "date_from": "2026-09-01",
        "date_to": "2026-09-30"
      }
    }
  ],
  "message": "Dzień dobry, w załączniku faktury za wrzesień."
}'

Podatki z faktur przez API

Ile zostaje z faktury na rękę, ile podatku za miesiąc i która forma opodatkowania się opłaca — te same liczby co w kalkulatorze panelu, z ustawień podatkowych firmy.

Dostępne w planach Standard i Biuro. Wszystko liczy się z zapisanych ustawień firmy (forma, VAT, ZUS, IP Box) i kosztów spoza KSeF — ustaw je raz w panelu albo przez PUT /invoices/tax-settings/.

1. Jedna faktura: VAT, PIT, zdrowotna, na rękę

GET/api/v1/invoices/{id}/tax-breakdown/
curl https://ksefmobile.pl/api/v1/invoices/82e6bfe3-6776-5a3b-ab9d-cb9edf75ce11/tax-breakdown/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY"

Dla sprzedaży dostajesz vat_due, pit, health, take_home; dla kosztu — vat_deductible, pit_saved, real_cost. Faktura przypisana do projektu IP Box ma dodatkowo ip_box z podatkiem 5%. Ten sam wynik jako PDF: /invoices/{id}/tax-breakdown/pdf/.

2. Zaliczka za miesiąc, kwartał albo rok

GET/api/v1/invoices/tax-estimate/
curl -G https://ksefmobile.pl/api/v1/invoices/tax-estimate/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d period=2026-09

Zaliczka liczy się narastająco od stycznia (tax.cumulative), z limitem odliczenia składki zdrowotnej i — przy prowadzonym module IP Box — udziałem dochodu kwalifikowanego (ip_box_module). Parametry w zapytaniu nadpisują zapisane ustawienia, więc „co jeśli przejdę na ryczałt 12%?” to jedno zapytanie z form=ryczalt&ryczalt_rate=12.

3. Która forma się opłaca

POST/api/v1/invoices/tax-compare/
curl -X POST https://ksefmobile.pl/api/v1/invoices/tax-compare/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "organization": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "answers": {
    "growth": 10
  }
}'

Ciężkie obliczenie

Porównanie przelicza kilkaset wariantów (progi, scenariusze). Wywołuj je na żądanie użytkownika albo raz dziennie i trzymaj wynik u siebie — nie przy każdym odświeżeniu ekranu.

IP Box krok po kroku

Od projektów, przez przypisanie faktur i reguły, po ewidencję w Excelu — np. żeby przypisywać faktury automatycznie w Twoim systemie do zarządzania projektami.

Dostępne w planach Standard i Biuro, zawsze dla jednej firmy (X-Organization). Zapis wymaga klucza z uprawnieniem do zapisu.

1. Projekty

POST/api/v1/ipbox/projects/
curl -X POST https://ksefmobile.pl/api/v1/ipbox/projects/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Aplikacja rezerwacji",
  "kind": "software",
  "started_on": "2026-01-01",
  "description": "Program komputerowy tworzony dla klienta…"
}'

2. Co czeka na przypisanie

GET/api/v1/ipbox/queue/
curl -G https://ksefmobile.pl/api/v1/ipbox/queue/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d year=2026

Każda faktura ma suggestion (z reguły, historii kontrahenta albo okresu projektu) i active_projects — projekty, których okres obejmuje datę faktury.

3. Przypisz i zapisz regułę

POST/api/v1/ipbox/assign/
curl -X POST https://ksefmobile.pl/api/v1/ipbox/assign/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "invoices": [
    "a92fdb89-b57f-55d4-8727-e6c694f9b459"
  ],
  "role": "project",
  "project": "PROJECT_ID",
  "nexus": "a"
}'

Odpowiedź z suggestion proponuje to samo dla pozostałych faktur kontrahenta — POST /ipbox/apply-suggestion/ z year przypisze je od razu, a POST /ipbox/rules/ sprawi, że przyszłe faktury przypiszą się same.

4. Sprawdź i pobierz ewidencję

GET/api/v1/ipbox/check/
curl -G https://ksefmobile.pl/api/v1/ipbox/check/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d year=2026
GET/api/v1/ipbox/ewidencja.xlsx
curl -G https://ksefmobile.pl/api/v1/ipbox/ewidencja.xlsx \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d year=2026 \
  -o ewidencja-ip-box-2026.xlsx
Zasoby API

Firmy

Firma to jeden NIP z własnym połączeniem z KSeF i własnymi fakturami. Jedno konto może mieć wiele firm (np. biuro rachunkowe).

Obiekt firmy

Pola

  • iduuid
    Identyfikator firmy — wartość nagłówka X-Organization.
  • namestring
    Nazwa firmy.
  • nipstring
    NIP (10 cyfr).
  • addressstring
    Adres (z białej listy VAT albo podany przy dodaniu).
  • rolestring
    Twoja rola w firmie.
    ownermember
  • notifications_enabledboolean
    Czy dostajesz powiadomienia push o fakturach tej firmy.
  • connectionobject | null
    Skrót stanu połączenia z KSeF albo null, gdy firma nie ma połączenia. Pełne dane: połączenie KSeF.
  • unread_countinteger
    Nieprzeczytane faktury (bez wykluczonych).
  • invoice_countinteger
    Wszystkie faktury firmy (bez wykluczonych).
Obiekt firmy
{
  "id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "name": "Jan Kowalski Usługi",
  "nip": "7262475736",
  "address": "ul. Szewska 1/1, 91-855 Łódź",
  "role": "owner",
  "notifications_enabled": true,
  "connection": {
    "status": "active",
    "auth_method": "token",
    "environment": "DEMO",
    "last_success_at": "2026-10-01T17:38:32.872871Z",
    "last_error": "",
    "certificate_expires_at": null,
    "last_poll_at": "2026-10-01T17:38:32.853142Z",
    "next_poll_at": "2026-10-01T17:48:43.520343Z",
    "poll_interval_seconds": 600
  },
  "unread_count": 1,
  "invoice_count": 585
}

Lista firm

GET/api/v1/organizations/
klucz: odczyt

Firmy konta z włączonym API, w kolejności dodania, ze stanem połączenia i liczbą nieprzeczytanych faktur.

GET/api/v1/organizations/
curl https://ksefmobile.pl/api/v1/organizations/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY"
Odpowiedź 200
[
  {
    "id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
    "name": "Jan Kowalski Usługi",
    "nip": "7262475736",
    "address": "ul. Szewska 1/1, 91-855 Łódź",
    "role": "owner",
    "notifications_enabled": true,
    "connection": {
      "status": "active",
      "auth_method": "token",
      "environment": "DEMO",
      "last_success_at": "2026-10-01T17:38:32.872871Z",
      "last_error": "",
      "certificate_expires_at": null,
      "last_poll_at": "2026-10-01T17:38:32.853142Z",
      "next_poll_at": "2026-10-01T17:48:43.520343Z",
      "poll_interval_seconds": 600
    },
    "unread_count": 1,
    "invoice_count": 585
  }
]

Dodaj firmę

POST/api/v1/organizations/
klucz: odczyt i zapis

Tworzy firmę, której jesteś właścicielem. Firma dodana kluczem API ma od razu włączone API. Następny krok: zapisz połączenie z KSeF.

Treść zapytania (JSON)

  • nipstring
    NIP firmy (walidowany).
  • namestring
    Nazwa; bez niej użyjemy NIP-u.

Limit firm zależy od planu — po jego przekroczeniu 402 organization_limit.

POST/api/v1/organizations/
curl -X POST https://ksefmobile.pl/api/v1/organizations/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "nip": "5260250274",
  "name": "Acme Dostawy sp. z o.o."
}'
Odpowiedź 201
{
  "id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "name": "Acme Dostawy sp. z o.o.",
  "nip": "5260250274",
  "address": "",
  "role": "owner",
  "notifications_enabled": true,
  "connection": null,
  "unread_count": 0,
  "invoice_count": 0
}

Pobierz firmę

GET/api/v1/organizations/{id}/
klucz: odczyt

Jedna firma.

Parametry ścieżki

  • iduuidwymagany
    Id firmy.
GET/api/v1/organizations/{id}/
curl https://ksefmobile.pl/api/v1/organizations/59a25bf2-555b-57f0-a795-d897b8faceb2/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY"
Odpowiedź 200
{
  "id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "name": "Jan Kowalski Usługi",
  "nip": "7262475736",
  "address": "ul. Szewska 1/1, 91-855 Łódź",
  "role": "owner",
  "notifications_enabled": true,
  "connection": {
    "status": "active",
    "auth_method": "token",
    "environment": "DEMO",
    "last_success_at": "2026-10-01T17:38:32.872871Z",
    "last_error": "",
    "certificate_expires_at": null,
    "last_poll_at": "2026-10-01T17:38:32.853142Z",
    "next_poll_at": "2026-10-01T17:48:43.520343Z",
    "poll_interval_seconds": 600
  },
  "unread_count": 1,
  "invoice_count": 585
}

Zmień dane firmy

PATCH/api/v1/organizations/{id}/
klucz: odczyt i zapis

Nazwa, NIP, adres. Tylko właściciel firmy.

Parametry ścieżki

  • iduuidwymagany
    Id firmy.

Treść zapytania (JSON)

  • namestring
    Nazwa.
  • nipstring
    NIP.
  • addressstring
    Adres.
PATCH/api/v1/organizations/{id}/
curl -X PATCH https://ksefmobile.pl/api/v1/organizations/59a25bf2-555b-57f0-a795-d897b8faceb2/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Jan Kowalski Usługi Sp. J."
}'
Odpowiedź 200
{
  "id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "name": "Jan Kowalski Usługi Sp. J.",
  "nip": "7262475736",
  "address": "ul. Szewska 1/1, 91-855 Łódź",
  "role": "owner",
  "notifications_enabled": true,
  "connection": {
    "status": "active",
    "auth_method": "token",
    "environment": "DEMO",
    "last_success_at": "2026-10-01T17:38:32.872871Z",
    "last_error": "",
    "certificate_expires_at": null,
    "last_poll_at": "2026-10-01T17:38:32.853142Z",
    "next_poll_at": "2026-10-01T17:48:43.520343Z",
    "poll_interval_seconds": 600
  },
  "unread_count": 1,
  "invoice_count": 585
}

Usuń firmę

DELETE/api/v1/organizations/{id}/
klucz: odczyt i zapis

Ostatni właściciel usuwa firmę razem z połączeniem z KSeF i fakturami (w KSeF nic się nie zmienia). Pozostali tylko opuszczają firmę.

Parametry ścieżki

  • iduuidwymagany
    Id firmy.
DELETE/api/v1/organizations/{id}/
curl -X DELETE https://ksefmobile.pl/api/v1/organizations/59a25bf2-555b-57f0-a795-d897b8faceb2/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY"
Brak treści (204).

Połączenie z KSeF

Każda firma ma jedno połączenie z KSeF — token z uprawnieniem do odczytu faktur albo certyfikat. Sekrety są szyfrowane i nigdy nie wracają w odpowiedziach.

Obiekt połączenia

Pola

  • iduuid
    Id połączenia.
  • environmentstring
    Środowisko KSeF. DEMO i TEST służą do prób.
    PRODUCTIONDEMOTEST
  • nipstring
    NIP, którego faktury czytamy.
  • auth_methodstring
    Sposób uwierzytelnienia w KSeF.
    tokencertificate
  • has_tokenboolean
    Token jest zapisany (samego tokenu nigdy nie zwracamy).
  • has_certificateboolean
    Certyfikat i klucz są zapisane.
  • certificate_subjectstring
    Właściciel certyfikatu.
  • certificate_expires_atdatetime | null
    Ważność certyfikatu.
  • monitor_receivedboolean
    Pobieramy faktury otrzymane.
  • monitor_issuedboolean
    Pobieramy faktury wystawione.
  • statusstring
    pending — czeka na test; active — działa; error — chwilowe błędy KSeF (ponawiamy); auth_error — KSeF odrzucił token/certyfikat; paused — wstrzymane.
    pendingactiveerrorauth_errorpaused
  • last_errorstring
    Ostatni błąd (pusty, gdy wszystko działa).
  • last_poll_atdatetime | null
    Ostatnia próba sprawdzenia KSeF.
  • last_success_atdatetime | null
    Ostatnie udane sprawdzenie.
  • next_poll_atdatetime | null
    Następne sprawdzenie.
  • initial_import_doneboolean
    Import historii zakończony.
  • poll_interval_secondsinteger
    Interwał sprawdzania KSeF w planie.
Obiekt połączenia
{
  "id": "09f1323f-59ed-53bd-9fa7-bee2648b8b07",
  "environment": "DEMO",
  "nip": "7262475736",
  "auth_method": "token",
  "has_token": true,
  "has_certificate": false,
  "certificate_subject": "",
  "certificate_expires_at": null,
  "monitor_received": true,
  "monitor_issued": false,
  "status": "active",
  "last_error": "",
  "last_poll_at": "2026-10-01T19:38:32.853142+02:00",
  "last_success_at": "2026-10-01T19:38:32.872871+02:00",
  "next_poll_at": "2026-10-01T19:48:43.520343+02:00",
  "initial_import_done": true,
  "poll_interval_seconds": 600
}

Pobierz połączenie

GET/api/v1/ksef/connection/
klucz: odczyt

Połączenie firmy z X-Organization. connection jest null, gdy firma nie ma połączenia.

Parametry

  • X-Organizationheader
    Id firmy (bez nagłówka — pierwsza firma konta).
GET/api/v1/ksef/connection/
curl https://ksefmobile.pl/api/v1/ksef/connection/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"
Odpowiedź 200
{
  "connection": {
    "id": "09f1323f-59ed-53bd-9fa7-bee2648b8b07",
    "environment": "DEMO",
    "nip": "7262475736",
    "auth_method": "token",
    "has_token": true,
    "has_certificate": false,
    "certificate_subject": "",
    "certificate_expires_at": null,
    "monitor_received": true,
    "monitor_issued": false,
    "status": "active",
    "last_error": "",
    "last_poll_at": "2026-10-01T19:38:32.853142+02:00",
    "last_success_at": "2026-10-01T19:38:32.872871+02:00",
    "next_poll_at": "2026-10-01T19:48:43.520343+02:00",
    "initial_import_done": true,
    "poll_interval_seconds": 600
  }
}

Zapisz połączenie

PUT/api/v1/ksef/connection/
klucz: odczyt i zapis

Tworzy (201) albo zmienia (200) połączenie. Przy zmianie wyślij tylko zmieniane pola — puste sekrety zostawiają zapisane. Potem wywołaj test połączenia.

Nagłówki i parametry

  • X-Organizationheader
    Id firmy (bez nagłówka — pierwsza firma konta).

Treść zapytania (JSON)

  • nipstringwymagany
    NIP firmy w KSeF.
  • environmentstringdomyślnie PRODUCTION
    Środowisko KSeF.
    PRODUCTIONDEMOTEST
  • auth_methodstringdomyślnie token
    Sposób uwierzytelnienia.
    tokencertificate
  • ksef_tokenstring
    Token KSeF z uprawnieniem InvoiceRead (dla token).
  • certificate_p12string (base64)
    Plik .p12/.pfx w base64 (dla certificate) — albo para PEM poniżej.
  • certificate_pem / private_key_pemstring
    Certyfikat i klucz prywatny w PEM.
  • key_passwordstring
    Hasło klucza / pliku .p12.
  • monitor_receivedbooleandomyślnie true
    Pobieraj faktury otrzymane.
  • monitor_issuedbooleandomyślnie false
    Pobieraj faktury wystawione.
PUT/api/v1/ksef/connection/
curl -X PUT https://ksefmobile.pl/api/v1/ksef/connection/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "nip": "7262475736",
  "environment": "PRODUCTION",
  "auth_method": "token",
  "ksef_token": "20261001-EC-…",
  "monitor_received": true,
  "monitor_issued": true
}'
Odpowiedź 201
{
  "connection": {
    "id": "09f1323f-59ed-53bd-9fa7-bee2648b8b07",
    "environment": "DEMO",
    "nip": "7262475736",
    "auth_method": "token",
    "has_token": true,
    "has_certificate": false,
    "certificate_subject": "",
    "certificate_expires_at": null,
    "monitor_received": true,
    "monitor_issued": true,
    "status": "pending",
    "last_error": "",
    "last_poll_at": null,
    "last_success_at": null,
    "next_poll_at": null,
    "initial_import_done": false,
    "poll_interval_seconds": 600
  }
}

Testuj połączenie

POST/api/v1/ksef/connection/test/
klucz: odczyt i zapis

Łączy się z KSeF zapisanymi danymi. Po sukcesie status zmienia się na active i — przy pierwszym teście — zaczyna się import historii (zakres zależy od planu).

Nagłówki i parametry

  • X-Organizationheader
    Id firmy (bez nagłówka — pierwsza firma konta).

400 — KSeF odrzucił token/certyfikat (sprawdź NIP, środowisko, uprawnienia); 429 — KSeF ogranicza zapytania; 502 — KSeF nie odpowiada. Limit: 10 testów na godzinę.

POST/api/v1/ksef/connection/test/
curl -X POST https://ksefmobile.pl/api/v1/ksef/connection/test/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"
Odpowiedź 200
{
  "connection": {
    "id": "09f1323f-59ed-53bd-9fa7-bee2648b8b07",
    "environment": "DEMO",
    "nip": "7262475736",
    "auth_method": "token",
    "has_token": true,
    "has_certificate": false,
    "certificate_subject": "",
    "certificate_expires_at": null,
    "monitor_received": true,
    "monitor_issued": false,
    "status": "active",
    "last_error": "",
    "last_poll_at": "2026-10-01T19:38:32.853142+02:00",
    "last_success_at": "2026-10-01T19:38:32.872871+02:00",
    "next_poll_at": "2026-10-01T19:48:43.520343+02:00",
    "initial_import_done": true,
    "poll_interval_seconds": 600
  }
}

Importuj historię

POST/api/v1/ksef/connection/import/
klucz: odczyt i zapis

Pobiera ponownie faktury z ostatnich dni (np. po przerwie). Działa w tle, bez powiadomień i bez zużywania limitu planu.

Nagłówki i parametry

  • X-Organizationheader
    Id firmy (bez nagłówka — pierwsza firma konta).

Treść zapytania (JSON)

  • daysintegerdomyślnie 30
    Ile dni wstecz — najwyżej tyle, ile obejmuje historia planu.
POST/api/v1/ksef/connection/import/
curl -X POST https://ksefmobile.pl/api/v1/ksef/connection/import/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "days": 90
}'
Odpowiedź 202
{
  "detail": "Import rozpoczęty.",
  "days": 90
}

Sprawdź KSeF teraz

POST/api/v1/ksef/connection/poll-now/
klucz: odczyt i zapis

Prosi o natychmiastowe sprawdzenie KSeF (jak „odśwież” w aplikacji). Częstotliwość jest ograniczona planem — queued: false oznacza, że sprawdzaliśmy przed chwilą.

Nagłówki i parametry

  • X-Organizationheader
    Id firmy (bez nagłówka — pierwsza firma konta).
POST/api/v1/ksef/connection/poll-now/
curl -X POST https://ksefmobile.pl/api/v1/ksef/connection/poll-now/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"
Odpowiedź 202
{
  "queued": true,
  "last_poll_at": "2026-10-01T19:38:32.853142+02:00"
}

Usuń połączenie

DELETE/api/v1/ksef/connection/
klucz: odczyt i zapis

Usuwa połączenie i zapisane sekrety. Faktury zostają.

Parametry

  • X-Organizationheader
    Id firmy (bez nagłówka — pierwsza firma konta).
DELETE/api/v1/ksef/connection/
curl -X DELETE https://ksefmobile.pl/api/v1/ksef/connection/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"
Brak treści (204).

Faktury

Faktury otrzymane i wystawione z KSeF. Nagłówek (kontrahent, kwoty, daty) jest od razu po wykryciu faktury, szczegóły z XML-a chwilę później.

Obiekt faktury

Pola

  • iduuid
    Identyfikator faktury w KSeF Mobile.
  • organization_iduuid
    Firma, do której należy faktura.
  • organization_namestring
    Nazwa tej firmy.
  • ksef_numberstring
    Numer KSeF — unikalny identyfikator faktury w KSeF.
  • directionstring
    received — otrzymana (koszt), issued — wystawiona (sprzedaż).
    receivedissued
  • invoice_numberstring
    Numer nadany przez wystawcę.
  • invoice_typestring
    Rodzaj faktury.
    VATKORZALROZUPRKOR_ZALKOR_ROZ
  • counterparty_namestring
    Kontrahent: sprzedawca na otrzymanych, nabywca na wystawionych.
  • counterparty_nipstring
    NIP kontrahenta.
  • net_amountdecimal string
    Kwota netto.
  • vat_amountdecimal string
    Kwota VAT.
  • gross_amountdecimal string
    Kwota brutto.
  • currencystring
    Waluta faktury.
  • issue_datedate
    Data wystawienia.
  • due_datedate | null
    Termin płatności.
  • ksef_stored_atdatetime
    Kiedy faktura trafiła do KSeF (kolejność listy).
  • is_readboolean
    Przeczytana (edytowalne).
  • is_paidboolean
    Opłacona (edytowalne).
  • lockedboolean
    Poza limitem planu: nagłówek jest, szczegóły/PDF/XML odpowiadają 402.
  • has_detailsboolean
    XML pobrany — są pozycje, płatność, PDF.
  • tagsstring[]
    Tagi (edytowalne, do 20).
  • notestring
    Twój opis (edytowalne, do 2000 znaków).
  • is_excludedboolean
    Wykluczona z sum, raportów i eksportów (edytowalne).
  • excluded_by_ruleboolean
    Wykluczona regułą kontrahenta.
  • vat_deductionstring
    Odliczenie VAT od zakupu: 100%, 50% (auto/leasing, użytek mieszany), brak.
    fullvehicle_mixednone
  • vat_deduction_sourcestring
    Skąd odliczenie: domyślne, z reguły dostawcy, ustawione ręcznie.
    defaultrulemanual
  • Tylko w szczegółach
    Poniższe pola zwraca GET /invoices/{id}/.
Obiekt faktury
{
  "id": "c8beaf06-9b5b-5758-acaa-b57c306408c3",
  "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "organization_name": "Jan Kowalski Usługi",
  "ksef_number": "9539043265-20260930-F98D6F0DEF4C-72",
  "direction": "received",
  "invoice_number": "SIM/2026/0930/162440/317",
  "invoice_type": "VAT",
  "counterparty_name": "Drukarnia Pod Lipą s.c.",
  "counterparty_nip": "9539043265",
  "net_amount": "1128.46",
  "vat_amount": "259.54",
  "gross_amount": "1388.00",
  "currency": "PLN",
  "issue_date": "2026-09-30",
  "due_date": "2026-10-14",
  "ksef_stored_at": "2026-09-30T16:24:40.273412+02:00",
  "is_read": false,
  "is_paid": false,
  "locked": false,
  "has_details": true,
  "tags": [],
  "note": "Ulotki na targi",
  "is_excluded": false,
  "excluded_by_rule": false,
  "vat_deduction": "full",
  "vat_deduction_source": "default",
  "seller_nip": "9539043265",
  "seller_name": "Drukarnia Pod Lipą s.c.",
  "buyer_nip": "7262475736",
  "buyer_name": "Jan Kowalski Usługi",
  "sale_date": "2026-09-30",
  "bank_account": "",
  "xml_status": "fetched",
  "lines": [
    {
      "position": 1,
      "name": "Druk materiałów reklamowych",
      "quantity": "1.000000",
      "unit": "szt.",
      "unit_price_net": "1128.460000",
      "unit_price_gross": null,
      "net_amount": "1128.46",
      "gross_amount": null,
      "vat_rate": "23"
    }
  ],
  "details": {
    "seller": {
      "nip": "9539043265",
      "name": "Drukarnia Pod Lipą s.c.",
      "email": "",
      "phone": "",
      "vat_ue": "",
      "country": "PL",
      "other_id": "",
      "address_lines": [
        "ul. Lipowa 8",
        "91-001 Łódź"
      ]
    },
    "buyer": {
      "nip": "7262475736",
      "name": "Jan Kowalski Usługi",
      "email": "",
      "phone": "",
      "vat_ue": "",
      "country": "",
      "other_id": "",
      "address_lines": []
    },
    "payment": {
      "paid": false,
      "method": "przelew",
      "due_date": "2026-10-14",
      "bank_name": "",
      "paid_date": "",
      "bank_account": ""
    },
    "vat_summary": [
      {
        "net": "1128.46",
        "vat": "259.54",
        "label": "23% / 22%"
      }
    ],
    "correction": null,
    "notes": [],
    "place_of_issue": ""
  }
}

Lista faktur

GET/api/v1/invoices/
klucz: odczyt

Faktury firm z X-Organization, od ostatnio zapisanej w KSeF, stronicowane kursorem. Wszystkie filtry można łączyć.

Parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.
  • directionstring
    Kierunek: otrzymane (koszty) albo wystawione (sprzedaż). Bez parametru — oba.
    receivedissued
  • date_fromdate
    Data wystawienia od (włącznie), RRRR-MM-DD.
  • date_todate
    Data wystawienia do (włącznie).
  • qstring
    Wyszukiwanie: numer faktury, numer KSeF, kontrahent (bez polskich znaków też), NIP, kwota („1 388,00”, „668” — także fragment), fragment numeru konta, opis, nazwa tagu.
  • counterparty_nipstring
    Faktury od sprzedawcy (otrzymane) albo dla nabywcy (wystawione) o tym NIP-ie.
  • amount_mindecimal
    Kwota brutto od.
  • amount_maxdecimal
    Kwota brutto do.
  • currencystring
    Waluta, np. EUR.
  • invoice_typestring
    Rodzaj faktury z KSeF.
    VATKORZALROZUPRKOR_ZALKOR_ROZ
  • is_readboolean
    false — tylko nieprzeczytane (nowe).
  • is_paidboolean
    Opłacone / nieopłacone.
  • overdueboolean
    true — otrzymane, nieopłacone, po terminie płatności.
  • tagsstring
    Mają wszystkie tagi z listy (po przecinku, wielkość liter bez znaczenia).
  • tags_anystring
    Mają co najmniej jeden z tagów.
  • tags_nonestring
    Nie mają żadnego z tagów — np. tags_none=w-erp do synchronizacji.
  • untaggedboolean
    true — bez żadnego tagu, false — z co najmniej jednym.
  • excludedstring
    Wykluczone faktury (np. regułą kontrahenta) są domyślnie ukryte. only — tylko wykluczone, include — wszystkie.
    onlyinclude
  • page_sizeintegerdomyślnie 30
    Faktur na stronę, najwyżej 100.
  • cursorstring
    Kursor kolejnej strony — użyj adresu z next.
GET/api/v1/invoices/
curl -G https://ksefmobile.pl/api/v1/invoices/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d direction=received \
  -d date_from=2026-09-01 \
  -d date_to=2026-09-30 \
  -d is_paid=false
Odpowiedź 200
{
  "next": "https://ksefmobile.pl/api/v1/invoices/?cursor=cD0yMDI2LTA5LTI2KzA3JTNBMTIlM0EwMCUyQjAwJTNBMDA%3D&date_from=2026-09-01&date_to=2026-09-30&direction=received&page_size=2",
  "previous": null,
  "results": [
    {
      "id": "c8beaf06-9b5b-5758-acaa-b57c306408c3",
      "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
      "organization_name": "Jan Kowalski Usługi",
      "ksef_number": "9539043265-20260930-F98D6F0DEF4C-72",
      "direction": "received",
      "invoice_number": "SIM/2026/0930/162440/317",
      "invoice_type": "VAT",
      "counterparty_name": "Drukarnia Pod Lipą s.c.",
      "counterparty_nip": "9539043265",
      "net_amount": "1128.46",
      "vat_amount": "259.54",
      "gross_amount": "1388.00",
      "currency": "PLN",
      "issue_date": "2026-09-30",
      "due_date": "2026-10-14",
      "ksef_stored_at": "2026-09-30T16:24:40.273412+02:00",
      "is_read": false,
      "is_paid": false,
      "locked": false,
      "has_details": true,
      "tags": [],
      "note": "Ulotki na targi",
      "is_excluded": false,
      "excluded_by_rule": false,
      "vat_deduction": "full",
      "vat_deduction_source": "default"
    }
  ]
}

Pobierz fakturę

GET/api/v1/invoices/{id}/
klucz: odczyt

Pełne dane: strony, pozycje, płatność, podsumowanie VAT. Dla faktury poza limitem planu (locked: true) lines i details są puste.

Parametry ścieżki

  • iduuidwymagany
    Id faktury.
GET/api/v1/invoices/{id}/
curl https://ksefmobile.pl/api/v1/invoices/c8beaf06-9b5b-5758-acaa-b57c306408c3/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: all"
Odpowiedź 200
{
  "id": "c8beaf06-9b5b-5758-acaa-b57c306408c3",
  "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "organization_name": "Jan Kowalski Usługi",
  "ksef_number": "9539043265-20260930-F98D6F0DEF4C-72",
  "direction": "received",
  "invoice_number": "SIM/2026/0930/162440/317",
  "invoice_type": "VAT",
  "counterparty_name": "Drukarnia Pod Lipą s.c.",
  "counterparty_nip": "9539043265",
  "net_amount": "1128.46",
  "vat_amount": "259.54",
  "gross_amount": "1388.00",
  "currency": "PLN",
  "issue_date": "2026-09-30",
  "due_date": "2026-10-14",
  "ksef_stored_at": "2026-09-30T16:24:40.273412+02:00",
  "is_read": false,
  "is_paid": false,
  "locked": false,
  "has_details": true,
  "tags": [],
  "note": "Ulotki na targi",
  "is_excluded": false,
  "excluded_by_rule": false,
  "vat_deduction": "full",
  "vat_deduction_source": "default",
  "seller_nip": "9539043265",
  "seller_name": "Drukarnia Pod Lipą s.c.",
  "buyer_nip": "7262475736",
  "buyer_name": "Jan Kowalski Usługi",
  "sale_date": "2026-09-30",
  "bank_account": "",
  "xml_status": "fetched",
  "lines": [
    {
      "position": 1,
      "name": "Druk materiałów reklamowych",
      "quantity": "1.000000",
      "unit": "szt.",
      "unit_price_net": "1128.460000",
      "unit_price_gross": null,
      "net_amount": "1128.46",
      "gross_amount": null,
      "vat_rate": "23"
    }
  ],
  "details": {
    "seller": {
      "nip": "9539043265",
      "name": "Drukarnia Pod Lipą s.c.",
      "email": "",
      "phone": "",
      "vat_ue": "",
      "country": "PL",
      "other_id": "",
      "address_lines": [
        "ul. Lipowa 8",
        "91-001 Łódź"
      ]
    },
    "buyer": {
      "nip": "7262475736",
      "name": "Jan Kowalski Usługi",
      "email": "",
      "phone": "",
      "vat_ue": "",
      "country": "",
      "other_id": "",
      "address_lines": []
    },
    "payment": {
      "paid": false,
      "method": "przelew",
      "due_date": "2026-10-14",
      "bank_name": "",
      "paid_date": "",
      "bank_account": ""
    },
    "vat_summary": [
      {
        "net": "1128.46",
        "vat": "259.54",
        "label": "23% / 22%"
      }
    ],
    "correction": null,
    "notes": [],
    "place_of_issue": ""
  }
}

Zmień fakturę

PATCH/api/v1/invoices/{id}/
klucz: odczyt i zapis

Twoje oznaczenia — dane z KSeF są tylko do odczytu. Zmiany widać od razu w aplikacji i panelu.

Parametry ścieżki

  • iduuidwymagany
    Id faktury.

Treść zapytania (JSON)

  • is_readboolean
    Przeczytana.
  • is_paidboolean
    Opłacona.
  • notestring
    Opis (do 2000 znaków).
  • tagsstring[]
    Pełna lista tagów (zastępuje dotychczasowe). Do dodawania/usuwania pojedynczo: bulk-tags.
  • is_excludedboolean
    Wyklucz z sum, raportów i eksportów.
  • vat_deductionstring
    Odliczenie VAT tej faktury (wygrywa z regułą dostawcy); inherit — wróć do reguły.
    fullvehicle_mixednoneinherit
PATCH/api/v1/invoices/{id}/
curl -X PATCH https://ksefmobile.pl/api/v1/invoices/c8beaf06-9b5b-5758-acaa-b57c306408c3/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: all" \
  -H "Content-Type: application/json" \
  -d '{
  "is_paid": true,
  "note": "Zapłacono 2026-10-01",
  "tags": [
    "marketing"
  ]
}'
Odpowiedź 200
{
  "id": "c8beaf06-9b5b-5758-acaa-b57c306408c3",
  "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "organization_name": "Jan Kowalski Usługi",
  "ksef_number": "9539043265-20260930-F98D6F0DEF4C-72",
  "direction": "received",
  "invoice_number": "SIM/2026/0930/162440/317",
  "invoice_type": "VAT",
  "counterparty_name": "Drukarnia Pod Lipą s.c.",
  "counterparty_nip": "9539043265",
  "net_amount": "1128.46",
  "vat_amount": "259.54",
  "gross_amount": "1388.00",
  "currency": "PLN",
  "issue_date": "2026-09-30",
  "due_date": "2026-10-14",
  "ksef_stored_at": "2026-09-30T16:24:40.273412+02:00",
  "is_read": false,
  "is_paid": true,
  "locked": false,
  "has_details": true,
  "tags": [
    "marketing"
  ],
  "note": "Zapłacono 2026-10-01",
  "is_excluded": false,
  "excluded_by_rule": false,
  "vat_deduction": "full",
  "vat_deduction_source": "default",
  "seller_nip": "9539043265",
  "seller_name": "Drukarnia Pod Lipą s.c.",
  "buyer_nip": "7262475736",
  "buyer_name": "Jan Kowalski Usługi",
  "sale_date": "2026-09-30",
  "bank_account": "",
  "xml_status": "fetched",
  "lines": [
    {
      "position": 1,
      "name": "Druk materiałów reklamowych",
      "quantity": "1.000000",
      "unit": "szt.",
      "unit_price_net": "1128.460000",
      "unit_price_gross": null,
      "net_amount": "1128.46",
      "gross_amount": null,
      "vat_rate": "23"
    }
  ],
  "details": {
    "seller": {
      "nip": "9539043265",
      "name": "Drukarnia Pod Lipą s.c.",
      "email": "",
      "phone": "",
      "vat_ue": "",
      "country": "PL",
      "other_id": "",
      "address_lines": [
        "ul. Lipowa 8",
        "91-001 Łódź"
      ]
    },
    "buyer": {
      "nip": "7262475736",
      "name": "Jan Kowalski Usługi",
      "email": "",
      "phone": "",
      "vat_ue": "",
      "country": "",
      "other_id": "",
      "address_lines": []
    },
    "payment": {
      "paid": false,
      "method": "przelew",
      "due_date": "2026-10-14",
      "bank_name": "",
      "paid_date": "",
      "bank_account": ""
    },
    "vat_summary": [
      {
        "net": "1128.46",
        "vat": "259.54",
        "label": "23% / 22%"
      }
    ],
    "correction": null,
    "notes": [],
    "place_of_issue": ""
  }
}

PDF faktury

GET/api/v1/invoices/{id}/pdf/
klucz: odczyt

Wizualizacja faktury w PDF (z kodem QR KSeF) — taka sama jak w aplikacji.

Parametry ścieżki

  • iduuidwymagany
    Id faktury.
GET/api/v1/invoices/{id}/pdf/
curl https://ksefmobile.pl/api/v1/invoices/c8beaf06-9b5b-5758-acaa-b57c306408c3/pdf/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: all" \
  -o faktura.pdf
Plik PDF (application/pdf), nazwa w Content-Disposition. 402 quota_exceeded — faktura poza limitem planu.

XML faktury

GET/api/v1/invoices/{id}/xml/
klucz: odczyt

Oryginalny XML z KSeF (FA(2)/FA(3)) — źródło prawdy do importu w systemie księgowym.

Parametry ścieżki

  • iduuidwymagany
    Id faktury.
GET/api/v1/invoices/{id}/xml/
curl https://ksefmobile.pl/api/v1/invoices/c8beaf06-9b5b-5758-acaa-b57c306408c3/xml/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: all" \
  -o faktura.xml
Plik XML (application/xml). 404 — XML jeszcze nie pobrany (has_details: false).

Wizualizacja HTML

GET/api/v1/invoices/{id}/html/
klucz: odczyt

Ta sama wizualizacja co PDF jako strona HTML (responsywna, z trybem ciemnym) — do osadzenia w podglądzie.

Parametry ścieżki

  • iduuidwymagany
    Id faktury.
GET/api/v1/invoices/{id}/html/
curl https://ksefmobile.pl/api/v1/invoices/c8beaf06-9b5b-5758-acaa-b57c306408c3/html/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -o faktura.html
Dokument HTML (text/html).

Pobierz XML z KSeF teraz

POST/api/v1/invoices/{id}/fetch-xml/
klucz: odczyt i zapis

Pobiera XML tej faktury od razu, zamiast czekać w kolejce (np. podczas dużego importu). Zwraca fakturę ze szczegółami.

Parametry ścieżki

  • iduuidwymagany
    Id faktury.

KSeF pozwala pobrać 64 faktury na godzinę na firmę — po wyczerpaniu 429 ksef_rate_limited z retry_after. Faktura i tak pobierze się sama.

POST/api/v1/invoices/{id}/fetch-xml/
curl -X POST https://ksefmobile.pl/api/v1/invoices/c8beaf06-9b5b-5758-acaa-b57c306408c3/fetch-xml/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: all"
Odpowiedź 200
{
  "id": "c8beaf06-9b5b-5758-acaa-b57c306408c3",
  "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "organization_name": "Jan Kowalski Usługi",
  "ksef_number": "9539043265-20260930-F98D6F0DEF4C-72",
  "direction": "received",
  "invoice_number": "SIM/2026/0930/162440/317",
  "invoice_type": "VAT",
  "counterparty_name": "Drukarnia Pod Lipą s.c.",
  "counterparty_nip": "9539043265",
  "net_amount": "1128.46",
  "vat_amount": "259.54",
  "gross_amount": "1388.00",
  "currency": "PLN",
  "issue_date": "2026-09-30",
  "due_date": "2026-10-14",
  "ksef_stored_at": "2026-09-30T16:24:40.273412+02:00",
  "is_read": false,
  "is_paid": false,
  "locked": false,
  "has_details": true,
  "tags": [],
  "note": "Ulotki na targi",
  "is_excluded": false,
  "excluded_by_rule": false,
  "vat_deduction": "full",
  "vat_deduction_source": "default",
  "seller_nip": "9539043265",
  "seller_name": "Drukarnia Pod Lipą s.c.",
  "buyer_nip": "7262475736",
  "buyer_name": "Jan Kowalski Usługi",
  "sale_date": "2026-09-30",
  "bank_account": "",
  "xml_status": "fetched",
  "lines": [
    {
      "position": 1,
      "name": "Druk materiałów reklamowych",
      "quantity": "1.000000",
      "unit": "szt.",
      "unit_price_net": "1128.460000",
      "unit_price_gross": null,
      "net_amount": "1128.46",
      "gross_amount": null,
      "vat_rate": "23"
    }
  ],
  "details": {
    "seller": {
      "nip": "9539043265",
      "name": "Drukarnia Pod Lipą s.c.",
      "email": "",
      "phone": "",
      "vat_ue": "",
      "country": "PL",
      "other_id": "",
      "address_lines": [
        "ul. Lipowa 8",
        "91-001 Łódź"
      ]
    },
    "buyer": {
      "nip": "7262475736",
      "name": "Jan Kowalski Usługi",
      "email": "",
      "phone": "",
      "vat_ue": "",
      "country": "",
      "other_id": "",
      "address_lines": []
    },
    "payment": {
      "paid": false,
      "method": "przelew",
      "due_date": "2026-10-14",
      "bank_name": "",
      "paid_date": "",
      "bank_account": ""
    },
    "vat_summary": [
      {
        "net": "1128.46",
        "vat": "259.54",
        "label": "23% / 22%"
      }
    ],
    "correction": null,
    "notes": [],
    "place_of_issue": ""
  }
}

Dane do przelewu

GET/api/v1/invoices/{id}/payment/
klucz: odczyt

Odbiorca, rachunek, kwota, tytuł, kod QR w standardzie ZBP i pay_url — publiczna strona „Zapłać”, którą możesz wysłać płatnikowi.

Parametry ścieżki

  • iduuidwymagany
    Id faktury.
GET/api/v1/invoices/{id}/payment/
curl https://ksefmobile.pl/api/v1/invoices/c8beaf06-9b5b-5758-acaa-b57c306408c3/payment/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: all"
Odpowiedź 200
{
  "invoice_number": "SIM/2026/0930/162440/317",
  "ksef_number": "9539043265-20260930-F98D6F0DEF4C-72",
  "direction": "received",
  "recipient_name": "Drukarnia Pod Lipą s.c.",
  "recipient_nip": "9539043265",
  "payer_name": "Jan Kowalski Usługi",
  "bank_account": "",
  "bank_name": "",
  "amount": "1388.00",
  "currency": "PLN",
  "title": "SIM/2026/0930/162440/317",
  "issue_date": "2026-09-30",
  "due_date": "2026-10-14",
  "is_paid": false,
  "split_payment": false,
  "vat_amount": "259.54",
  "payment_link": "",
  "qr": "",
  "qr_has_amount": false,
  "pay_url": "https://ksefmobile.pl/zaplac/eyJpIjoiYzhiZWFmMDYtOWI1Yi01NzU4LWFjYWEtYjU3YzMwNjQwOGMzIn0:1xCKsY:Kk97FUiQpN3biXm7kAgKTbZVf0vuJaPscDpo3PoaJJo"
}

Zmień wiele faktur

POST/api/v1/invoices/bulk/
klucz: odczyt i zapis

Jedna zmiana dla wielu faktur: wskazanych przez invoice_ids albo wszystkich pasujących do filters.

Nagłówki i parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.

Treść zapytania (JSON)

  • invoice_idsuuid[]
    Lista faktur (do 5000). Zamiast filters.
  • filtersobject
    Filtry jak w liście faktur.
  • setobjectwymagany
    Jedna z grup: is_read / is_paid / is_excluded (boolean), vat_deduction, albo note z note_mode (replace — zastąp, append — dopisz w nowej linii).
POST/api/v1/invoices/bulk/
curl -X POST https://ksefmobile.pl/api/v1/invoices/bulk/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "filters": {
    "direction": "received",
    "date_to": "2026-08-31",
    "is_paid": false
  },
  "set": {
    "is_paid": true
  }
}'
Odpowiedź 200
{
  "updated": 14
}

Oznacz wszystkie jako przeczytane

POST/api/v1/invoices/mark-all-read/
klucz: odczyt i zapis

Wszystkie nieprzeczytane faktury pasujące do filtrów (parametry jak w liście).

Nagłówki i parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.
  • …filtry
    Dowolne filtry listy.
POST/api/v1/invoices/mark-all-read/
curl -X POST "https://ksefmobile.pl/api/v1/invoices/mark-all-read/?direction=received" \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: all"
Odpowiedź 200
{
  "updated": 3
}

Podsumowanie miesiąca

GET/api/v1/invoices/summary/
klucz: odczyt

Kokpit: sumy netto/VAT/brutto per waluta (otrzymane, wystawione, przefiltrowane), nieprzeczytane, nowe dziś, koszty z 7 miesięcy, do zapłaty i do otrzymania, najwięksi dostawcy, najbliższe płatności.

Parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.
  • monthstring
    Miesiąc RRRR-MM (domyślnie bieżący).
  • …filtry
    Filtry listy wpływają na blok filtered.
GET/api/v1/invoices/summary/
curl -G https://ksefmobile.pl/api/v1/invoices/summary/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d month=2026-09
Odpowiedź 200
{
  "month": "2026-09",
  "received": [
    {
      "currency": "EUR",
      "count": 1,
      "net": "19.02",
      "vat": "4.38",
      "gross": "23.40",
      "no_vat": 0
    },
    {
      "currency": "PLN",
      "count": 28,
      "net": "11296.66",
      "vat": "2571.69",
      "gross": "13868.35",
      "no_vat": 0
    }
  ],
  "issued": [
    {
      "currency": "PLN",
      "count": 9,
      "net": "28249.15",
      "vat": "6497.29",
      "gross": "34746.44",
      "no_vat": 0
    }
  ],
  "filtered": [
    {
      "currency": "EUR",
      "count": 1,
      "net": "19.02",
      "vat": "4.38",
      "gross": "23.40",
      "no_vat": 0
    },
    {
      "currency": "PLN",
      "count": 584,
      "net": "804906.53",
      "vat": "185102.03",
      "gross": "990008.56",
      "no_vat": 0
    }
  ],
  "unread": 1,
  "new_today": 0,
  "history": [
    {
      "month": "2026-03",
      "gross": "14416.88"
    },
    {
      "month": "2026-04",
      "gross": "11973.34"
    }
  ],
  "to_pay": {
    "totals": [
      {
        "currency": "EUR",
        "count": 1,
        "gross": "23.40"
      },
      {
        "currency": "PLN",
        "count": 6,
        "gross": "5494.49"
      }
    ],
    "next_due_date": "2026-10-02"
  },
  "to_collect": {
    "totals": [
      {
        "currency": "PLN",
        "count": 7,
        "gross": "30978.92"
      }
    ]
  },
  "top_sellers": [
    {
      "seller_nip": "1106977983",
      "seller_name": "ACME Dostawy sp. z o.o.",
      "count": 3,
      "gross": "4164.00"
    },
    {
      "seller_nip": "4044482783",
      "seller_name": "Paliwa Mazowsze sp. z o.o.",
      "count": 5,
      "gross": "2012.50"
    }
  ],
  "upcoming_payments": [
    {
      "id": "9a1f05bb-1f2e-5f6a-88d6-03c2e77ff8f7",
      "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
      "organization_name": "Jan Kowalski Usługi",
      "ksef_number": "4044482783-20260925-F9CCC7BC314F-0C",
      "direction": "received",
      "invoice_number": "PM/09/2026/1177",
      "invoice_type": "VAT",
      "counterparty_name": "Paliwa Mazowsze sp. z o.o.",
      "counterparty_nip": "4044482783",
      "net_amount": "327.24",
      "vat_amount": "75.26",
      "gross_amount": "402.50",
      "currency": "PLN",
      "issue_date": "2026-09-25",
      "due_date": "2026-10-02",
      "ksef_stored_at": "2026-09-25T16:20:00+02:00",
      "is_read": true,
      "is_paid": false,
      "locked": false,
      "has_details": true,
      "tags": [],
      "note": "",
      "is_excluded": false,
      "excluded_by_rule": false,
      "vat_deduction": "full",
      "vat_deduction_source": "default"
    },
    {
      "id": "726e2da5-6e79-5518-a9b5-574a13501e03",
      "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
      "organization_name": "Jan Kowalski Usługi",
      "ksef_number": "1028501099-20260926-F078C108BA1E-D1",
      "direction": "received",
      "invoice_number": "F/34521/09/26",
      "invoice_type": "VAT",
      "counterparty_name": "Telekom Plus S.A.",
      "counterparty_nip": "1028501099",
      "net_amount": "154.46",
      "vat_amount": "35.53",
      "gross_amount": "189.99",
      "currency": "PLN",
      "issue_date": "2026-09-26",
      "due_date": "2026-10-09",
      "ksef_stored_at": "2026-09-26T08:40:00+02:00",
      "is_read": true,
      "is_paid": false,
      "locked": false,
      "has_details": true,
      "tags": [],
      "note": "",
      "is_excluded": false,
      "excluded_by_rule": false,
      "vat_deduction": "full",
      "vat_deduction_source": "default"
    }
  ]
}

Kontrahenci

GET/api/v1/invoices/counterparties/
klucz: odczyt

Kontrahenci z liczbą faktur — od najczęstszych (najwyżej 50).

Parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.
  • directionstringdomyślnie received
    Dostawcy (received) albo odbiorcy (issued).
    receivedissued
  • qstring
    Fragment nazwy albo początek NIP-u.
GET/api/v1/invoices/counterparties/
curl -G https://ksefmobile.pl/api/v1/invoices/counterparties/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d direction=received
Odpowiedź 200
[
  {
    "nip": "4044482783",
    "name": "Paliwa Mazowsze sp. z o.o.",
    "count": 91
  },
  {
    "nip": "4251126551",
    "name": "Serwis IT Kamiński",
    "count": 33
  }
]

Tagi

Twoje etykiety na fakturach — do porządkowania, filtrów, raportów i synchronizacji. Tag to nazwa w obrębie firmy.

Lista tagów

GET/api/v1/invoices/tags/
klucz: odczyt

Tagi używane w firmach z X-Organization, z liczbą faktur.

Parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.
GET/api/v1/invoices/tags/
curl https://ksefmobile.pl/api/v1/invoices/tags/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: all"
Odpowiedź 200
[
  {
    "name": "Abonament IT",
    "count": 101
  },
  {
    "name": "Paliwo",
    "count": 90
  }
]

Dodaj lub usuń tagi

POST/api/v1/invoices/bulk-tags/
klucz: odczyt i zapis

Dodaje i/lub usuwa tagi na wielu fakturach, bez ruszania pozostałych tagów.

Nagłówki i parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.

Treść zapytania (JSON)

  • invoice_idsuuid[]
    Faktury (do 5000) — albo filters.
  • filtersobject
    Filtry jak w liście faktur.
  • addstring[]
    Tagi do dodania (nowe zostaną utworzone).
  • removestring[]
    Tagi do usunięcia.
POST/api/v1/invoices/bulk-tags/
curl -X POST https://ksefmobile.pl/api/v1/invoices/bulk-tags/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: all" \
  -H "Content-Type: application/json" \
  -d '{
  "invoice_ids": [
    "c8beaf06-9b5b-5758-acaa-b57c306408c3"
  ],
  "add": [
    "w-erp"
  ]
}'
Odpowiedź 200
{
  "updated": 1
}

Zmień nazwę tagu

POST/api/v1/invoices/tags/rename/
klucz: odczyt i zapis

Na wszystkich fakturach i w regułach tagów.

Nagłówki i parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.

Treść zapytania (JSON)

  • namestringwymagany
    Obecna nazwa.
  • new_namestringwymagany
    Nowa nazwa.
POST/api/v1/invoices/tags/rename/
curl -X POST https://ksefmobile.pl/api/v1/invoices/tags/rename/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "marketing",
  "new_name": "reklama"
}'
Odpowiedź 200
{
  "updated": 12
}

Usuń tag

POST/api/v1/invoices/tags/delete/
klucz: odczyt i zapis

Zdejmuje tag ze wszystkich faktur i usuwa jego reguły.

Nagłówki i parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.

Treść zapytania (JSON)

  • namestringwymagany
    Nazwa tagu.
POST/api/v1/invoices/tags/delete/
curl -X POST https://ksefmobile.pl/api/v1/invoices/tags/delete/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "reklama"
}'
Odpowiedź 200
{
  "deleted": 12
}

Reguły kontrahentów

Automatyka per NIP kontrahenta: reguła działa na istniejących fakturach od razu i na każdej nowej przy imporcie.

Reguły tagów — lista

GET/api/v1/tag-rules/
klucz: odczyt

Każda faktura od / dla kontrahenta dostaje tag.

Parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.
  • nipstring
    Tylko reguły tego kontrahenta.
GET/api/v1/tag-rules/
curl https://ksefmobile.pl/api/v1/tag-rules/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"
Odpowiedź 200
[
  {
    "id": "3b0b6c1e-6a63-4c3e-9d3f-0c1d0f6a9a11",
    "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
    "nip": "9539043265",
    "name": "Drukarnia Pod Lipą s.c.",
    "tag": "marketing",
    "created_at": "2026-10-01T10:12:00+02:00"
  }
]

Reguły tagów — dodaj

POST/api/v1/tag-rules/
klucz: odczyt i zapis

Taguje istniejące faktury kontrahenta i każdą nową. tagged — ile faktur dostało tag teraz.

Treść zapytania (JSON)

  • nipstringwymagany
    NIP kontrahenta.
  • tagstringwymagany
    Tag.
  • namestring
    Nazwa kontrahenta (do wyświetlania).
  • organizationuuid
    Firma — zamiast nagłówka X-Organization.
POST/api/v1/tag-rules/
curl -X POST https://ksefmobile.pl/api/v1/tag-rules/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "nip": "9539043265",
  "tag": "marketing",
  "name": "Drukarnia Pod Lipą s.c."
}'
Odpowiedź 201
{
  "rule": {
    "id": "3b0b6c1e-6a63-4c3e-9d3f-0c1d0f6a9a11",
    "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
    "nip": "9539043265",
    "name": "Drukarnia Pod Lipą s.c.",
    "tag": "marketing",
    "created_at": "2026-10-01T10:12:00+02:00"
  },
  "tagged": 6
}

Reguły tagów — usuń

DELETE/api/v1/tag-rules/{id}/
klucz: odczyt i zapis

Z ?untag=1 zdejmuje też tag z faktur kontrahenta.

Parametry ścieżki

  • iduuidwymagany
    Id reguły.

Parametry

  • untagboolean
    Zdejmij tag z faktur.
DELETE/api/v1/tag-rules/{id}/
curl -X DELETE "https://ksefmobile.pl/api/v1/tag-rules/3b0b6c1e-6a63-4c3e-9d3f-0c1d0f6a9a11/?untag=1" \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY"
Odpowiedź 200
{
  "untagged": 6
}

Wykluczenia — lista

GET/api/v1/exclusion-rules/
klucz: odczyt

Kontrahenci, których faktury nie liczą się do sum, raportów, podatków i eksportów (np. wewnętrzne refaktury).

Parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.
  • organizationuuid
    Tylko ta firma.
GET/api/v1/exclusion-rules/
curl https://ksefmobile.pl/api/v1/exclusion-rules/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"
Odpowiedź 200
[
  {
    "id": "6f2a9d44-1b7e-4f0a-8a51-3f9e0c2b7d22",
    "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
    "nip": "5213017228",
    "name": "Fundacja Kowalskich",
    "created_at": "2026-10-01T10:15:00+02:00"
  }
]

Wykluczenia — dodaj

POST/api/v1/exclusion-rules/
klucz: odczyt i zapis

Wyklucza istniejące i nowe faktury kontrahenta. excluded — ile wykluczono teraz.

Treść zapytania (JSON)

  • nipstringwymagany
    NIP kontrahenta.
  • namestring
    Nazwa kontrahenta.
  • organizationuuid
    Firma — zamiast nagłówka X-Organization.
POST/api/v1/exclusion-rules/
curl -X POST https://ksefmobile.pl/api/v1/exclusion-rules/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "nip": "5213017228",
  "name": "Fundacja Kowalskich"
}'
Odpowiedź 201
{
  "rule": {
    "id": "6f2a9d44-1b7e-4f0a-8a51-3f9e0c2b7d22",
    "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
    "nip": "5213017228",
    "name": "Fundacja Kowalskich",
    "created_at": "2026-10-01T10:15:00+02:00"
  },
  "excluded": 4
}

Wykluczenia — usuń

DELETE/api/v1/exclusion-rules/{id}/
klucz: odczyt i zapis

Przywraca faktury wykluczone tą regułą. restored — ile.

Parametry ścieżki

  • iduuidwymagany
    Id reguły.
DELETE/api/v1/exclusion-rules/{id}/
curl -X DELETE https://ksefmobile.pl/api/v1/exclusion-rules/6f2a9d44-1b7e-4f0a-8a51-3f9e0c2b7d22/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY"
Odpowiedź 200
{
  "restored": 4
}

Reguły VAT dostawców — lista

GET/api/v1/counterparty-rules/
klucz: odczyt

Odliczenie VAT dla wszystkich zakupów od dostawcy (np. leasing auta — 50%).

Parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.
  • organizationuuid
    Tylko ta firma.
GET/api/v1/counterparty-rules/
curl https://ksefmobile.pl/api/v1/counterparty-rules/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"
Odpowiedź 200
[
  {
    "id": "a1c3e5f7-2b4d-4f60-8a1c-3e5f72b4d6f8",
    "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
    "nip": "5272523080",
    "name": "Leasing Auto S.A.",
    "vat_deduction": "vehicle_mixed",
    "created_at": "2026-10-01T10:20:00+02:00"
  }
]

Reguły VAT dostawców — dodaj

POST/api/v1/counterparty-rules/
klucz: odczyt i zapis

Tworzy albo zmienia regułę dla NIP-u i stosuje ją do faktur zakupowych dostawcy. Faktury ustawione ręcznie zostają (kept_manual).

Treść zapytania (JSON)

  • nipstringwymagany
    NIP dostawcy.
  • vat_deductionstringdomyślnie vehicle_mixed
    Odliczenie.
    fullvehicle_mixednone
  • namestring
    Nazwa dostawcy.
  • organizationuuid
    Firma — zamiast nagłówka X-Organization.
POST/api/v1/counterparty-rules/
curl -X POST https://ksefmobile.pl/api/v1/counterparty-rules/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "nip": "5272523080",
  "vat_deduction": "vehicle_mixed",
  "name": "Leasing Auto S.A."
}'
Odpowiedź 201
{
  "rule": {
    "id": "a1c3e5f7-2b4d-4f60-8a1c-3e5f72b4d6f8",
    "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
    "nip": "5272523080",
    "name": "Leasing Auto S.A.",
    "vat_deduction": "vehicle_mixed",
    "created_at": "2026-10-01T10:20:00+02:00"
  },
  "updated": 9,
  "kept_manual": 0
}

Reguły VAT dostawców — zmień

PATCH/api/v1/counterparty-rules/{id}/
klucz: odczyt i zapis

Zmienia odliczenie i przelicza faktury dostawcy.

Parametry ścieżki

  • iduuidwymagany
    Id reguły.

Treść zapytania (JSON)

  • vat_deductionstringwymagany
    Odliczenie.
    fullvehicle_mixednone
PATCH/api/v1/counterparty-rules/{id}/
curl -X PATCH https://ksefmobile.pl/api/v1/counterparty-rules/a1c3e5f7-2b4d-4f60-8a1c-3e5f72b4d6f8/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "vat_deduction": "none"
}'
Odpowiedź 200
{
  "rule": {
    "id": "a1c3e5f7-2b4d-4f60-8a1c-3e5f72b4d6f8",
    "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
    "nip": "5272523080",
    "name": "Leasing Auto S.A.",
    "vat_deduction": "none",
    "created_at": "2026-10-01T10:20:00+02:00"
  },
  "updated": 9,
  "kept_manual": 0
}

Reguły VAT dostawców — usuń

DELETE/api/v1/counterparty-rules/{id}/
klucz: odczyt i zapis

Faktury ustawione regułą wracają do 100%.

Parametry ścieżki

  • iduuidwymagany
    Id reguły.
DELETE/api/v1/counterparty-rules/{id}/
curl -X DELETE https://ksefmobile.pl/api/v1/counterparty-rules/a1c3e5f7-2b4d-4f60-8a1c-3e5f72b4d6f8/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY"
Odpowiedź 200
{
  "updated": 9
}

Eksporty

Pliki z wieloma fakturami: CSV (każdy plan), Excel z sumami i ZIP z PDF + XML każdej faktury (Standard i Biuro).

Utwórz eksport

POST/api/v1/invoices/exports/
klucz: odczyt i zapis

Małe CSV/Excel (do 1000 faktur) są gotowe od razu (status: done). ZIP i większe pliki budujemy w tle — sprawdzaj status.

Nagłówki i parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.

Treść zapytania (JSON)

  • formatstringwymagany
    Format pliku.
    csvxlsxzip
  • filtersobject
    Filtry jak w liście faktur — eksport wszystkich pasujących.
  • invoice_idsuuid[]
    Albo konkretne faktury.

Najwyżej 5000 faktur (too_many); brak pasujących — empty. ZIP i Excel bez planu płatnego — 403 plan_required.

POST/api/v1/invoices/exports/
curl -X POST https://ksefmobile.pl/api/v1/invoices/exports/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "format": "xlsx",
  "filters": {
    "direction": "received",
    "date_from": "2026-09-01",
    "date_to": "2026-09-30"
  }
}'
Odpowiedź 201
{
  "id": "0d5c7f9e-3a1b-4c2d-9e8f-7a6b5c4d3e2f",
  "format": "xlsx",
  "status": "done",
  "count": 35,
  "progress": 35,
  "skipped": 0,
  "filename": "otrzymane_2026-09.xlsx",
  "error": "",
  "download_path": "/invoices/exports/0d5c7f9e-3a1b-4c2d-9e8f-7a6b5c4d3e2f/download/"
}

Status eksportu

GET/api/v1/invoices/exports/{id}/
klucz: odczyt

Postęp (progress z count) i stan: pending, running, done, failed. skipped — faktury bez PDF (np. poza limitem planu).

Parametry ścieżki

  • iduuidwymagany
    Id eksportu.
GET/api/v1/invoices/exports/{id}/
curl https://ksefmobile.pl/api/v1/invoices/exports/0d5c7f9e-3a1b-4c2d-9e8f-7a6b5c4d3e2f/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY"
Odpowiedź 200
{
  "id": "0d5c7f9e-3a1b-4c2d-9e8f-7a6b5c4d3e2f",
  "format": "xlsx",
  "status": "done",
  "count": 35,
  "progress": 35,
  "skipped": 0,
  "filename": "otrzymane_2026-09.xlsx",
  "error": "",
  "download_path": "/invoices/exports/0d5c7f9e-3a1b-4c2d-9e8f-7a6b5c4d3e2f/download/"
}

Pobierz plik

GET/api/v1/invoices/exports/{id}/download/
klucz: odczyt

Gotowy plik. Pliki usuwamy po 24 godzinach.

Parametry ścieżki

  • iduuidwymagany
    Id eksportu.
GET/api/v1/invoices/exports/{id}/download/
curl https://ksefmobile.pl/api/v1/invoices/exports/0d5c7f9e-3a1b-4c2d-9e8f-7a6b5c4d3e2f/download/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -o otrzymane_2026-09.xlsx
Plik CSV, XLSX albo ZIP.

Raporty

Agregaty do wykresów i analiz: przychody i koszty miesiąc po miesiącu (z rokiem wcześniej), tagi, kontrahenci, VAT, zaległości.

Raport

GET/api/v1/invoices/report/
klucz: odczyt Standard i Biuro

Kwoty w PLN; faktury w innych walutach są liczone osobno (other_currencies). Z X-Organization: all — wszystkie firmy z planem z raportami.

Parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.
  • date_from / date_todate
    Okres (data wystawienia). Domyślnie ostatnie 12 miesięcy, najwyżej 6 lat.
  • directionstringdomyślnie both
    Koszty, sprzedaż albo oba.
    bothreceivedissued
  • sectionsstring
    Sekcje po przecinku (domyślnie wszystkie).
    monthlytagscounterpartiesvataging
  • scopestring
    filtered — zastosuj też filtry listy faktur (oprócz kierunku i dat).
    filtered
GET/api/v1/invoices/report/
curl -G https://ksefmobile.pl/api/v1/invoices/report/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d date_from=2026-07-01 \
  -d date_to=2026-09-30 \
  -d direction=received \
  -d sections=monthly%2Ctags%2Ccounterparties
Odpowiedź 200
{
  "period": {
    "date_from": "2026-07-01",
    "date_to": "2026-09-30",
    "label": "lipiec – wrzesień 2026",
    "months": 3
  },
  "direction": "received",
  "scope": "all",
  "currency": "PLN",
  "invoice_count": 102,
  "other_currencies": [
    {
      "currency": "EUR",
      "count": 1,
      "gross": "23.40"
    }
  ],
  "monthly": {
    "months": [
      {
        "month": "2026-07",
        "received": {
          "count": 25,
          "net": "9520.29",
          "vat": "2189.64",
          "gross": "11709.93"
        },
        "previous_year": {
          "received": {
            "count": 15,
            "net": "11864.54",
            "vat": "2728.86",
            "gross": "14593.40"
          }
        }
      },
      {
        "month": "2026-08",
        "received": {
          "count": 25,
          "net": "11028.95",
          "vat": "2536.65",
          "gross": "13565.60"
        },
        "previous_year": {
          "received": {
            "count": 16,
            "net": "11854.10",
            "vat": "2726.45",
            "gross": "14580.55"
          }
        }
      }
    ],
    "month_before": {
      "month": "2026-06",
      "received": {
        "count": 17,
        "net": "12187.90",
        "vat": "2803.22",
        "gross": "14991.12"
      }
    },
    "totals": {
      "received": {
        "count": 78,
        "net": "31845.90",
        "vat": "7297.98",
        "gross": "39143.88"
      }
    },
    "previous_period": {
      "date_from": "2026-04-01",
      "date_to": "2026-06-30",
      "received": {
        "count": 42,
        "net": "34218.35",
        "vat": "7870.22",
        "gross": "42088.57"
      }
    },
    "previous_year": {
      "date_from": "2025-07-01",
      "date_to": "2025-09-30",
      "received": {
        "count": 48,
        "net": "36080.49",
        "vat": "8298.55",
        "gross": "44379.04"
      }
    }
  },
  "tags": {
    "received": {
      "total": {
        "count": 78,
        "net": "31845.90",
        "vat": "7297.98",
        "gross": "39143.88"
      },
      "multi_tagged": 0,
      "rows": [
        {
          "tag": "Biuro",
          "count": 20,
          "net": "6805.42",
          "vat": "1565.22",
          "gross": "8370.64"
        },
        {
          "tag": "Marketing",
          "count": 13,
          "net": "4428.55",
          "vat": "1018.56",
          "gross": "5447.11"
        }
      ]
    }
  },
  "counterparties": {
    "received": {
      "total": {
        "count": 78,
        "net": "31845.90",
        "vat": "7297.98",
        "gross": "39143.88"
      },
      "counterparty_count": 14,
      "rows": [
        {
          "nip": "2947025247",
          "name": "Energia Centrum sp. z o.o.",
          "count": 6,
          "net": "3671.13",
          "vat": "844.35",
          "gross": "4515.48"
        },
        {
          "nip": "4251126551",
          "name": "Serwis IT Kamiński",
          "count": 9,
          "net": "3501.68",
          "vat": "805.38",
          "gross": "4307.06"
        }
      ],
      "others": {
        "count": 15,
        "net": "4192.00",
        "vat": "964.15",
        "gross": "5156.15",
        "counterparty_count": 4
      }
    }
  },
  "companies": [
    {
      "id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
      "name": "Jan Kowalski Usługi",
      "nip": "7262475736"
    }
  ],
  "locked_companies": 0,
  "company_label": "Jan Kowalski Usługi (NIP 7262475736)"
}

Prognoza przepływów

GET/api/v1/invoices/cashflow/
klucz: odczyt Standard i Biuro

Co wpłynie, a co wyjdzie z konta tydzień po tygodniu: nieopłacone faktury wg terminów, koszty spoza KSeF w dniu płatności i szacunek PIT+ZUS (20.) oraz VAT (25.). Ze stanem konta — prognozowane saldo i najniższy punkt.

Parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.
  • daysintegerdomyślnie 90
    Horyzont.
    306090
  • include_extrabooleandomyślnie true
    Koszty spoza KSeF z ustawień podatku.
  • include_taxbooleandomyślnie true
    Szacunek podatków i ZUS (firmy z zapisanymi ustawieniami podatku).
GET/api/v1/invoices/cashflow/
curl -G https://ksefmobile.pl/api/v1/invoices/cashflow/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d days=30
Odpowiedź 200
{
  "today": "2026-10-02",
  "date_to": "2026-10-31",
  "days": 30,
  "balance": {
    "amount": "8500.00",
    "as_of": "2026-10-02",
    "complete": true,
    "missing": 0
  },
  "overdue": {
    "inflow": {
      "count": 5,
      "amount": "23334.59"
    },
    "outflow": {
      "count": 0,
      "amount": "0.00"
    }
  },
  "weeks": [
    {
      "start": "2026-09-28",
      "end": "2026-10-04",
      "label": "28.09–4.10",
      "inflow": "0.00",
      "outflow": {
        "invoices": "402.50",
        "extra": "0.00",
        "tax": "0.00",
        "total": "402.50"
      },
      "net": "-402.50",
      "balance": "8097.50"
    },
    {
      "start": "2026-10-05",
      "end": "2026-10-11",
      "label": "5–11.10",
      "inflow": "7644.33",
      "outflow": {
        "invoices": "1500.00",
        "extra": "6000.00",
        "tax": "0.00",
        "total": "7500.00"
      },
      "net": "144.33",
      "balance": "8241.83"
    }
  ],
  "totals": {
    "inflow": "7644.33",
    "outflow": "20138.71",
    "net": "-12494.38"
  },
  "lowest": {
    "date": "2026-10-25",
    "balance": "-3994.38"
  },
  "taxes": [
    {
      "date": "2026-10-25",
      "kind": "vat",
      "label": "VAT za wrzesień 2026",
      "amount": "3120.00",
      "estimate": false,
      "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2"
    }
  ]
}

Stan konta do prognozy

POST/api/v1/invoices/cashflow/balance/
klucz: odczyt i zapis Standard i Biuro

Dzisiejszy stan konta firmy — początek prognozowanego salda. null usuwa. GET zwraca zapisany.

Treść zapytania (JSON)

  • balancedecimal string | nullwymagany
    Kwota, np. "12500.00" (przyjmujemy też „12 500,00”).
  • organizationuuid
    Firma — zamiast nagłówka X-Organization.
POST/api/v1/invoices/cashflow/balance/
curl -X POST https://ksefmobile.pl/api/v1/invoices/cashflow/balance/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "balance": "12500.00"
}'
Odpowiedź 200
{
  "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "balance": "12500.00",
  "balance_date": "2026-10-02"
}

Raport w PDF / Excel

GET/api/v1/invoices/report/export/
klucz: odczyt Standard i Biuro

Ten sam raport jako plik z wykresami — PDF do wysłania albo Excel z wykresami i formułami.

Parametry

  • outputstringwymagany
    Format.
    pdfxlsx
  • …
    Parametry jak w raporcie.
GET/api/v1/invoices/report/export/
curl -G https://ksefmobile.pl/api/v1/invoices/report/export/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d output=pdf \
  -d date_from=2026-01-01 \
  -d date_to=2026-09-30 \
  -o raport.pdf
Plik PDF albo XLSX.

Podatki

Szacunek PIT (skala, liniowy, ryczałt), VAT i ZUS za miesiąc, kwartał albo rok — z faktur w KSeF i Twoich kosztów spoza KSeF. Podatek liczy się per NIP, więc zawsze dla jednej firmy.

Szacunek podatku

GET/api/v1/invoices/tax-estimate/
klucz: odczyt Standard i Biuro

Przychód, koszty, dochód, PIT, VAT należny/naliczony (z 50% przy leasingu), składki ZUS, ostrzeżenia i założenia. Parametry ustawień nadpisują zapisane — dobre do symulacji „co jeśli”.

Parametry

  • organizationuuid
    Firma (domyślnie pierwsza z X-Organization).
  • periodstring
    Okres: 2026-09, 2026-Q3, 2026. Domyślnie bieżący miesiąc.
  • formstring
    Forma opodatkowania.
    skalaliniowyryczalt
  • ryczalt_ratestring
    Stawka ryczałtu (%).
    235.58.51012141517
  • vat_payerboolean
    Czynny podatnik VAT.
  • zus_presetstring
    Składki ZUS.
    duzymalyulga_startmaly_pluscustom
  • zus_social / healthdecimal
    Składki za okres przy custom.
  • scopestring
    filtered — tylko faktury pasujące do filtrów listy.
    filtered
GET/api/v1/invoices/tax-estimate/
curl -G https://ksefmobile.pl/api/v1/invoices/tax-estimate/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d period=2026-09
Odpowiedź 200
{
  "organization": {
    "id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
    "name": "Jan Kowalski Usługi",
    "nip": "7262475736"
  },
  "companies": [
    {
      "id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
      "name": "Jan Kowalski Usługi",
      "nip": "7262475736"
    }
  ],
  "period": {
    "key": "2026-09",
    "kind": "month",
    "label": "wrzesień 2026",
    "date_from": "2026-09-01",
    "date_to": "2026-09-30"
  },
  "scope": "all",
  "settings": {
    "form": "liniowy",
    "ryczalt_rate": "12",
    "vat_payer": true,
    "zus_social": "0.00",
    "health": "0.00",
    "zus_preset": "duzy",
    "zus_sickness": true,
    "extra_costs": []
  },
  "zus_catalog": {
    "year": 2026,
    "fetched": "2026-09-29",
    "sources": [
      "https://www.zus.pl/documents/10182/13364587/Sk%C5%82adki+przedsi%C4%99biorc%C3%B3w+w+2026+roku_DFF.pdf"
    ],
    "presets": [
      {
        "code": "duzy",
        "label": "Duży ZUS",
        "hint": "Pełne składki od 5 652 zł + Fundusz Pracy",
        "social_monthly": "1926.76",
        "social_monthly_no_sickness": "1788.29",
        "lines": {
          "emerytalna": "1103.27",
          "rentowa": "452.16",
          "chorobowa": "138.47",
          "wypadkowa": "94.39",
          "fp": "138.47"
        },
        "manual_social": false,
        "manual_health": false
      }
    ],
    "health": {
      "skala_rate": "9",
      "liniowy_rate": "4.9",
      "minimum": "432.54",
      "ryczalt": [
        {
          "up_to": "60000.00",
          "amount": "498.35"
        },
        {
          "up_to": "300000.00",
          "amount": "830.58"
        }
      ]
    }
  },
  "revenue": "28249.15",
  "costs": "11296.66",
  "income": "16952.49",
  "costs_breakdown": {
    "received_net": "11296.66",
    "nondeductible_vat": "0.00",
    "extra": "0.00"
  },
  "extra_costs": {
    "total": "0.00",
    "lines": []
  },
  "tax": {
    "form": "liniowy",
    "rate": "19",
    "zus_social": "1926.76",
    "health_deduction": "736.26",
    "base": "14289.00",
    "reducing_amount": "0.00",
    "amount": "2715.00"
  },
  "vat": {
    "payer": true,
    "output": "6497.29",
    "input": "2571.69",
    "input_total": "2571.69",
    "nondeductible": "0.00",
    "balance": "3925.60"
  },
  "zus": {
    "preset": "duzy",
    "table_year": 2026,
    "auto_social": true,
    "auto_health": true,
    "sickness": true,
    "months": 1,
    "social": "1788.29",
    "fp": "138.47",
    "health": "736.26",
    "total": "2663.02",
    "health_note": "4,9% dochodu, min. 432,54 zł/mies.",
    "lines": [
      {
        "code": "emerytalna",
        "label": "Emerytalna (19,52%)",
        "monthly": "1103.27",
        "amount": "1103.27"
      },
      {
        "code": "rentowa",
        "label": "Rentowa (8%)",
        "monthly": "452.16",
        "amount": "452.16"
      }
    ]
  },
  "counts": {
    "issued": 9,
    "received": 28,
    "vehicle_mixed": 0,
    "no_deduction": 0,
    "skipped_foreign": 1,
    "missing_xml": 0,
    "missing_amounts": 0
  },
  "foreign_currencies": [
    "EUR"
  ],
  "warnings": [
    {
      "code": "skipped_foreign",
      "count": 1,
      "message": "Pominięto 1 fakturę w walucie (EUR) — przeliczenie wymaga kursu NBP z dnia poprzedzającego."
    }
  ],
  "assumptions": [
    "Faktury przypisane do okresu wg daty wystawienia; wykluczone faktury nie są liczone.",
    "Liniowy 19%: składka zdrowotna obniża dochód do rocznego limitu 14 100 zł."
  ]
}

Szacunek w PDF / Excel

GET/api/v1/invoices/tax-estimate/export/
klucz: odczyt Standard i Biuro

Ten sam szacunek jako plik.

Parametry

  • outputstringwymagany
    Format.
    pdfxlsx
  • …
    Parametry jak w szacunku.
GET/api/v1/invoices/tax-estimate/export/
curl -G https://ksefmobile.pl/api/v1/invoices/tax-estimate/export/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d output=xlsx \
  -d period=2026-Q3 \
  -o podatek_2026-Q3.xlsx
Plik PDF albo XLSX.

Ustawienia podatkowe

GET/api/v1/invoices/tax-settings/
klucz: odczyt Standard i Biuro

Zapisane ustawienia firmy i katalog składek ZUS na bieżący rok.

Parametry

  • organizationuuid
    Firma.
GET/api/v1/invoices/tax-settings/
curl https://ksefmobile.pl/api/v1/invoices/tax-settings/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"
Odpowiedź 200
{
  "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "settings": {
    "form": "liniowy",
    "ryczalt_rate": "12",
    "vat_payer": true,
    "zus_social": "0.00",
    "health": "0.00",
    "zus_preset": "duzy",
    "zus_sickness": true,
    "extra_costs": []
  },
  "saved": true,
  "zus_catalog": {
    "year": 2026,
    "fetched": "2026-09-29",
    "sources": [
      "https://www.zus.pl/documents/10182/13364587/Sk%C5%82adki+przedsi%C4%99biorc%C3%B3w+w+2026+roku_DFF.pdf"
    ],
    "presets": [
      {
        "code": "duzy",
        "label": "Duży ZUS",
        "hint": "Pełne składki od 5 652 zł + Fundusz Pracy",
        "social_monthly": "1926.76",
        "social_monthly_no_sickness": "1788.29",
        "lines": {
          "emerytalna": "1103.27",
          "rentowa": "452.16",
          "chorobowa": "138.47",
          "wypadkowa": "94.39",
          "fp": "138.47"
        },
        "manual_social": false,
        "manual_health": false
      }
    ],
    "health": {
      "skala_rate": "9",
      "liniowy_rate": "4.9",
      "minimum": "432.54",
      "ryczalt": [
        {
          "up_to": "60000.00",
          "amount": "498.35"
        },
        {
          "up_to": "300000.00",
          "amount": "830.58"
        }
      ]
    }
  }
}

Zapisz ustawienia podatkowe

PUT/api/v1/invoices/tax-settings/
klucz: odczyt i zapis Standard i Biuro

Forma opodatkowania, VAT, ZUS i IP Box (udział z ustawień). Koszty spoza KSeF zapisuje się osobno — /costs/; pole extra_costs jest tu pomijane.

Nagłówki i parametry

  • organizationuuid
    Firma.

Treść zapytania (JSON)

  • formstring
    Forma opodatkowania.
    skalaliniowyryczalt
  • ryczalt_ratestring
    Stawka ryczałtu.
  • vat_payerboolean
    Czynny podatnik VAT.
  • zus_presetstring
    Składki ZUS.
    duzymalyulga_startmaly_pluscustom
  • zus_sicknessboolean
    Dobrowolna składka chorobowa.
  • zus_social / healthdecimal string
    Składki przy custom.
  • ip_boxboolean
    Korzystam z IP Box (gdy firma nie prowadzi modułu IP Box).
  • ip_box_shareinteger
    Udział dochodu z IP (0–100) bez modułu.
PUT/api/v1/invoices/tax-settings/
curl -X PUT https://ksefmobile.pl/api/v1/invoices/tax-settings/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "form": "liniowy",
  "vat_payer": true,
  "zus_preset": "duzy",
  "zus_sickness": true
}'
Odpowiedź 200
{
  "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "settings": {
    "form": "liniowy",
    "ryczalt_rate": "12",
    "vat_payer": true,
    "zus_social": "0.00",
    "health": "0.00",
    "zus_preset": "duzy",
    "zus_sickness": true,
    "extra_costs": []
  },
  "saved": true
}

Podatki z jednej faktury

GET/api/v1/invoices/{id}/tax-breakdown/
klucz: odczyt Standard i Biuro

Co ta faktura oznacza dla podatków przy zapisanych ustawieniach jej firmy. Sprzedaż: VAT do zapłaty, PIT wg formy, składka zdrowotna, „na rękę” i — gdy faktura jest w projekcie IP Box — wariant z 5%. Koszt: VAT do odliczenia, ile mniej PIT i zdrowotnej, ile naprawdę kosztuje. Waluta po kursie NBP z dnia przed wystawieniem (409 no_rate, gdy kursu jeszcze nie ma).

Parametry ścieżki

  • iduuidwymagany
    Faktura.

Szacunek dla jednej faktury (stawka krańcowa), nie rozliczenie miesiąca — to daje szacunek za okres.

GET/api/v1/invoices/{id}/tax-breakdown/
curl https://ksefmobile.pl/api/v1/invoices/82e6bfe3-6776-5a3b-ab9d-cb9edf75ce11/tax-breakdown/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY"
Odpowiedź 200
{
  "direction": "issued",
  "form": "liniowy",
  "rate": null,
  "net": "4418.26",
  "vat": "1016.20",
  "gross": "5434.46",
  "pit_rate": "0.19",
  "health_rate": "0.049",
  "notes": [
    "PIT 19% bez odliczenia składki zdrowotnej od dochodu (do limitu w roku byłby niższy).",
    "Składki społeczne ZUS są stałe w miesiącu, więc nie liczymy ich od faktury."
  ],
  "vat_due": "1016.20",
  "pit": "839.47",
  "health": "216.49",
  "taxes": "2072.16",
  "taxes_without_vat": "1055.96",
  "take_home": "3362.30",
  "ip_box": {
    "source": "module",
    "project": "REZERWACJE ZŁOTY KŁOS",
    "share": "1",
    "pit": "220.91",
    "take_home": "3980.86",
    "saving": "618.56"
  },
  "settings_saved": true
}

Podatki z faktury w PDF

GET/api/v1/invoices/{id}/tax-breakdown/pdf/
klucz: odczyt Standard i Biuro

To samo rozbicie jako jednostronicowy PDF.

Parametry ścieżki

  • iduuidwymagany
    Faktura.
GET/api/v1/invoices/{id}/tax-breakdown/pdf/
curl https://ksefmobile.pl/api/v1/invoices/82e6bfe3-6776-5a3b-ab9d-cb9edf75ce11/tax-breakdown/pdf/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -o podatki-FV_2026_10_005.pdf
Plik PDF (application/pdf).

Porównanie form — dane wyjściowe

GET/api/v1/invoices/tax-compare/
klucz: odczyt Standard i Biuro

Obecna forma, ZUS i IP Box firmy — punkt startowy porównania skala / liniowy / ryczałt.

Parametry

  • organizationuuid
    Firma.
GET/api/v1/invoices/tax-compare/
curl https://ksefmobile.pl/api/v1/invoices/tax-compare/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"
Odpowiedź 200
{
  "organization": {
    "id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
    "name": "Jan Kowalski Usługi",
    "nip": "7262475736"
  },
  "companies": [
    {
      "id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
      "name": "Jan Kowalski Usługi",
      "nip": "7262475736"
    }
  ],
  "current_form": "liniowy",
  "current_ryczalt_rate": "12",
  "zus_preset": "custom",
  "ip_box": true,
  "ip_box_share": 0,
  "has_settings": true,
  "activities": [
    {
      "value": "it",
      "rate": "12",
      "label": "Usługi IT (programowanie, doradztwo IT)"
    },
    {
      "value": "it_other",
      "rate": "8.5",
      "label": "Inne usługi IT (np. utrzymanie, wsparcie)"
    },
    {
      "value": "services",
      "rate": "8.5",
      "label": "Usługi (pozostałe, np. doradztwo, szkolenia)"
    },
    {
      "value": "free_professions",
      "rate": "15",
      "label": "Wolne zawody / doradztwo, marketing, usługi dla firm (15%)"
    },
    {
      "value": "medical",
      "rate": "14",
      "label": "Usługi medyczne, architektoniczne, inżynierskie (14%)"
    },
    {
      "value": "construction",
      "rate": "5.5",
      "label": "Budownictwo, produkcja (5,5%)"
    },
    {
      "value": "trade",
      "rate": "3",
      "label": "Handel, gastronomia (3%)"
    },
    {
      "value": "rent",
      "rate": "8.5",
      "label": "Najem (8,5%)"
    }
  ],
  "ryczalt_rates": [
    "2",
    "3",
    "5.5",
    "8.5",
    "10",
    "12",
    "14",
    "15",
    "17"
  ]
}

Porównaj formy opodatkowania

POST/api/v1/invoices/tax-compare/
klucz: odczyt i zapis Standard i Biuro

Skala, liniowy i ryczałt na przyszły rok — z faktur z ostatnich 12 miesięcy, kosztów spoza KSeF i Twoich odpowiedzi (wzrost, małżonek, dzieci, IP Box…). Zwraca najlepszą formę, oszczędność, progi opłacalności i scenariusze. Liczy kilkaset wariantów — wywołuj na żądanie, nie w pętli.

Treść zapytania (JSON)

  • organizationuuid
    Firma.
  • answersobject
    Odpowiedzi kreatora (wszystkie opcjonalne).
POST/api/v1/invoices/tax-compare/
curl -X POST https://ksefmobile.pl/api/v1/invoices/tax-compare/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "organization": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "answers": {
    "growth": 10,
    "zus_preset": "duzy"
  }
}'
JSON: forms (skala, liniowy, ryczałt), best_form, saving, switches, scenarios.

Porównanie form w PDF

POST/api/v1/invoices/tax-compare/pdf/
klucz: odczyt i zapis Standard i Biuro

Te same dane co porównanie, jako raport PDF do pokazania księgowej.

POST/api/v1/invoices/tax-compare/pdf/
curl -X POST https://ksefmobile.pl/api/v1/invoices/tax-compare/pdf/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "organization": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "answers": {
    "growth": 10
  }
}' \
  -o porownanie-form.pdf
Plik PDF (application/pdf).

Koszty spoza KSeF

Wynagrodzenia, ZUS pracowników, najem bez faktury… Liczą się w podatku, przepływach i IP Box (a w raportach — gdy to włączysz). Zapis wiersz po wierszu: każdy koszt ma własne id.

Lista kosztów

GET/api/v1/costs/
klucz: odczyt

Koszty firmy z nagłówka X-Organization i lista kategorii.

GET/api/v1/costs/
curl https://ksefmobile.pl/api/v1/costs/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"
Odpowiedź 200
{
  "organization": {
    "id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
    "name": "Jan Kowalski Usługi",
    "nip": "7262475736"
  },
  "categories": [
    {
      "value": "salaries",
      "label": "Wynagrodzenia"
    },
    {
      "value": "staff_zus",
      "label": "ZUS pracowników"
    },
    {
      "value": "rent",
      "label": "Najem"
    },
    {
      "value": "services",
      "label": "Usługi i subskrypcje"
    },
    {
      "value": "equipment",
      "label": "Sprzęt"
    },
    {
      "value": "other",
      "label": "Inne"
    }
  ],
  "costs": [
    {
      "id": "c1f0a1e2-3b4c-4d5e-8f90-1a2b3c4d5e6f",
      "name": "Wynagrodzenie",
      "category": "salaries",
      "kind": "monthly",
      "amount": "6500.00",
      "month": "2026-01",
      "until": "",
      "day": 10,
      "counterparty": "",
      "note": ""
    }
  ]
}

Dodaj koszt

POST/api/v1/costs/
klucz: odczyt i zapis

Jeden koszt: co miesiąc (od miesiąca, opcjonalnie do miesiąca) albo jednorazowo w miesiącu.

Treść zapytania (JSON)

  • namestringwymagany
    Nazwa.
  • categorystring
    Kategoria.
    salariesstaff_zusrentservicesequipmentother
  • kindstring
    Co miesiąc albo jednorazowo.
    monthlyone_off
  • amountdecimal stringwymagany
    Kwota netto.
  • month / untilstring
    RRRR-MM: od kiedy / do kiedy (monthly) albo kiedy (one_off).
  • dayintegerdomyślnie 10
    Dzień płatności 1–28 (przepływy pieniężne).
  • counterparty / notestring
    Komu płacisz, notatka.
POST/api/v1/costs/
curl -X POST https://ksefmobile.pl/api/v1/costs/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Wynagrodzenie",
  "category": "salaries",
  "kind": "monthly",
  "amount": "6500.00",
  "month": "2026-01",
  "day": 10
}'
Odpowiedź 201
{
  "id": "c1f0a1e2-3b4c-4d5e-8f90-1a2b3c4d5e6f",
  "name": "Wynagrodzenie",
  "category": "salaries",
  "kind": "monthly",
  "amount": "6500.00",
  "month": "2026-01",
  "until": "",
  "day": 10,
  "counterparty": "",
  "note": ""
}

Zmień koszt

PATCH/api/v1/costs/{id}/
klucz: odczyt i zapis

Tylko podane pola.

Parametry ścieżki

  • iduuidwymagany
    Koszt.
PATCH/api/v1/costs/{id}/
curl -X PATCH https://ksefmobile.pl/api/v1/costs/c1/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "amount": "7000.00"
}'
Odpowiedź 200
{
  "id": "c1f0a1e2-3b4c-4d5e-8f90-1a2b3c4d5e6f",
  "name": "Wynagrodzenie",
  "category": "salaries",
  "kind": "monthly",
  "amount": "7000.00",
  "month": "2026-01",
  "until": "",
  "day": 10,
  "counterparty": "",
  "note": ""
}

Usuń koszt

DELETE/api/v1/costs/{id}/
klucz: odczyt i zapis

Usuwa jeden koszt.

Parametry ścieżki

  • iduuidwymagany
    Koszt.
DELETE/api/v1/costs/{id}/
curl -X DELETE https://ksefmobile.pl/api/v1/costs/c1/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"

IP Box

Projekty IP, przypisywanie faktur (projekt / koszt pośredni / nie IP), reguły, nexus, dochód kwalifikowany i ewidencja w Excelu — to samo co w module IP Box panelu i aplikacji. Zawsze dla jednej firmy (X-Organization), rok w parametrze year.

Podsumowanie roku

GET/api/v1/ipbox/summary/
klucz: odczyt Standard i Biuro

Przychód z IP, dochód kwalifikowany, nexus i podatek 5% per projekt, pula kosztów pośrednich, nieprzypisane faktury i szacowana oszczędność.

Parametry

  • yearinteger
    Rok (domyślnie bieżący).
GET/api/v1/ipbox/summary/
curl -G https://ksefmobile.pl/api/v1/ipbox/summary/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d year=2026
Odpowiedź 200
{
  "year": 2026,
  "settings": {
    "allocation": "all_revenue",
    "zus_indirect": true,
    "closed": false,
    "track_time": false
  },
  "tax_form": "liniowy",
  "projects": [
    {
      "id": "825e6eae-6e55-4365-a222-db7a858c2f0f",
      "name": "REZERWACJE ZŁOTY KŁOS",
      "archived": false,
      "revenue": "52125.15",
      "costs": {
        "a": "2943.80",
        "b": "0.00",
        "c": "0.00",
        "d": "0.00"
      },
      "indirect": "17886.87",
      "share": "0.2319",
      "income": "31294.48",
      "nexus": "1.0000",
      "qualified": "31294.48",
      "tax": "1565",
      "hours": "0.0",
      "sales": 21,
      "cost_rows": 6,
      "months": {
        "1": "3412.85",
        "2": "2881.23",
        "3": "5603.12",
        "4": "1998.50",
        "5": "9314.54",
        "6": "2787.43",
        "7": "11170.21",
        "8": "2850.41",
        "9": "4521.28",
        "10": "7585.58"
      }
    }
  ],
  "indirect_pool": "77122.71",
  "indirect_count": 114,
  "zus_month": "0.00",
  "total_revenue": "224747.65",
  "total_costs": "110629.94",
  "ip_revenue": "153329.74",
  "ip_income": "80293.78",
  "qualified": "80293.78",
  "ip_tax": "4015",
  "other_revenue": "71417.91",
  "other_income": "33823.93",
  "saving": "11241.13",
  "unassigned": {
    "sales": 15,
    "costs": 0,
    "extra": 0
  },
  "missing_rates": 0,
  "revenue_by_month": {
    "1": "18825.81",
    "2": "20514.64",
    "3": "25131.55",
    "4": "20460.34",
    "5": "22427.88",
    "6": "25808.29",
    "7": "20897.89",
    "8": "18726.28",
    "9": "23705.82",
    "10": "28249.15"
  },
  "organization": {
    "id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
    "name": "Jan Kowalski Usługi"
  },
  "has_projects": true,
  "manual_unassigned": 0
}

Projekty

GET/api/v1/ipbox/projects/
klucz: odczyt Standard i Biuro

Projekty firmy z okresem (period_start / period_end: ustawione daty albo pierwsza i ostatnia sprzedaż). Dodawanie: POST /ipbox/projects/, zmiana i archiwizacja: PATCH /ipbox/projects/{id}/, usunięcie: DELETE (przypisania wracają do kolejki).

GET/api/v1/ipbox/projects/
curl https://ksefmobile.pl/api/v1/ipbox/projects/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"
Odpowiedź 200
[
  {
    "ended_on": null,
    "period_start": "2024-10-14",
    "period_end": null,
    "id": "55fa8ac2-ba56-4bdd-8c83-867272684c9a",
    "name": "APTEKA POD ORŁEM",
    "description": "Platforma do zamówień z odbiorem w aptece, z aplikacją mobilną i panelem farmaceuty.",
    "kind": "software",
    "client_key": "2170439776",
    "client_name": "Apteka Pod Orłem s.c.",
    "contract": "Umowa B2B z przeniesieniem autorskich praw majątkowych",
    "started_on": null,
    "archived": false
  }
]

Faktury do przypisania

GET/api/v1/ipbox/queue/
klucz: odczyt Standard i Biuro

Faktury i koszty roku bez przypisania (albo przypisane), z podpowiedzią z reguł i historii kontrahenta.

Parametry

  • yearinteger
    Rok.
  • directionstring
    Sprzedaż albo koszty.
    issuedreceived
  • statestring
    assigned — już przypisane.
    assigned
  • hiddenboolean
    Także ukryte (zerowe, wykluczone).
GET/api/v1/ipbox/queue/
curl -G https://ksefmobile.pl/api/v1/ipbox/queue/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d year=2026 \
  -d direction=received
Odpowiedź 200
{
  "year": 2026,
  "invoices": [
    {
      "suggestion": null,
      "current": null,
      "tags": [
        "Serwis"
      ],
      "zero": false,
      "excluded": false,
      "active_projects": null,
      "id": "8b2a471c-85bf-59bf-8fc6-ba903a6c70c8",
      "direction": "issued",
      "issue_date": "2026-10-02",
      "number": "FV/2026/10/007",
      "counterparty": "Klinika Weterynaryjna Azor",
      "nip": "4692062722",
      "key": "4692062722",
      "net_amount": "719.40",
      "currency": "PLN",
      "suggested_role": ""
    }
  ],
  "costs": [],
  "manual": [],
  "total": 15,
  "hidden": {
    "zero": 0,
    "excluded": 0
  }
}

Przypisz faktury

POST/api/v1/ipbox/assign/
klucz: odczyt i zapis Standard i Biuro

Faktury z KSeF (invoices), koszty spoza KSeF (costs) i faktury sprzed KSeF (manual) do projektu, kosztów pośrednich albo „nie IP”. Faktura spoza okresu projektu daje 409 out_of_period — powtórz z force: true. Odpowiedź może zawierać propozycję przypisania pozostałych faktur kontrahenta (suggestion → /ipbox/apply-suggestion/).

Treść zapytania (JSON)

  • invoices / costs / manualuuid[]wymagany
    Co przypisać.
  • rolestringwymagany
    Rola.
    projectindirectexcluded
  • projectuuid
    Projekt (przy role=project).
  • nexusstringdomyślnie a
    Kategoria kosztu bezpośredniego.
    abcd
  • forceboolean
    Przypisz mimo daty spoza okresu projektu.
POST/api/v1/ipbox/assign/
curl -X POST https://ksefmobile.pl/api/v1/ipbox/assign/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "invoices": [
    "a92fdb89-b57f-55d4-8727-e6c694f9b459"
  ],
  "role": "indirect"
}'
Odpowiedź 200
{
  "assigned": 1,
  "suggestion": null
}

Cofnij przypisanie

POST/api/v1/ipbox/unassign/
klucz: odczyt i zapis Standard i Biuro

Faktury wracają do kolejki.

Treść zapytania (JSON)

  • invoices / costs / manualuuid[]wymagany
    Co cofnąć.
POST/api/v1/ipbox/unassign/
curl -X POST https://ksefmobile.pl/api/v1/ipbox/unassign/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "invoices": [
    "a92fdb89-b57f-55d4-8727-e6c694f9b459"
  ]
}'
Odpowiedź 200
{
  "removed": 1
}

Reguły kontrahentów

GET/api/v1/ipbox/rules/
klucz: odczyt Standard i Biuro

Nowe faktury od kontrahenta przypisują się same. Dodanie: POST /ipbox/rules/ z key (NIP), name, direction, role, project, nexus; usunięcie: DELETE /ipbox/rules/{id}/.

GET/api/v1/ipbox/rules/
curl https://ksefmobile.pl/api/v1/ipbox/rules/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"
Odpowiedź 200
[
  {
    "id": "5e959f74-9c30-4361-9d31-ca8a80c6e6a0",
    "key": "1106977983",
    "name": "ACME Dostawy sp. z o.o.",
    "direction": "received",
    "role": "indirect",
    "project_id": null,
    "project_name": null,
    "nexus": "a"
  }
]

Koszty pośrednie

GET/api/v1/ipbox/indirect/
klucz: odczyt Standard i Biuro

Pozycje puli kosztów pośrednich roku i ich podział między projekty (wg przychodu).

Parametry

  • yearinteger
    Rok.
GET/api/v1/ipbox/indirect/
curl -G https://ksefmobile.pl/api/v1/ipbox/indirect/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d year=2026
Odpowiedź 200
{
  "year": 2026,
  "rows": [
    {
      "kind": "invoice",
      "id": "cd1354fb-a408-54a6-93e0-c7b2dc6bc63d",
      "date": "2026-01-04",
      "number": "K/202601/0005",
      "description": "",
      "counterparty": "Paliwa Mazowsze sp. z o.o.",
      "nip": "4044482783",
      "amount": "782.27",
      "currency": "PLN",
      "original": null,
      "nexus": "a"
    }
  ],
  "total": "77122.71",
  "allocation": "all_revenue",
  "zus_indirect": true,
  "zus_month": "0.00",
  "base": "224747.65",
  "projects": [
    {
      "id": "825e6eae-6e55-4365-a222-db7a858c2f0f",
      "name": "REZERWACJE ZŁOTY KŁOS",
      "revenue": "52125.15",
      "share": "0.2319",
      "indirect": "17886.87"
    },
    {
      "id": "8c069220-ceee-4eed-b307-107bc01f7b1c",
      "name": "HOTEL ZACISZE",
      "revenue": "51386.99",
      "share": "0.2286",
      "indirect": "17633.57"
    },
    {
      "id": "55fa8ac2-ba56-4bdd-8c83-867272684c9a",
      "name": "APTEKA POD ORŁEM",
      "revenue": "49817.60",
      "share": "0.2217",
      "indirect": "17095.03"
    }
  ],
  "outside_ip": "24507.24"
}

Lista kontrolna ewidencji

GET/api/v1/ipbox/check/
klucz: odczyt Standard i Biuro

Co jeszcze trzeba zrobić przed pobraniem ewidencji (nieprzypisane faktury, opisy projektów, kursy NBP…).

Parametry

  • yearinteger
    Rok.
GET/api/v1/ipbox/check/
curl -G https://ksefmobile.pl/api/v1/ipbox/check/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d year=2026
Odpowiedź 200
{
  "year": 2026,
  "steps": [
    {
      "code": "projects",
      "label": "Projekty IP z przychodem",
      "done": true,
      "level": "ok",
      "detail": "3 z przychodem w 2026 r.: REZERWACJE ZŁOTY KŁOS, HOTEL ZACISZE, APTEKA POD ORŁEM",
      "tab": "projects"
    },
    {
      "code": "sales",
      "label": "Sprzedaż przypisana",
      "done": false,
      "level": "error",
      "detail": "15 faktur czeka na przypisanie.",
      "tab": "queue:issued"
    },
    {
      "code": "costs",
      "label": "Koszty przypisane",
      "done": true,
      "level": "ok",
      "detail": "Każdy koszt ma projekt, koszt pośredni albo „nie IP”.",
      "tab": "queue:received"
    },
    {
      "code": "extra",
      "label": "Koszty spoza KSeF przypisane",
      "done": true,
      "level": "ok",
      "detail": "Brak nieprzypisanych kosztów spoza KSeF.",
      "tab": "queue:received"
    },
    {
      "code": "indirect",
      "label": "Koszty pośrednie sprawdzone",
      "done": true,
      "level": "info",
      "detail": "114 pozycji  razem 77 122,71 zł, w tym ZUS co miesiąc. Podział według całego przychodu.",
      "tab": "indirect"
    },
    {
      "code": "rates",
      "label": "Kursy NBP",
      "done": true,
      "level": "ok",
      "detail": "Każda faktura w walucie ma kurs z dnia poprzedzającego.",
      "tab": ""
    },
    {
      "code": "client_id",
      "label": "NIP / numer VAT klientów",
      "done": true,
      "level": "ok",
      "detail": "Każda faktura sprzedaży w projektach ma identyfikator klienta.",
      "tab": "queue:issued"
    },
    {
      "code": "description",
      "label": "Opis każdego prawa IP",
      "done": true,
      "level": "ok",
      "detail": "Każdy projekt ma opis do arkusza „Opis IP”.",
      "tab": "projects"
    }
  ],
  "issues": [
    {
      "level": "error",
      "code": "unassigned_sales",
      "count": 15,
      "text": "15 faktur sprzedaży bez przypisania (projekt albo „nie IP”)."
    }
  ],
  "closed": false
}

Ewidencja IP Box (Excel)

GET/api/v1/ipbox/ewidencja.xlsx
klucz: odczyt Standard i Biuro

Pełna ewidencja roku: arkusz na projekt, koszty pośrednie, nexus, opis IP, godziny.

Parametry

  • yearinteger
    Rok.
GET/api/v1/ipbox/ewidencja.xlsx
curl -G https://ksefmobile.pl/api/v1/ipbox/ewidencja.xlsx \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -d year=2026 \
  -o ewidencja-ip-box-2026.xlsx
Plik XLSX.

Wysyłka do księgowej

Zestawienia faktur e-mailem do księgowej — na żądanie albo automatycznie co miesiąc.

Ustawienia

GET/api/v1/accountant/settings/
klucz: odczyt

Adresy księgowej, wiadomość i wysyłka automatyczna poprzedniego miesiąca. available — czy plan obejmuje funkcję.

Parametry

  • organizationuuid
    Firma (albo X-Organization).
GET/api/v1/accountant/settings/
curl https://ksefmobile.pl/api/v1/accountant/settings/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2"
Odpowiedź 200
{
  "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "emails": [
    "[email protected]"
  ],
  "message": "",
  "auto_enabled": true,
  "auto_day": 3,
  "auto_directions": "both",
  "auto_format": "xlsx",
  "last_auto_period": "",
  "available": true
}

Zapisz ustawienia

PUT/api/v1/accountant/settings/
klucz: odczyt i zapis Standard i Biuro

Wysyłka automatyczna idzie rano w wybranym dniu i obejmuje poprzedni miesiąc.

Treść zapytania (JSON)

  • emailsstring[]
    Do 5 adresów.
  • messagestring
    Wiadomość w e-mailu.
  • auto_enabledboolean
    Wysyłaj automatycznie co miesiąc.
  • auto_dayinteger
    Dzień miesiąca 1–28.
  • auto_directionsstring
    Które faktury.
    bothreceivedissued
  • auto_formatstring
    Format załączników.
    xlsxcsvzip
  • organizationuuid
    Firma — zamiast nagłówka X-Organization.
PUT/api/v1/accountant/settings/
curl -X PUT https://ksefmobile.pl/api/v1/accountant/settings/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "emails": [
    "[email protected]"
  ],
  "auto_enabled": true,
  "auto_day": 3,
  "auto_directions": "both",
  "auto_format": "xlsx"
}'
Odpowiedź 200
{
  "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "emails": [
    "[email protected]"
  ],
  "message": "",
  "auto_enabled": true,
  "auto_day": 3,
  "auto_directions": "both",
  "auto_format": "xlsx",
  "last_auto_period": "",
  "available": true
}

Wyślij zestawienie

POST/api/v1/accountant/send/
klucz: odczyt i zapis Standard i Biuro

Jeden e-mail, jeden załącznik na każdą część (np. otrzymane i wystawione). Budujemy i wysyłamy w tle — sprawdź wynik w historii.

Treść zapytania (JSON)

  • recipientsstring[]wymagany
    Adresy (do 5).
  • formatstringdomyślnie xlsx
    Format.
    xlsxcsvzip
  • partsobject[]wymagany
    Załączniki.
  • subjectstring
    Temat (domyślnie „Faktury za … – firma”).
  • messagestring
    Wiadomość.
  • rememberboolean
    Zapamiętaj adresy w ustawieniach firmy.
  • organizationuuid
    Firma — zamiast nagłówka X-Organization.
POST/api/v1/accountant/send/
curl -X POST https://ksefmobile.pl/api/v1/accountant/send/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: 59a25bf2-555b-57f0-a795-d897b8faceb2" \
  -H "Content-Type: application/json" \
  -d '{
  "recipients": [
    "[email protected]"
  ],
  "format": "xlsx",
  "parts": [
    {
      "direction": "received",
      "filters": {
        "date_from": "2026-09-01",
        "date_to": "2026-09-30"
      }
    },
    {
      "direction": "issued",
      "filters": {
        "date_from": "2026-09-01",
        "date_to": "2026-09-30"
      }
    }
  ]
}'
Odpowiedź 202
{
  "id": "17c0470b-f8b2-4d5f-af16-df0cc339c493",
  "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "trigger": "manual",
  "status": "pending",
  "recipients": [
    "[email protected]"
  ],
  "subject": "Faktury za wrzesień 2026 – Jan Kowalski Usługi",
  "format": "xlsx",
  "period": "wrzesień 2026",
  "files": [],
  "error": "",
  "created_at": "2026-10-01T13:21:36.821005+00:00",
  "sent_at": null
}

Historia wysyłek

GET/api/v1/accountant/dispatches/
klucz: odczyt

Ostatnie 20 wysyłek (ręcznych i automatycznych) ze statusem i plikami.

Parametry

  • X-Organizationheader
    Id firmy albo all (wszystkie firmy). Bez nagłówka — pierwsza firma konta.
  • organizationuuid
    Tylko ta firma.
GET/api/v1/accountant/dispatches/
curl https://ksefmobile.pl/api/v1/accountant/dispatches/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY" \
  -H "X-Organization: all"
Odpowiedź 200
[
  {
    "id": "17c0470b-f8b2-4d5f-af16-df0cc339c493",
    "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
    "trigger": "manual",
    "status": "sent",
    "recipients": [
      "[email protected]"
    ],
    "subject": "Faktury za wrzesień 2026 – Jan Kowalski Usługi",
    "format": "xlsx",
    "period": "wrzesień 2026",
    "files": [
      {
        "name": "otrzymane_2026-09.xlsx",
        "size": 9660,
        "count": 29
      },
      {
        "name": "wystawione_2026-09.xlsx",
        "size": 7011,
        "count": 9
      }
    ],
    "error": "",
    "created_at": "2026-10-01T13:21:36.821005+00:00",
    "sent_at": "2026-10-01T13:21:37.269250+00:00"
  },
  {
    "id": "1a7836d9-d74d-44d3-a88f-9eeb04998ee9",
    "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
    "trigger": "manual",
    "status": "sent",
    "recipients": [
      "[email protected]"
    ],
    "subject": "Faktury za wrzesień 2026 – Jan Kowalski Usługi",
    "format": "xlsx",
    "period": "wrzesień 2026",
    "files": [
      {
        "name": "otrzymane_2026-09.xlsx",
        "size": 9659,
        "count": 29
      },
      {
        "name": "wystawione_2026-09.xlsx",
        "size": 7010,
        "count": 9
      }
    ],
    "error": "",
    "created_at": "2026-10-01T13:11:19.079706+00:00",
    "sent_at": "2026-10-01T13:11:19.229257+00:00"
  }
]

Status wysyłki

GET/api/v1/accountant/dispatches/{id}/
klucz: odczyt

pending → sent albo failed (z error).

Parametry ścieżki

  • iduuidwymagany
    Id wysyłki.
GET/api/v1/accountant/dispatches/{id}/
curl https://ksefmobile.pl/api/v1/accountant/dispatches/17c0470b-f8b2-4d5f-af16-df0cc339c493/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY"
Odpowiedź 200
{
  "id": "17c0470b-f8b2-4d5f-af16-df0cc339c493",
  "organization_id": "59a25bf2-555b-57f0-a795-d897b8faceb2",
  "trigger": "manual",
  "status": "sent",
  "recipients": [
    "[email protected]"
  ],
  "subject": "Faktury za wrzesień 2026 – Jan Kowalski Usługi",
  "format": "xlsx",
  "period": "wrzesień 2026",
  "files": [
    {
      "name": "otrzymane_2026-09.xlsx",
      "size": 9660,
      "count": 29
    },
    {
      "name": "wystawione_2026-09.xlsx",
      "size": 7011,
      "count": 9
    }
  ],
  "error": "",
  "created_at": "2026-10-01T13:21:36.821005+00:00",
  "sent_at": "2026-10-01T13:21:37.269250+00:00"
}

Konto i plan

Kto jest właścicielem klucza i co obejmuje jego plan.

Właściciel klucza

GET/api/v1/auth/me/
klucz: odczyt

Konto, w imieniu którego działa klucz.

GET/api/v1/auth/me/
curl https://ksefmobile.pl/api/v1/auth/me/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY"
Odpowiedź 200
{
  "id": "2094e227-2c86-40b9-8064-576020a63187",
  "email": "[email protected]",
  "first_name": "Jan",
  "last_name": "Kowalski",
  "email_verified": true,
  "has_password": true,
  "organizations_count": 3,
  "api_enabled": true,
  "date_joined": "2026-09-28T08:03:49.713786+02:00"
}

Plan i limity

GET/api/v1/billing/subscription/
klucz: odczyt

Plan, okres, wykorzystanie limitu faktur w miesiącu, interwał sprawdzania KSeF, historia, liczba firm i funkcje planu.

GET/api/v1/billing/subscription/
curl https://ksefmobile.pl/api/v1/billing/subscription/ \
  -H "Authorization: Bearer $KSEF_MOBILE_API_KEY"
Odpowiedź 200
{
  "subscription": {
    "plan": {
      "code": "office",
      "name": "Biuro",
      "description": "Dla biur rachunkowych i kilku spółek — wiele firm na jednym koncie.",
      "price_monthly": 14900,
      "price_yearly": 149900,
      "currency": "PLN",
      "monthly_invoice_quota": null,
      "poll_interval_seconds": 600,
      "history_months": 60,
      "max_organizations": 25,
      "features": [
        "export_csv",
        "export_full"
      ]
    },
    "status": "active",
    "current_period_start": null,
    "current_period_end": null,
    "cancel_at_period_end": false
  },
  "entitlements": {
    "plan_code": "office",
    "plan_name": "Biuro",
    "monthly_invoice_quota": null,
    "invoices_used": 0,
    "quota_exceeded": false,
    "poll_interval_seconds": 600,
    "history_months": 60,
    "max_organizations": 25,
    "organizations_used": 3,
    "can_add_organization": true,
    "features": [
      "accountant",
      "digest"
    ],
    "enforced": false
  },
  "can_purchase": false,
  "can_manage": false
}