OBDRestPRZEJAZDY
Aplikacja iPhone · Aplikacja webowa · OpenAPI

Twój dziennik jazdy po prostu jedzie z Tobą.

OBDRest odczytuje przez adapter OBD2 przejazdy, kody błędów i wartości pomiarowe bezpośrednio z Twojego samochodu. Przejazdy są automatycznie rejestrowane, klasyfikowane jako prywatne lub służbowe i synchronizowane z Twoim serwerem – tam wszystko przeglądasz, zarządzasz i eksportujesz.

Działa również offlineDane należą do CiebieSerwer standardowy lub własny serwer
128zdekodowanych wartości pomiarowych OBD2
3.074wyjaśnionych kodów błędów Mercedes
4rodzaje przejazdów w dzienniku jazdy
60udokumentowanych operacji API
Jak to działa

Od wtyczki do analizy

Bez plątaniny kabli, bez pracy ręcznej: podłącz adapter, skonfiguruj aplikację raz – resztą zajmie się OBDRest w tle.

🔌

Podłącz adapter

Adapter ELM327 Bluetooth LE (np. Vgate iCar Pro 2S) do gniazda OBD2. Aplikacja zapamiętuje adapter.

📱

Ruszaj w drogę

Zapłon włączony – iOS łączy się automatycznie, również w tle. Trasa, prędkość, zużycie paliwa i parametry silnika są rejestrowane.

☁️

Synchronizuj

Po przejeździe przejazd, dane pojazdu, błędy i wartości pomiarowe trafiają na wybrany przez Ciebie serwer – standardowy lub własny. Offline czeka kolejka.

📊

Analizuj i eksportuj

W przeglądarce: przypisuj przejazdy w dzienniku jazdy, przeglądaj statystyki, śledź błędy, eksportuj CSV/JSON/GPX.

Serce systemu

Twoje dane na serwerze – przeglądaj, zarządzaj, eksportuj

Aplikacja przechowuje wszystko lokalnie i działa bez sieci. Z serwerem Twoje dane są dodatkowo zabezpieczane, dostępne na wszystkich urządzeniach i analizowane w przeglądarce.

👀

Przeglądaj

  • Przegląd z kluczowymi wskaźnikami, zużyciem paliwa i Eco-Score
  • Każdy przejazd z mapą, profilem prędkości, obrotów i wysokości
  • Pojazdy ze sterownikami, kodami błędów, wartościami pomiarowymi
  • Statystyki: dni tygodnia, godziny, czas jazdy vs. czas postoju
  • Mapa cieplna Twoich tras i roczna mapa dni jazdy
🗂️

Zarządzaj

  • Przypisuj przejazdy jako prywatne / służbowe / dojazd do pracy – pojedynczo lub zbiorczo
  • Cel i wielowierszowy opis dla każdego przejazdu
  • Wydatki z paragonami, dowodem rejestracyjnym i zdjęciami
  • Usuwanie przejazdów (z uprawnieniami), oddzielne prowadzenie pojazdów
  • Administratorzy zarządzają użytkownikami i uprawnieniami
📤

Eksportuj

  • Dziennik jazdy PDF gotowy do druku (A4 poziomo, sumy miesięczne)
  • Dziennik jazdy CSV dla Excel/Numbers z sumami według rodzaju
  • Pełny eksport JSON wszystkich danych, opcjonalnie z punktami pomiarowymi
  • GPX dla każdego przejazdu dla aplikacji mapowych
  • REST API do własnych analiz i skryptów
PDF dziennik jazdyCSV dziennik jazdyJSON pełny eksportGPX trasaOpenAPI 3.1 interfejscurl przykłady
📒 Dziennik jazdy

Prywatny czy służbowy? Wystarczy jedno dotknięcie.

Każdy zarejestrowany przejazd otrzymuje adres początkowy i docelowy, trasę i czas trwania. Przypisujesz go – w aplikacji przez przesunięcie, w przeglądarce przez kliknięcie lub dla wielu przejazdów naraz. Przypisanie jest synchronizowane w obu kierunkach.

🏠 Prywatny Czas wolny
💼 Służbowy Klient, spotkanie
🏢 Dojazd do pracy Dojazdy
❔ Nieprzypisany otwarty
  • Sumy według rodzaju i miesiąca jako wykres
  • Filtrowanie według okresu, rodzaju, pojazdu i pełnotekstowe
  • Eksport CSV z datą, godziną, adresami, km, celem
  • Widget „Dziennik jazdy" na ekranie głównym iPhone'a

ℹ️ OBDRest dostarcza dane do Twojego dziennika jazdy. To, czy elektroniczny dziennik jazdy zostanie uznany podatkowo, zależy od dodatkowych wymogów (np. niezmienialność) – prosimy o uzgodnienie z doradcą podatkowym.

Lista przejazdów z przypisaniem prywatny, służbowy i dojazd do pracy
Wydatki: cena paliwa, zużycie z paragonów za paliwo i koszty miesięczne
💶 Wydatki & Paragony

Tankowanie, parkowanie, naprawy – wszystkie koszty pod kontrolą.

Rejestruj każdy wydatek w kilka sekund – w przeglądarce lub w aplikacji, na życzenie bezpośrednio ze zdjęciem paragonu. OBDRest oblicza z tego cenę paliwa, rzeczywiste zużycie między dwoma pełnymi tankowaniami i Twoje koszty na kilometr.

⛽ Tankowanie Litry, €/l, zużycie
🅿️ Parkowanie Czas trwania, miejsca
🔧 Naprawa i konserwacja Przegląd, opony, badanie techniczne
🧾 Inne Opłaty drogowe, AdBlue, akcesoria
  • Paragony jako zdjęcie lub PDF – wiele na wydatek, w aplikacji bezpośrednio z aparatu
  • Paragony PDF są wyświetlane w przeglądarce za pomocą pdf.js – z powiększeniem i pobieraniem
  • Dowód rejestracyjny, zdjęcia, ubezpieczenie przypisane do pojazdu
  • Wydatki według miesiąca, kategorii i pojazdu – również w statystykach
  • Ochrona danych: każdy plik widzi tylko jego właściciel – nawet przy zmanipulowanym URL
Funkcje

Wszystko, co zdradza Twoje auto

Aplikacja iPhone tylko odczytuje – nie zmienia niczego w pojeździe (jedyny wyjątek: usuwanie pamięci błędów po potwierdzeniu).

🎛️

Kokpit i dane na żywo

Wszystkie obsługiwane przez pojazd wartości pomiarowe wszystkich sterowników w 10 grupach – od obrotów po różnicę ciśnień DPF.

🛣️

Automatyczne przejazdy

Początek i koniec są rozpoznawane, również w tle. Mapa, zużycie paliwa, CO₂, Eco-Score, zdarzenia kierowcy.

⚠️

Pamięć błędów

Aktualne i stare błędy (OBD 03/07/0A i diagnostyka producenta UDS), Freeze-Frame, historia.

📚

3.074 wyjaśnionych kodów

Kompendium kodów błędów Mercedes, z wyszukiwaniem i oznaczaniem znalezionych kodów.

🩺

Analiza

Reguły dla akumulatora, płynu chłodzącego, termostatu, katalizatora, filtra cząstek stałych i testów gotowości.

🅿️

Ruch i parkowanie

Jak długo auto jedzie, jak długo stoi? Proporcje, przerwy w parkowaniu i przebieg miesięczny.

🔐

Konta i uprawnienia

SSO lub konto lokalne, każdy widzi tylko swoje dane, administratorzy dodatkowo wszystkie.

🔥

Mapa cieplna i mapa roczna

Gdzie bywasz często? Mapa cieplna wszystkich tras i miejsc parkowania, do tego roczna mapa jak na GitHub ze wszystkimi dniami jazdy.

💶

Wydatki

Tankowanie, parkowanie, naprawy i inne z wykresami, ceną paliwa, zużyciem i kosztami na km.

📎

Paragony i dokumenty

Zdjęcia i PDF-y do wydatków i pojazdów – aparat w aplikacji, widok pdf.js w przeglądarce.

📝

Opis i PDF

Wielowierszowy opis dla każdego przejazdu, dziennik jazdy jako PDF gotowy do druku, CSV lub JSON.

🚗

Gdzie stoi moje auto?

Miejsce parkowania na końcu ostatniego przejazdu z aktualnym adresem – jedno dotknięcie uruchamia nawigację pieszą, w aplikacji i w przeglądarce.

🧮

Przebieg

Wprowadź stan licznika dla każdego pojazdu (aplikacja, web, MCP), opcjonalnie również przy tankowaniu, parkowaniu i w warsztacie. Stan z dzisiaj jest wyliczany na podstawie przejazdów od tego momentu.

🤖

Agent MCP

Odpytuj przejazdy, wydatki i statystyki w języku naturalnym – z Claude i innymi klientami MCP. Wszystkie polecenia →

📶

Najpierw offline

Wszystko jest przechowywane lokalnie; kolejka wysyła dane, gdy tylko jest sieć. W pełni użyteczne bez serwera.

Zrzuty ekranu

Tak to wygląda

Z danymi testowymi: Mercedes GLC 220 d i VW Golf, przejazdy w Berlinie i nad Bałtykiem. Kliknięcie powiększa.

Kokpit
Kokpit
Dane na żywo
Dane na żywo
Bieżąca jazda
Bieżąca jazda
Jazda z mapą
Jazda z mapą
Pamięć błędów
Pamięć błędów
Dialog serwera
Dialog serwera
Obsługiwane adaptery

Właściwa wtyczka do gniazda OBD2

OBDRest komunikuje się z adapterami zgodnymi z ELM327 przez Bluetooth Low Energy. Gniazdo OBD2 znajduje się najczęściej pod kierownicą; obowiązkowe w samochodach benzynowych od 2001 i wysokoprężnych od 2004 (UE).

✅ Mój adapter · przetestowany

Vgate iCar Pro 2S

Ilustracja Vgate iCar Pro 2S z pierścieniem świetlnym i wtyczką OBD2

Kompaktowy adapter OBD2 z Bluetooth 5.2, zestawem poleceń ELM327 v2.3 i pierścieniem świetlnym. Automatycznie przechodzi w tryb uśpienia (prąd spoczynkowy ok. 3 mA) i wybudza się przy uruchomieniu – również w pojazdach hybrydowych i elektrycznych – dlatego może pozostać włączony na stałe. Na iPhone pojawia się jako IOS-Vlink.

  • Połączenie bezpośrednio w aplikacji przez BLE – nie parować w ustawieniach iOS
  • Automatyczne połączenie w tle, gdy tylko zapłon jest włączony
  • Przetestowano z Mercedes-Benz GLC (X253, 2015), CAN 11 bit / 500 kbit/s

Zgodność

Adapter / interfejsUsługa BLEStatus
Vgate iCar Pro 2S18F0✅ przetestowany
Vgate iCar Pro (BLE 4.0)18F0🟢 ten sam interfejs
Adapter ELM327 BLE (wiele klonów)FFF0🟢 obsługiwany
Adaptery oparte na HM-10FFE0🟢 obsługiwany
Adaptery z usługą E7810A71…E7810A71🟢 obsługiwany
Klasyczny Bluetooth (SPP) na iPhone–❌ niedozwolone przez iOS
Adaptery Wi-Fi–⏳ obecnie nie

ℹ️ „Obsługiwany” oznacza: aplikacja rozpoznaje usługę BLE i komunikuje się przez ELM327. Tanie klony często zgłaszają nieprawidłową wersję oprogramowania i nie obsługują wielokrotnych zapytań ani diagnostyki producenta (UDS) – aplikacja automatycznie przełącza się wtedy na pojedyncze zapytania.

Eksploatacja

Dokąd trafiają Twoje dane? Ty decydujesz.

Aplikacja działa bez serwera. Jeśli chcesz synchronizować, używasz albo serwera standardowego – albo własnego serwera. Przełączanie w dowolnym momencie w aplikacji: przycisk połączenia w prawym górnym rogu → „Adapter i serwer” → Serwer.

Wariant A · standardowy

☁️ Serwer standardowy

Ustawiony domyślnie, nic nie trzeba konfigurować. Zarejestruj konto, zaloguj się w aplikacji – gotowe.

Adresse:  https://app.fahrten.fusenigk.de
Benutzer: dein Konto (SSO oder registriert)
Wariant B · własny serwer

🏠 Twój własny serwer

Samodzielne uruchomienie naszej aplikacji webowej (Docker) lub własna implementacja udokumentowanego REST API. W aplikacji wystarczy zmienić adres.

Adresse:  https://fahrten.meine-firma.de
Benutzer: Konto auf deinem Server

🔒 Aplikacja wysyła dane wyłącznie na adres podany w dialogu serwera. Bez serwera wszystkie dane pozostają tylko na iPhonie. Zmiana jest możliwa w każdej chwili – „Zresetuj synchronizację” wyśle wtedy wszystkie jazdy do nowego serwera.

Zalecane

☁️ Hostowane

Gotowe do startu pod app.fahrten.fusenigk.de: TLS, codzienna konserwacja, logowanie SSO, rejestracja w minutę.

Zarejestruj się teraz
On-Premises

🏠 W własnej sieci

Cała aplikacja webowa działa jako stos Docker Compose (Next.js + MariaDB) na Twoim serwerze lub NAS. Logowanie przez Keycloak/SSO lub konta lokalne.

# Webapp-Verzeichnis kopieren, .env anlegen
cp .env.example .env    # DB-Passwörter, SESSION_SECRET
docker compose up -d --build
curl http://localhost:3330/api/v1/health
Dla deweloperów

🧩 Własny serwer

Aplikacja korzysta z otwartego interfejsu REST udokumentowanego jako OpenAPI 3.1. Zaimplementuj samodzielnie punkty końcowe synchronizacji – np. dla swojego zarządzania flotą – i wpisz adres w aplikacji.

Dokumentacja API openapi.yaml 🤖 Agent MCP
Pytania

Częste pytania

Jakiego adaptera potrzebuję?

Zobacz Obsługiwane adaptery.

Adapter zgodny z ELM327 z Bluetooth Low Energy, przetestowany z Vgate iCar Pro 2S (zgłasza się jako „IOS-Vlink”). Nie parować w ustawieniach Bluetooth iOS – aplikacja łączy się bezpośrednio.

Czy muszę korzystać z waszego serwera?

Nie. Domyślnie jest to app.fahrten.fusenigk.de, ale w każdej chwili możesz wpisać własny serwer – naszą aplikację webową przez Docker Compose lub własną implementację REST API. Albo pracować całkowicie bez serwera.

Czy aplikacja działa bez serwera?

Tak. Jazdy, błędy i wartości pomiarowe są zawsze zapisywane na iPhonie. Serwer to uzupełnienie: kopia zapasowa, analiza w przeglądarce, eksport i wiele urządzeń.

Kto widzi moje dane?

Tylko Ty. Każde zapytanie jest ograniczone do Twojego konta. Administratorzy Twojej instalacji mogą w celach zarządzania zobaczyć wszystkie dane – w przypadku On-Prem to Ty sam.

Jak wyeksportować dziennik jazd?

W aplikacji webowej w sekcji „Jazdy” → „Dziennik jazd (CSV)” (filtry zostaną zastosowane) lub przez GET /api/v1/export/fahrten.csv. Wszystkie dane są dostępne jako JSON, każda trasa jako GPX.

Czy mogę wypróbować demo?

Tak – na stronie logowania wybierz „Zobacz demo” (użytkownik demo, hasło demo). Demo zawiera jazdy testowe, kody błędów i wartości pomiarowe, jest tylko do odczytu i ze względów bezpieczeństwa dostępne wyłącznie w przeglądarce – do aplikacji i REST API potrzebujesz własnego konta.

Czy pojazd zostanie zmodyfikowany?

Nie. OBDRest korzysta wyłącznie z odczytowych usług diagnostycznych. Jedynym wyjątkiem jest usuwanie pamięci błędów – tylko po wyraźnym potwierdzeniu.

Gotowy na pierwszą jazdę?

Załóż konto, wpisz serwer w aplikacji, ruszaj w drogę.

Agent MCP mcp-fahrten v1.0.0

Odpytuj swoje dane jazd w języku naturalnym – w Claude Code, Claude Desktop lub dowolnym innym kliencie z Model Context Protocol (MCP). Agent korzysta z udokumentowanego REST API: z serwerem standardowym lub Twoim własnym serwerem.

🔍 21 narzędzi odczytu

Jazdy, dziennik jazd, statystyki, mapa cieplna, pojazdy, błędy, wartości pomiarowe, wydatki, parking

✏️ 5 narzędzi zapisu

Przypisywanie i opisywanie jazd, rejestrowanie wydatków, przesyłanie dokumentów – oznaczone jako „zmienia dane”

📤 Eksporty

Dziennik jazd jako PDF lub CSV, wszystkie dane jako JSON, trasy jako GPX, pobieranie dokumentów

💬 Przykładowy dialog

Ty: Ile kilometrów przejechałem służbowo w październiku, ile kosztował mnie samochód i gdzie teraz stoi?
→ fahrtenbuch_auswertung(od 2026-10-01, do 2026-10-31) · ausgaben_statistik(…) · parkplatz()
Claude: W październiku przejechałeś służbowo 246 km (14 % wszystkich kilometrów). Wydatki wyniosły około 1180 € – przede wszystkim przegląd (489,60 €) i czyszczenie DPF (378 €). Twój GLC stoi od wczoraj 14:36 pod adresem Unter den Linden 10 – pieszo: [Google-Maps-Link]. Trzy przejazdy nie są jeszcze przypisane – czy mam je wpisać jako „droga do pracy”?

Narzędzia zapisujące (✏️) klient wykonuje tylko po twoim potwierdzeniu.

Ogólne

CZYTAfahrten_statusStatus i logowanie

Sprawdza serwer i bazę danych oraz pokazuje zalogowanego użytkownika wraz z jego uprawnieniami (wysyłanie, usuwanie, API, administrator).

Brak parametrów.

Przykładowe prompty
Czy serwer przejazdów jest osiągalny i na jakim koncie jestem zalogowany?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "fahrten_status", "arguments": {}}}

Jazdy i dziennik jazd

CZYTAfahrten_listeLista przejazdów

Wyświetla listę przejazdów z datą, trasą, km, rodzajem (prywatny/służbowy/droga do pracy), zużyciem i Eco-Score. Filtrowanie według okresu, rodzaju, pojazdu i pełnego tekstu.

Parametry (* obowiązkowe)
NazwaTypOpis
vonstringData początkowa RRRR-MM-DD (opcjonalnie)
bisstringData końcowa RRRR-MM-DD, włącznie (opcjonalnie)
artprivat | geschaeftlich | arbeitsweg | noneRodzaj przejazdu (none = nieprzypisany)
fahrzeugnumberID pojazdu (patrz fahrzeuge_liste)
suchestringPełny tekst w adresach, etykiecie i opisie
limitnumberLiczba (domyślnie 50, maks. 1000)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Pokaż mi wszystkie przejazdy służbowe w październiku 2026.Które przejazdy prowadziły do Poczdamu?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "fahrten_liste", "arguments": {}}}
CZYTAfahrt_detailSzczegóły przejazdu

Wszystkie wskaźniki przejazdu (trasa, czas trwania, prędkość, zużycie, CO₂, Eco-Score z czynnikami, zdarzenia kierowcy, opis). Opcjonalnie skrócona tabela punktów pomiarowych.

Parametry (* obowiązkowe)
NazwaTypOpis
id *stringID przejazdu (UUID)
messpunktenumberLiczba punktów pomiarowych w wyniku (0 = brak, domyślnie 0)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Jak oszczędny był mój ostatni przejazd i co mogę zrobić lepiej?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "fahrt_detail", "arguments": {"id": "…"}}}
CZYTAfahrtenbuch_auswertungAnaliza książki przejazdów

Kilometry według rodzaju przejazdu i miesiąca, udziały prywatny/służbowy/droga do pracy oraz lista jeszcze nieprzypisanych przejazdów.

Parametry (* obowiązkowe)
NazwaTypOpis
vonstringData początkowa RRRR-MM-DD (opcjonalnie)
bisstringData końcowa RRRR-MM-DD, włącznie (opcjonalnie)
fahrzeugnumberID pojazdu (patrz fahrzeuge_liste)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Ile kilometrów przejechałem służbowo w 2026 roku i które przejazdy nie są jeszcze przypisane?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "fahrtenbuch_auswertung", "arguments": {}}}
ZAPISUJEfahrt_zuordnenPrzypisywanie przejazdów

✏️ Zmienia dane: przypisuje jeden lub więcej przejazdów jako prywatny, służbowy lub drogę do pracy.

Parametry (* obowiązkowe)
NazwaTypOpis
ids *string[]ID przejazdów
art *privat | geschaeftlich | arbeitsweg | noneRodzaj przejazdu (none = nieprzypisany)
Przykładowe prompty
Przypisz przejazdy 6f1b2c3d-… i 7a2c… jako służbowe.
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "fahrt_zuordnen", "arguments": {"ids": "…", "art": "…"}}}
ZAPISUJEfahrt_bearbeitenEdytuj przejazd

✏️ Zmienia dane: ustawia rodzaj, etykietę (krótką, np. klient) i/lub wielowierszowy opis przejazdu.

Parametry (* obowiązkowe)
NazwaTypOpis
id *stringID przejazdu
artprivat | geschaeftlich | arbeitsweg | noneRodzaj przejazdu (none = nieprzypisany)
etikettstringKrótka etykieta / cel
beschreibungstringWielowierszowy opis (puste = usuń)
Przykładowe prompty
Wpisz przy moim przejeździe do Adlershof jako cel „Spotkanie z klientem Muster GmbH”.
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "fahrt_bearbeiten", "arguments": {"id": "…"}}}

Statystyki i analizy

CZYTAstatistikStatystyki

Wskaźniki okresu: przejazdy, km, godziny, litry, Ø zużycie, CO₂, Eco-Score, bieg jałowy, zdarzenia kierowcy, km na miesiąc, dni tygodnia, godziny i długości tras.

Parametry (* obowiązkowe)
NazwaTypOpis
vonstringData początkowa RRRR-MM-DD (opcjonalnie)
bisstringData końcowa RRRR-MM-DD, włącznie (opcjonalnie)
fahrzeugnumberID pojazdu (patrz fahrzeuge_liste)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Podaj mi statystyki moich przejazdów w ostatnim kwartale.W który dzień tygodnia jeżdżę najwięcej?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "statistik", "arguments": {}}}
CZYTAbewegung_parkenRuch i parkowanie

Jak długo pojazdy są w ruchu i jak długo parkują? Czas jazdy, bieg jałowy, czas parkowania, udział jazdy, stosunek i przerwy na parkowanie.

Parametry (* obowiązkowe)
NazwaTypOpis
vonstringData początkowa RRRR-MM-DD (opcjonalnie)
bisstringData końcowa RRRR-MM-DD, włącznie (opcjonalnie)
fahrzeugnumberID pojazdu (patrz fahrzeuge_liste)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Jaki procent czasu moje auto tylko stoi?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "bewegung_parken", "arguments": {}}}
CZYTAheatmap_orteNajczęstsze miejsca (heatmapa)

Najczęstsze miejsca startu/celu (miejsca parkowania) i zasięg wszystkich przejazdów – podstawa heatmapy.

Parametry (* obowiązkowe)
NazwaTypOpis
vonstringData początkowa RRRR-MM-DD (opcjonalnie)
bisstringData końcowa RRRR-MM-DD, włącznie (opcjonalnie)
artprivat | geschaeftlich | arbeitsweg | noneRodzaj przejazdu (none = nieprzypisany)
fahrzeugnumberID pojazdu (patrz fahrzeuge_liste)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Gdzie parkuję najczęściej?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "heatmap_orte", "arguments": {}}}
CZYTAjahreskarteMapa roczna (przejazdy na dzień)

Przejazdy i km na dzień kalendarzowy w roku (jak wskaźnik aktywności GitHub): aktywne dni, najdłuższa seria, dzień z największą liczbą przejazdów.

Parametry (* obowiązkowe)
NazwaTypOpis
jahrnumberRok (domyślnie: bieżący rok)
artprivat | geschaeftlich | arbeitsweg | noneRodzaj przejazdu (none = nieprzypisany)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
W ilu dniach jeździłem w 2026 roku i jaka była moja najdłuższa seria?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "jahreskarte", "arguments": {}}}
CZYTAmonatsberichtRaport miesięczny

Zwięzły raport za miesiąc: przejazdy, km, podział książki przejazdów, zużycie, Eco-Score, wydatki według kategorii, koszt na km i aktywne błędy.

Parametry (* obowiązkowe)
NazwaTypOpis
monat *stringMiesiąc RRRR-MM
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Utwórz mi raport miesięczny za październik 2026.
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "monatsbericht", "arguments": {"monat": "…"}}}

Pojazdy i diagnostyka

CZYTAfahrzeuge_listePojazdy

Wszystkie pojazdy z VIN, przejazdami, km, paliwem, aktywnymi błędami i ostatnim przejazdem.

Parametry (* obowiązkowe)
NazwaTypOpis
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Jakie mam pojazdy i ile km przejechały?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "fahrzeuge_liste", "arguments": {}}}
CZYTAfahrzeug_zustandStan pojazdu

Stan pojazdu: wskaźniki, aktywne i stare kody błędów, sterowniki i ostatnie wartości pomiarowe z wynikami analizy.

Parametry (* obowiązkowe)
NazwaTypOpis
id *numberID pojazdu
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Czy z moim GLC wszystko w porządku?Jakie błędy ma pojazd 4?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "fahrzeug_zustand", "arguments": {"id": 1}}}
CZYTAfehler_listeKody błędów

Kody błędów (DTC) wszystkich lub jednego pojazdu z opisem, systemem, statusem (aktywny/stary), pierwszym/ostatnim wystąpieniem i liczbą.

Parametry (* obowiązkowe)
NazwaTypOpis
aktivbooleantylko aktywne błędy
fahrzeugnumberID pojazdu (patrz fahrzeuge_liste)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Które kody błędów są teraz aktywne?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "fehler_liste", "arguments": {}}}
CZYTAmesswert_verlaufHistoria wartości pomiarowych

Historia wartości pomiarowej OBD we wszystkich migawkach (np. 42 = napięcie sterownika, 05 = płyn chłodzący, 2F = poziom paliwa) z minimum, maksimum i średnią.

Parametry (* obowiązkowe)
NazwaTypOpis
pid *stringPID OBD w formacie szesnastkowym
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Jak rozwijało się napięcie pokładowe? Czy akumulator jest słaby?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "messwert_verlauf", "arguments": {"pid": "…"}}}
CZYTAparkplatzGdzie stoi moje auto?

Miejsce parkowania każdego pojazdu (koniec ostatniego przejazdu) z adresem, czasem i linkami do nawigacji pieszej (Google Maps, Apple Maps).

Parametry (* obowiązkowe)
NazwaTypOpis
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Gdzie zaparkowałem swoje auto?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "parkplatz", "arguments": {}}}
CZYTAkilometerstandPrzebieg

Ostatni zarejestrowany przebieg pojazdu (ręcznie lub z paragonów paliwowych/warsztatowych), szacowany stan na dziś (+ km przejechane od tego czasu) i historia.

Parametry (* obowiązkowe)
NazwaTypOpis
fahrzeug *numberID pojazdu (patrz fahrzeuge_liste)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Jaki jest aktualny przebieg mojego GLC?Kiedy przypada następny przegląd, jeśli jest co 25 000 km?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "kilometerstand", "arguments": {"fahrzeug": 1}}}
ZAPISUJEkilometerstand_erfassenZarejestruj przebieg

✏️ Zmienia dane: zapisuje odczytany przebieg dla własnego pojazdu.

Parametry (* obowiązkowe)
NazwaTypOpis
fahrzeug *numberID pojazdu (patrz fahrzeuge_liste)
km *numberPrzebieg (całe km)
datumstringData ISO (domyślnie: teraz)
notizstringNotatka
Przykładowe prompty
Mój GLC ma dziś na liczniku 128 450 km – wpisz to.
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "kilometerstand_erfassen", "arguments": {"fahrzeug": 1, "km": 1}}}

Wydatki i dokumenty

CZYTAausgaben_listeLista wydatków

Wydatki (tankowanie, parkowanie, naprawa, inne) z sumami według kategorii, dostawcy, szczegółami i liczbą paragonów.

Parametry (* obowiązkowe)
NazwaTypOpis
kategoriatankowanie | parkowanie | naprawa | inneKategoria
vonstringData początkowa RRRR-MM-DD (opcjonalnie)
bisstringData końcowa RRRR-MM-DD, włącznie (opcjonalnie)
fahrzeugnumberID pojazdu (patrz fahrzeuge_liste)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Ile wydałem w październiku na tankowanie?Wymień wszystkie naprawy wraz z fakturami.
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "ausgaben_liste", "arguments": {}}}
CZYTAausgaben_statistikAnalizuj wydatki

Koszty według miesiąca i kategorii, koszty na kilometr, średnia cena paliwa, zużycie z pełnych tankowań, najdroższe miejsca parkowania, naprawy według rodzaju, wydatki na pojazd.

Parametry (* obowiązkowe)
NazwaTypOpis
vonstringData początkowa RRRR-MM-DD (opcjonalnie)
bisstringData końcowa RRRR-MM-DD, włącznie (opcjonalnie)
fahrzeugnumberID pojazdu (patrz fahrzeuge_liste)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Ile kosztuje mnie mój samochód na kilometr?Jak rozwijała się cena paliwa?
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "ausgaben_statistik", "arguments": {}}}
ZAPISUJEausgabe_anlegenZarejestruj wydatek

✏️ Zmienia dane: tworzy wydatek (tankowanie z litrami/ceną/pełnym tankowaniem, parkowanie z czasem trwania, naprawa z rodzajem/numerem faktury, inne). Następnie załącz paragony za pomocą beleg_hochladen.

Parametry (* obowiązkowe)
NazwaTypOpis
kategoria *tankowanie | parkowanie | naprawa | inneKategoria
betrag *numberKwota w euro
datumstringCzas ISO 8601 (domyślnie: teraz)
fahrzeugnumberID pojazdu (patrz fahrzeuge_liste)
anbieterstringStacja paliw, parking, warsztat
ortstringMiejsce/adres
km_standnumberPrzebieg
notizstringNotatka
liternumberTankowanie: litry
preis_je_liternumberTankowanie: €/l
vollgetanktbooleanTankowanie: pełne tankowanie
kraftstoffstringTankowanie: np. diesel
dauer_minnumberParkowanie: minuty
reparatur_artstringNaprawa: przegląd, wymiana oleju, opony, badanie techniczne, …
rechnungs_nrstringNaprawa: numer faktury
Przykładowe prompty
Właśnie zatankowałem na stacji Aral 48,6 l diesla za 82,45 € do pełna, stan licznika 129980.Zarejestruj 6,50 € za parkowanie w parkingu Adlershof przez 2 godziny.
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "ausgabe_anlegen", "arguments": {"kategorie": "…", "betrag": 1}}}
CZYTAbelege_listeParagony i dokumenty pojazdu

Paragony (zdjęcia/PDF) wydatku lub dokumenty pojazdu (dowód rejestracyjny, zdjęcia, ubezpieczenie) z ID, typem i rozmiarem.

Parametry (* obowiązkowe)
NazwaTypOpis
ausgabe_idstringID wydatku
fahrzeug_idnumberID pojazdu (zamiast ausgabe_id)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Jakie paragony są dołączone do przeglądu z 5 października?Pokaż mi dokumenty mojego GLC.
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "belege_liste", "arguments": {}}}
CZYTAbeleg_herunterladenPobierz paragon

Zapisuje paragon lub dokument pojazdu (zdjęcie/PDF) lokalnie. Tylko własne pliki.

Parametry (* obowiązkowe)
NazwaTypOpis
id *stringID pliku (patrz belege_liste)
ziel_pfadstringLokalna ścieżka docelowa pliku (domyślnie: bieżący katalog)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Pobierz fakturę za przegląd.
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "beleg_herunterladen", "arguments": {"id": "…"}}}
ZAPISUJEbeleg_hochladenPrześlij paragon

✏️ Zmienia dane: przesyła lokalne zdjęcia/PDF-y (JPEG, PNG, WebP, HEIC, PDF; maks. 15 MB) do wydatku lub jako dokument pojazdu.

Parametry (* obowiązkowe)
NazwaTypOpis
pfade *string[]Lokalne ścieżki plików
ausgabe_idstringID wydatku
fahrzeug_idnumberID pojazdu (zamiast ausgabe_id)
dokumentartdowód rejestracyjny | zdjęcie | ubezpieczenie | innetylko przy fahrzeug_id (domyślnie zdjęcie)
Przykładowe prompty
Prześlij ~/Downloads/rechnung.pdf jako paragon do naprawy 3c1e…Dodaj ~/Scans/fahrzeugschein.pdf do pojazdu 4 jako dowód rejestracyjny.
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "beleg_hochladen", "arguments": {"pfade": "…"}}}

Eksport

CZYTAexport_fahrtenbuchEksportuj książkę jazdy

Zapisuje książkę jazdy jako PDF (A4 poziomo, sumy miesięczne), CSV (Excel, sumy według rodzaju) lub wszystkie dane jako JSON lokalnie.

Parametry (* obowiązkowe)
NazwaTypOpis
format *pdf | csv | jsonFormat
vonstringData początkowa RRRR-MM-DD (opcjonalnie)
bisstringData końcowa RRRR-MM-DD, włącznie (opcjonalnie)
artprivat | geschaeftlich | arbeitsweg | noneRodzaj przejazdu (none = nieprzypisany)
fahrzeugnumberID pojazdu (patrz fahrzeuge_liste)
ziel_pfadstringLokalna ścieżka docelowa pliku (domyślnie: bieżący katalog)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Wyeksportuj moją służbową książkę jazdy 2026 jako PDF.Zapisz wszystkie moje dane jako JSON.
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "export_fahrtenbuch", "arguments": {"format": "…"}}}
CZYTAexport_gpxTrasa jako GPX

Zapisuje trasę GPS przejazdu jako GPX 1.1 (wysokość, czas, prędkość) – np. dla aplikacji mapowych.

Parametry (* obowiązkowe)
NazwaTypOpis
id *stringID przejazdu
ziel_pfadstringLokalna ścieżka docelowa pliku (domyślnie: bieżący katalog)
allebooleanTylko administratorzy: dane wszystkich użytkowników
Przykładowe prompty
Zapisz trasę mojej podróży nad Bałtyk jako GPX.
Wywołanie (JSON-RPC)
{"method": "tools/call", "params": {"name": "export_gpx", "arguments": {"id": "…"}}}

📋 Prompty (szablony)

PromptOpisArgumenty
monatsberichtRaport za miesiąc (przejazdy, książka jazdy, wydatki, błędy) z oceną.miesiąc: miesiąc RRRR-MM
fahrtenbuch_vervollstaendigenZnajdź nieprzypisane przejazdy i zaproponuj przypisanie.od: data początkowa RRRR-MM-DD
fahrzeug_checkSprawdź stan wszystkich pojazdów (błędy, akumulator, konserwacja).–

Zasób: fahrten://openapi.yaml – specyfikacja OpenAPI interfejsu REST API.

Dokumentacja API v1.4.0

Interfejs REST dla przejazdów, pojazdów, kodów błędów i wartości pomiarowych aplikacji iOS OBDRest · OpenAPI 3.1.0 · pobierz openapi.yaml

📘 Podstawy

Aplikacja iOS OBDRest odczytuje dane pojazdu przez adapter OBD2 (ELM327, Bluetooth LE), rejestruje przejazdy i wysyła je do tego serwera. Za pośrednictwem tego samego interfejsu można odczytywać, zarządzać i eksportować wszystkie dane – lub zaimplementować własny serwer, do którego aplikacja będzie wysyłać swoje dane (okno dialogowe serwera w aplikacji: adres, użytkownik, hasło).

Format odpowiedzi: Wszystkie odpowiedzi JSON mają kopertę { "ok": true, "daten": … } lub { "ok": false, "fehler": "tekst jawny", "details": … }. Czasy są w formacie ISO 8601 w UTC.

Logowanie (przeczytaj najpierw):

  1. POST /auth/login z nazwą użytkownika i hasłem (konto SSO lub konto lokalne) → daten.token.
  2. Każde kolejne wywołanie z nagłówkiem Authorization: Bearer <token>. Tokeny dla client: "app" są ważne 90 dni, dla client: "web" 12 godzin (wtedy dodatkowo jako httpOnly-cookie fahrten_session).
  3. Alternatywnie dla skryptów: HTTP Basic (curl -u benutzer:passwort).

Uprawnienia: Zwykli użytkownicy widzą i zmieniają tylko własne dane. Administratorzy widzą z ?alle=1 dane wszystkich użytkowników lub z ?benutzer=<id> dane jednego użytkownika i zarządzają użytkownikami pod /admin/benutzer.

Przesyłane dane są idempotentne: przejazdy, odczyty błędów i migawki mają UUID aplikacji, pojazdy są rozpoznawane przez użytkownika + numer nadwozia (VIN). Ponowne wysłanie nie tworzy duplikatów.

Serwer
https://app.fahrten.fusenigk.de/api/v1 – produkcja (hostowana)
https://fahrten.fusenigk.de/api/v1 – przekierowanie dla starszych instalacji aplikacji
http://localhost:3330/api/v1 – On-Premises / własna instalacja (Docker Compose)

📦 Format odpowiedzi i błędy

Każda odpowiedź JSON to koperta: {"ok": true, "daten": …} przy sukcesie, {"ok": false, "fehler": "Klartext", "details": …} przy błędach. Eksporty (CSV, plik JSON, GPX) zwracają plik bezpośrednio.

StatusZnaczenie
200/201Sukces
400Nieprawidłowe dane wejściowe (walidacja zod, details wskazuje pole)
401Niezalogowany lub token wygasł → zaloguj się ponownie
403Brak uprawnień (np. wysyłanie, usuwanie, administracja)
404Nie znaleziono – również gdy rekord należy do innego użytkownika
409/429Konflikt (nazwa zajęta) / zbyt wiele żądań
500/503Błąd serwera / SSO lub baza danych niedostępne

Logowanie

Logowanie, rejestracja, wylogowanie, własny użytkownik

POST/auth/login🌐 publiczny

Zaloguj się i pobierz token

Sprawdza hasło przez SSO (Keycloak, Realm fusenigk) lub – w przypadku kont lokalnych – względem zapisanego hasha scrypt. Tylko użytkownicy odblokowani w aplikacji (tabela users) otrzymują token. Wywołanie nic nie zapisuje w bazie danych. Po 10 nieudanych próbach na IP w ciągu 15 minut serwer odpowiada 429.

Uprawnienie API: konta bez uprawnienia darfApi (np. konto demo demo) otrzymują z client: "app" odpowiedź 403 (grund: api_disabled) – dopiero po sprawdzeniu hasła. Takie konta mogą logować się tylko w przeglądarce; tokeny Bearer i HTTP Basic są dla nich również odrzucane z 403.

Żądanie (application/json) – schemat LoginAnfrage
{
  "username": "max.mustermann",
  "password": "geheim-und-lang",
  "client": "app"
}
Odpowiedzi
200Zalogowany
400Nieprawidłowe dane wejściowe
401Nieprawidłowa nazwa użytkownika lub hasło (także przy nieznanym użytkowniku – brak enumeracji)
403Hasło prawidłowe, ale konto nieodblokowane, zablokowane lub bez uprawnienia API (grund: api_disabled, np. konto demo)
429Zbyt wiele nieudanych prób
503Serwer SSO niedostępny
Przykładowa odpowiedź
{
  "ok": true,
  "daten": {
    "benutzer": {
      "id": 7,
      "username": "max.mustermann",
      "name": "Max Mustermann",
      "email": "max@example.org",
      "rolle": "user",
      "istAdmin": false,
      "darfSenden": true,
      "darfLoeschen": true,
      "darfApi": true,
      "aktiv": true,
      "anmeldung": "local"
    },
    "methode": "local",
    "token": "eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiRGVtby1CZW51dHplciIsImFydCI6ImFwcCJ9.…",
    "ablauf": "2027-02-05T09:20:00.000Z"
  }
}
curl – ustaw dane dostępowe (własne konto – konto demo nie ma dostępu do API)
export BENUTZER='max.mustermann'
export PASSWORT='geheim-und-lang'
curl – zaloguj się i zapisz token w zmiennej
TOKEN=$(curl -s https://app.fahrten.fusenigk.de/api/v1/auth/login \
  -H 'Content-Type: application/json' \
  -d "{\"username\":\"$BENUTZER\",\"password\":\"$PASSWORT\",\"client\":\"app\"}" | jq -r .daten.token)
echo "$TOKEN"
curl – następnie każde wywołanie z tokenem Bearer
curl -s https://app.fahrten.fusenigk.de/api/v1/auth/me -H "Authorization: Bearer $TOKEN"
curl – alternatywa bez tokena – HTTP Basic
curl -s -u "$BENUTZER:$PASSWORT" https://app.fahrten.fusenigk.de/api/v1/auth/me
POST/auth/registrieren🌐 publiczny

Utwórz konto lokalne

Tworzy lokalnego użytkownika (rola user, może wysyłać i usuwać własne przejazdy) w bazie danych i od razu go loguje. Zastrzeżone nazwy (admin, demo, …) i zajęte nazwy → 409. Maksymalnie 5 rejestracji na IP w ciągu 15 minut.

Żądanie (application/json) – schemat Registrierung
{
  "username": "max.mustermann",
  "name": "Max Mustermann",
  "email": "max@example.org",
  "passwort": "geheim-und-lang",
  "client": "app"
}
Odpowiedzi
201Utworzono i zalogowano (odpowiedź jak przy logowaniu)
400Nieprawidłowe dane wejściowe
409Nazwa zastrzeżona lub zajęta
429Zbyt wiele rejestracji
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/auth/registrieren \
  -H 'Content-Type: application/json' \
  -d '{"username":"max.mustermann","name":"Max Mustermann","email":"max@example.org","passwort":"geheim-und-lang","client":"app"}'
GET/auth/me🔒 wymagane zalogowanie

Zalogowany użytkownik z uprawnieniami

Odpowiedzi
200Użytkownicy
401Niezalogowany
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/auth/me -H "Authorization: Bearer $TOKEN"
POST/auth/logout🌐 publiczny

Usuń ciasteczko sesji

Tokeny Bearer są bezstanowe (JWT) i wygasają; wylogowanie dotyczy tylko ciasteczka przeglądarki.

Odpowiedzi
200Wylogowano
429Zbyt wiele żądań
curl
curl -s -X POST https://app.fahrten.fusenigk.de/api/v1/auth/logout

Synchronizacja

Przesyłane dane aplikacji iOS (istotne również dla własnych implementacji serwera)

POST/sync/fahrten🔒 wymagane zalogowanie

Wyślij przejazdy wraz z punktami pomiarowymi

Przyjmuje 1–50 przejazdów w formacie Codable aplikacji (Trip). Istniejące przejazdy o tym samym UUID są zastępowane (wraz ze wszystkimi punktami pomiarowymi); UUID innego użytkownika nigdy nie jest nadpisywany (status: fremd). Pojazd jest przypisywany lub tworzony przez vin. Wymagane uprawnienie darfSenden.

Żądanie (application/json)
Odpowiedzi
200Wynik dla każdego przejazdu
400Nieprawidłowe dane wejściowe
401Niezalogowany
403Brak uprawnień do wysyłania
Przykładowa odpowiedź
{
  "ok": true,
  "daten": {
    "fahrten": [
      {
        "id": "6f1b2c3d-4e5f-4a1b-9c2d-0123456789ab",
        "status": "neu",
        "messpunkte": 1834
      }
    ]
  }
}
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/sync/fahrten \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"fahrzeugName":"GLC 220 d","trips":[{"id":"6F1B2C3D-4E5F-4A1B-9C2D-0123456789AB",
       "startDate":"2026-11-07T07:00:00Z","endDate":"2026-11-07T07:24:00Z","kind":"geschaeftlich",
       "note":"Kundentermin","fuelType":"diesel","vin":"WDC2539051F123456","isDemo":false,
       "summary":{"distanceKm":18.4,"litersPer100km":6.1,"eco":{"score":81,"factors":[]}},
       "samples":[{"time":"2026-11-07T07:00:02Z","speed":12.5,"rpm":1100,"latitude":52.52,"longitude":13.405}]}]}'
POST/sync/fahrzeug🔒 wymagane zalogowanie

Wyślij dane pojazdu i sterowników (OBD tryb 09)

Żądanie (application/json) – schemat FahrzeugUpload
Odpowiedzi
200Pojazd utworzony/zaktualizowany
403Brak uprawnień do wysyłania
Przykładowa odpowiedź
{
  "ok": true,
  "daten": {
    "fahrzeugId": 4
  }
}
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/sync/fahrzeug \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"vin":"WDC2539051F123456","name":"Mercedes-Benz GLC (2015)","fuelType":"diesel",
       "protocol":"ISO 15765-4 CAN (11 Bit, 500 kBaud)","adapter":"IOS-Vlink",
       "ecus":[{"ecu":"7E8","name":"ECM – EngineControl","calibrationIDs":["6519015400"],"calibrationVerificationNumbers":["1A2B3C4D"]}]}'
POST/sync/fehler🔒 wymagane zalogowanie

Wyślij odczyt pamięci błędów i historię błędów

Zapisuje odczyt w postaci surowej i scala historię według kodu (pierwsze/ostatnie wystąpienie, liczba, aktywny).

Żądanie (application/json) – schemat FehlerUpload
Odpowiedzi
200zapisano
401Niezalogowany
Przykładowa odpowiedź
{
  "ok": true,
  "daten": {
    "id": "0d6e…",
    "neu": true,
    "codes": 2,
    "aktiv": 1
  }
}
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/sync/fehler \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"id":"0D6E2A11-1C2B-4E7F-9A10-2B3C4D5E6F70","vin":"WDC2539051F123456","readAt":"2026-11-07T07:01:00Z",
       "entries":[{"code":"P2002","kind":"stored","ecu":"7E8","description":"Dieselpartikelfilter – Wirkungsgrad unter Schwellenwert","udsStatus":47}],
       "udsECUs":["7E8"],"history":[]}'
POST/sync/messwerte🔒 wymagane zalogowanie

Wyślij migawkę wszystkich wartości pomiarowych na żywo

Żądanie (application/json) – schemat Momentaufnahme
Odpowiedzi
200zapisano
401Niezalogowany
Przykładowa odpowiedź
{
  "ok": true,
  "daten": {
    "id": "9a…",
    "neu": true,
    "werte": 42
  }
}
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/sync/messwerte \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"id":"9A1B2C3D-0000-4000-8000-000000000001","vin":"WDC2539051F123456","takenAt":"2026-11-07T07:10:00Z",
       "voltage":14.1,"protocol":"ISO 15765-4 CAN","readings":[{"pid":"0C","ecu":"7E8","name":"Drehzahl","value":1850,"unit":"U/min","group":"Motor"}],
       "findings":[{"title":"Ladespannung in Ordnung","detail":"14,1 V","severity":"ok"}]}'
GET/sync/index🔒 wymagane zalogowanie

Własne identyfikatory przejazdów ze znacznikiem zmian

Podstawa synchronizacji w aplikacji – brakujące przejazdy są pobierane, przypisania zmienione w sieci są przejmowane.

Odpowiedzi
200Indeks
401Niezalogowany
Przykładowa odpowiedź
{
  "ok": true,
  "daten": {
    "fahrten": [
      {
        "id": "6F1B2C3D-4E5F-4A1B-9C2D-0123456789AB",
        "aktualisiert": "2026-11-07T08:00:00.000Z",
        "messpunkte": 1834
      }
    ]
  }
}
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/sync/index -H "Authorization: Bearer $TOKEN" | jq '.daten.fahrten | length'
POST/sync/ausgaben🔒 wymagane zalogowanie

Wyślij wydatki z aplikacji (1–500, idempotentnie przez UUID)

Żądanie (application/json)
{
  "ausgaben": [
    {
      "kategorie": "tanken",
      "datum": "2026-11-07T08:15:00Z",
      "betrag": 82.45,
      "fahrzeugId": 4,
      "anbieter": "Aral Unter den Linden",
      "liter": 48.6,
      "preisJeLiter": 1.699,
      "kraftstoff": "Diesel",
      "vollgetankt": true,
      "kmStand": 129980,
      "id": "3c1e5a2b-7d4f-4e8a-9b1c-2d3e4f5a6b7c"
    }
  ]
}
Odpowiedzi
200Status dla każdego wydatku (nowy/zaktualizowany/obcy)
401Niezalogowany
403brak uprawnień
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/sync/ausgaben -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -d @ausgaben.json
POST/sync/kilometerstand🔒 wymagane zalogowanie

Wyślij przebiegi z aplikacji (1–500, idempotentnie przez UUID, pojazd przez VIN)

Żądanie (application/json)
{
  "kilometerstaende": [
    {
      "id": "5b0e7d1c-2a4f-4c3e-8d9a-1f2e3d4c5b6a",
      "vin": "WDC2539091F000000",
      "km": 128450,
      "datum": "2026-11-07T09:00:00Z"
    }
  ]
}
Odpowiedzi
200Status dla każdego wpisu (nowy/zaktualizowany/obcy/brak-pojazdu)
401Niezalogowany
403brak uprawnień
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/sync/kilometerstand -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -d @kilometerstaende.json
POST/sync/unbekannt🔒 wymagane logowanie

Zgłaszanie nieznanych kodów aplikacji (PID bez dekodera, kody błędów bez opisu)

Zagregowane według użytkownika + pojazdu (VIN) + typu + kodu + sterownika; ostatnie 20 surowych danych pozostaje jako próbki. Administratorzy analizują wpisy w /admin/unbekannt.

Żądanie (application/json)
{
  "vin": "WDC2539091F000000",
  "protokoll": "ISO 15765-4 CAN (11 bit, 500 kbaud)",
  "adapter": "Vgate iCar Pro",
  "codes": [
    {
      "art": "pid",
      "code": "8B",
      "ecu": "7E8",
      "modus": "01",
      "roh": "1F 00 2A 10",
      "gesehen": "2026-11-07T18:00:00Z"
    }
  ]
}
Odpowiedzi
200ID pojazdu, liczba kodów, w tym nowe
400nieprawidłowe dane wejściowe (np. surowe dane nie w formacie hex)
401Niezalogowany
403brak uprawnień do wysyłania
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/sync/unbekannt -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -d @unbekannt.json
GET/sync/ausgaben-index🔒 wymagane zalogowanie

Własne identyfikatory wydatków ze znacznikiem zmian

Odpowiedzi
200`daten.ausgaben[]`
401Niezalogowany
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/sync/ausgaben-index -H "Authorization: Bearer $TOKEN"

Przejazdy

Czytanie przejazdów, przypisywanie do księgi jazd (prywatny/służbowy/dojazd do pracy), usuwanie

GET/fahrten🔒 wymagane zalogowanie

Wyświetl listę przejazdów

Parametry
NazwaMiejsceTypOpis
allequerystring (1)

Tylko administratorzy: dane wszystkich użytkowników

benutzerqueryinteger

Tylko administratorzy: dane określonego użytkownika

fahrzeugqueryinteger

ID pojazdu

vonquerystring · datePrzykład: 2026-10-01
bisquerystring · datePrzykład: 2026-10-31
artqueryFahrtArt
suchequerystring

Pełny tekst w adresach i notatce

limitqueryinteger
offsetqueryinteger
Odpowiedzi
200Strona listy przejazdów
401Niezalogowany
curl – przejazdy służbowe w październiku
curl -s 'https://app.fahrten.fusenigk.de/api/v1/fahrten?art=geschaeftlich&von=2026-10-01&bis=2026-10-31' \
  -H "Authorization: Bearer $TOKEN" | jq '.daten.fahrten[] | {start, km, startAdresse, zielAdresse, notiz}'
PATCH/fahrten🔒 wymagane zalogowanie

Zbiorcze przypisanie prywatny / służbowy / dojazd do pracy

Żądanie (application/json)
Odpowiedzi
200Liczba zmienionych przejazdów
401Niezalogowany
Przykładowa odpowiedź
{
  "ok": true,
  "daten": {
    "geaendert": 2
  }
}
curl
curl -s -X PATCH https://app.fahrten.fusenigk.de/api/v1/fahrten \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"ids":["6f1b2c3d-4e5f-4a1b-9c2d-0123456789ab","7a2c…"],"kind":"geschaeftlich"}'
GET/fahrten/{id}🔒 wymagane zalogowanie

Przejazd ze wszystkimi punktami pomiarowymi

Parametry
NazwaMiejsceTypOpis
idpath · wymaganestring · uuid
formatquerystring (app)

app zwraca format Codable aplikacji iOS (Trip)

allequerystring (1)

Tylko administratorzy: dane wszystkich użytkowników

Odpowiedzi
200Przejazd wraz z `punkte` (lub `samples` przy format=app)
404Nie znaleziono (lub niewidoczny)
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/fahrten/$ID -H "Authorization: Bearer $TOKEN" | jq '.daten | {km, art, punkte: (.punkte|length)}'
PATCH/fahrten/{id}🔒 wymagane zalogowanie

Zmień rodzaj, etykietę i opis przejazdu

Parametry
NazwaMiejsceTypOpis
idpath · wymaganestring · uuid
Żądanie (application/json)
{
  "kind": "geschaeftlich",
  "note": "Kundentermin Adlershof",
  "details": "Projektbesprechung mit Frau Muster.\nRückweg über Lager Schönefeld (Material abgeholt)."
}
Odpowiedzi
200zmieniono
404Nie znaleziono (lub niewidoczny)
curl
curl -s -X PATCH https://app.fahrten.fusenigk.de/api/v1/fahrten/$ID \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"kind":"geschaeftlich","note":"Kundentermin Adlershof","details":"Projektbesprechung.\nRückweg über Lager Schönefeld."}'
DELETE/fahrten/{id}🔒 wymagane zalogowanie

Usuń przejazd (uprawnienie darfLoeschen)

Parametry
NazwaMiejsceTypOpis
idpath · wymaganestring · uuid
Odpowiedzi
200usunięto
403Brak uprawnień
404Nie znaleziono (lub niewidoczny)
curl
curl -s -X DELETE https://app.fahrten.fusenigk.de/api/v1/fahrten/$ID -H "Authorization: Bearer $TOKEN"

Pojazdy

Pojazdy według użytkownika (rozpoznawane przez numer nadwozia)

GET/fahrzeuge🔒 wymagane zalogowanie

Pojazdy z kluczowymi danymi

Parametry
NazwaMiejsceTypOpis
allequerystring (1)

Tylko administratorzy: dane wszystkich użytkowników

Odpowiedzi
200Lista (`daten.fahrzeuge`)
401Niezalogowany
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/fahrzeuge -H "Authorization: Bearer $TOKEN" | jq '.daten.fahrzeuge[] | {name, vin, fahrten, km, fehlerAktiv}'
GET/fahrzeuge/{id}🔒 wymagane zalogowanie

Pojazd z przebiegiem miesięcznym, błędami, ostatnimi przejazdami i ostatnimi wartościami pomiarowymi

Parametry
NazwaMiejsceTypOpis
idpath · wymaganeinteger
Odpowiedzi
200Pojazd
404Nie znaleziono (lub niewidoczny)
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/fahrzeuge/4 -H "Authorization: Bearer $TOKEN"
GET/fahrzeuge/{id}/kilometerstand🔒 wymagane zalogowanie

Przebieg – ostatni i szacowany stan, historia (ręczna i z wydatków)

aktuell to najnowszy znany stan – wprowadzony ręcznie lub jako kmStand wydatku (tankowanie, parkowanie, naprawa, inne). geschaetzt = km + suma przejazdów zarejestrowanych po nim (seitherKm).

Parametry
NazwaMiejsceTypOpis
idpath · wymaganeinteger
Odpowiedzi
200Przebieg
401Niezalogowany
404Nie znaleziono (lub niewidoczny)
Przykładowa odpowiedź
{
  "ok": true,
  "daten": {
    "aktuell": {
      "km": 128450,
      "datum": "2026-11-01T09:00:00Z",
      "geschaetzt": 128712,
      "seitherKm": 262
    },
    "verlauf": [
      {
        "id": "3C1E5A2B-7D4F-4E8A-9B1C-2D3E4F5A6B7C",
        "km": 128450,
        "datum": "2026-11-01T09:00:00Z",
        "quelle": "manuell",
        "notiz": "Tacho abgelesen",
        "ausgabeId": null
      }
    ]
  }
}
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/fahrzeuge/4/kilometerstand -H "Authorization: Bearer $TOKEN"
POST/fahrzeuge/{id}/kilometerstand🔒 wymagane logowanie

Zarejestruj stan licznika (idempotentnie przez opcjonalny UUID)

Parametry
NazwaMiejsceTypOpis
idpath · wymaganeinteger
Żądanie (application/json) – schemat Kilometerstand
{
  "km": 128450,
  "datum": "2026-11-07T09:00:00Z",
  "notiz": "Tacho abgelesen"
}
Odpowiedzi
200zaktualizowano
201utworzono nowy
400nieprawidłowe dane wejściowe
401Niezalogowany
403brak uprawnień (np. dostęp demo)
404Nie znaleziono (lub niewidoczny)
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/fahrzeuge/4/kilometerstand \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"km": 128450, "notiz": "Tacho abgelesen"}'
DELETE/kilometerstand/{id}🔒 wymagane logowanie

Usuń ręcznie zarejestrowany stan licznika (stany z wydatków zmieniaj przez wydatek)

Parametry
NazwaMiejsceTypOpis
idpath · wymaganestring · uuid
Odpowiedzi
200usunięto
401Niezalogowany
403brak uprawnień
404Nie znaleziono (lub niewidoczny)
curl
curl -s -X DELETE https://app.fahrten.fusenigk.de/api/v1/kilometerstand/3c1e5a2b-7d4f-4e8a-9b1c-2d3e4f5a6b7c -H "Authorization: Bearer $TOKEN"

Błędy

Kody błędów (DTC) i odczyty

GET/fehler🔒 wymagane logowanie

Kody błędów (aktywne i stare)

Parametry
NazwaMiejsceTypOpis
aktivquerystring (1)

tylko aktywne kody

fahrzeugqueryinteger
allequerystring (1)

Tylko administratorzy: dane wszystkich użytkowników

Odpowiedzi
200Lista (`daten.fehler`)
401Niezalogowany
curl
curl -s 'https://app.fahrten.fusenigk.de/api/v1/fehler?aktiv=1' -H "Authorization: Bearer $TOKEN" | jq '.daten.fehler[] | {code, beschreibung, fahrzeug}'
GET/fehler/{id}🔒 wymagane logowanie

Kod błędu ze wszystkimi odczytami, w których wystąpił

Parametry
NazwaMiejsceTypOpis
idpath · wymaganeinteger
Odpowiedzi
200Błędy
404Nie znaleziono (lub niewidoczny)
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/fehler/12 -H "Authorization: Bearer $TOKEN"
GET/fehler/auslesungen🔒 wymagane logowanie

Odczyty pamięci błędów

Odpowiedzi
200Lista (`daten.auslesungen`)
401Niezalogowany
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/fehler/auslesungen -H "Authorization: Bearer $TOKEN"

Wydatki

Tankowanie, parkowanie, naprawa/serwis, inne – rejestrowanie, zmiana, analiza

GET/ausgaben🔒 wymagane logowanie

Wyświetl wydatki (z sumami według kategorii)

Parametry
NazwaMiejsceTypOpis
kategoriaquerystring (tanken, parken, reparatur, sonstiges)
vonquerystring · date
bisquerystring · date
fahrzeugqueryinteger
limitqueryinteger
allequerystring (1)

Tylko administratorzy: dane wszystkich użytkowników

Odpowiedzi
200`daten.ausgaben[]` (w tym liczba dokumentów), `daten.summen`, `daten.gesamt`
401Niezalogowany
curl
curl -s 'https://app.fahrten.fusenigk.de/api/v1/ausgaben?kategorie=tanken&von=2026-01-01' -H "Authorization: Bearer $TOKEN" | jq '.daten | {gesamt, summen}'
POST/ausgaben🔒 wymagane logowanie

Zarejestruj wydatek (uprawnienie „senden”)

Żądanie (application/json) – schemat Ausgabe
{
  "kategorie": "tanken",
  "datum": "2026-11-07T08:15:00Z",
  "betrag": 82.45,
  "fahrzeugId": 4,
  "anbieter": "Aral Unter den Linden",
  "liter": 48.6,
  "preisJeLiter": 1.699,
  "kraftstoff": "Diesel",
  "vollgetankt": true,
  "kmStand": 129980
}
Odpowiedzi
201utworzono (szczegóły z `belegListe`)
400Nieprawidłowe dane wejściowe
401Niezalogowany
403brak uprawnień
curl – zarejestruj naprawę
curl -s https://app.fahrten.fusenigk.de/api/v1/ausgaben -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"kategorie":"reparatur","datum":"2026-11-05T09:00:00Z","betrag":489.60,"art":"Inspektion","anbieter":"Mercedes-Benz Niederlassung Berlin","kmStand":129310,"rechnungsNr":"R-2026-48311"}'
curl – zarejestruj parkowanie
curl -s https://app.fahrten.fusenigk.de/api/v1/ausgaben -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"kategorie":"parken","datum":"2026-11-06T09:30:00Z","betrag":6.50,"dauerMin":120,"anbieter":"Parkhaus WISTA Adlershof"}'
GET/ausgaben/{id}🔒 wymagane logowanie

Wydatek z listą dokumentów

Parametry
NazwaMiejsceTypOpis
idpath · wymaganestring · uuid
Odpowiedzi
200Wydatek
401Niezalogowany
404Nie znaleziono (lub niewidoczny)
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/ausgaben/$AUSGABE -H "Authorization: Bearer $TOKEN"
PUT/ausgaben/{id}🔒 wymagane logowanie

Zmień wydatek

Parametry
NazwaMiejsceTypOpis
idpath · wymaganestring · uuid
Żądanie (application/json) – schemat Ausgabe
{
  "kategorie": "tanken",
  "datum": "2026-11-07T08:15:00Z",
  "betrag": 82.45,
  "fahrzeugId": 4,
  "anbieter": "Aral Unter den Linden",
  "liter": 48.6,
  "preisJeLiter": 1.699,
  "kraftstoff": "Diesel",
  "vollgetankt": true,
  "kmStand": 129980
}
Odpowiedzi
200zmieniono
401Niezalogowany
404Nie znaleziono (lub niewidoczny)
curl
curl -s -X PUT https://app.fahrten.fusenigk.de/api/v1/ausgaben/$AUSGABE -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -d '{"kategorie":"tanken","datum":"2026-11-07T08:15:00Z","betrag":82.45,"liter":48.6,"vollgetankt":true}'
DELETE/ausgaben/{id}🔒 wymagane logowanie

Usuń wydatek wraz z dokumentami (także plikami)

Parametry
NazwaMiejsceTypOpis
idpath · wymaganestring · uuid
Odpowiedzi
200usunięto
401Niezalogowany
404Nie znaleziono (lub niewidoczny)
curl
curl -s -X DELETE https://app.fahrten.fusenigk.de/api/v1/ausgaben/$AUSGABE -H "Authorization: Bearer $TOKEN"
GET/ausgaben/statistik🔒 wymagane logowanie

Wydatki według miesiąca i kategorii, cena paliwa, zużycie z dokumentów tankowania, koszt na km, miejsca parkowania, rodzaje napraw

Parametry
NazwaMiejsceTypOpis
vonquerystring · date
bisquerystring · date
fahrzeugqueryinteger
allequerystring (1)

Tylko administratorzy: dane wszystkich użytkowników

Odpowiedzi
200Statystyka
401Niezalogowany
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/ausgaben/statistik -H "Authorization: Bearer $TOKEN" | jq '.daten | {gesamt, kostenJeKm, tanken: .tanken.schnittPreis}'

Paragony i dokumenty

Zdjęcia i pliki PDF do wydatków (dokumenty) i pojazdów (dowód rejestracyjny, zdjęcia, ubezpieczenie) – tylko własne pliki

GET/ausgaben/{id}/belege🔒 wymagane logowanie

Dokumenty wydatku

Parametry
NazwaMiejsceTypOpis
idpath · wymaganestring · uuid
Odpowiedzi
200`daten.belege[]` (plik)
401Niezalogowany
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/ausgaben/$AUSGABE/belege -H "Authorization: Bearer $TOKEN" | jq '.daten.belege[] | {dateiname, mime, url}'
POST/ausgaben/{id}/belege🔒 wymagane logowanie

Prześlij zdjęcia/PDF-y do wydatku

Typ pliku jest rozpoznawany na podstawie zawartości (JPEG, PNG, WebP, HEIC, PDF); SVG/HTML są odrzucane (415). Identyczne pliki (SHA-256) nie są zapisywane dwukrotnie. Przechowywanie na serwerze w uploads/<gruppe>/<untergruppe>/u<benutzer>/<uuid>.

Parametry
NazwaMiejsceTypOpis
idpath · wymaganestring · uuid
Żądanie (application/json)
Odpowiedzi
201`daten.belege[]` zapisane, `daten.fehler[]` odrzucone pliki
400brak prawidłowego pliku
401Niezalogowany
403brak uprawnień
404Nie znaleziono (lub niewidoczny)
curl – prześlij fakturę i zdjęcie
curl -s https://app.fahrten.fusenigk.de/api/v1/ausgaben/$AUSGABE/belege -H "Authorization: Bearer $TOKEN" \
  -F datei=@rechnung.pdf -F datei=@foto-quittung.jpg
GET/belege/{id}🔒 wymagane logowanie

Dostarcz plik (tylko własne pliki)

Dostarcza plik inline (?download=1 jako załącznik). Obce identyfikatory dają 404 – także przy ręcznie zmienionym URL.

Parametry
NazwaMiejsceTypOpis
idpath · wymaganestring · uuid
downloadquerystring (1)
Odpowiedzi
200Plik
401Niezalogowany
404Nie znaleziono (lub niewidoczny)
curl
curl -s -OJ 'https://app.fahrten.fusenigk.de/api/v1/belege/$BELEG?download=1' -H "Authorization: Bearer $TOKEN"
DELETE/belege/{id}🔒 wymagane logowanie

Usuń plik

Parametry
NazwaMiejsceTypOpis
idpath · wymaganestring · uuid
Odpowiedzi
200usunięto
401Niezalogowany
404Nie znaleziono (lub niewidoczny)
curl
curl -s -X DELETE https://app.fahrten.fusenigk.de/api/v1/belege/$BELEG -H "Authorization: Bearer $TOKEN"
GET/fahrzeuge/{id}/dateien🔒 wymagane logowanie

Dowód rejestracyjny, zdjęcia i dokumenty pojazdu

Parametry
NazwaMiejsceTypOpis
idpath · wymaganeinteger
Odpowiedzi
200`daten.dateien[]`
401Niezalogowany
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/fahrzeuge/4/dateien -H "Authorization: Bearer $TOKEN"
POST/fahrzeuge/{id}/dateien🔒 wymagane logowanie

Prześlij dowód rejestracyjny/zdjęcie/dokument

Typ pliku jest rozpoznawany na podstawie zawartości (JPEG, PNG, WebP, HEIC, PDF); SVG/HTML są odrzucane (415). Identyczne pliki (SHA-256) nie są zapisywane dwukrotnie. Przechowywanie na serwerze w uploads/<gruppe>/<untergruppe>/u<benutzer>/<uuid>.

Parametry
NazwaMiejsceTypOpis
idpath · wymaganeinteger
Żądanie (application/json)
Odpowiedzi
201`daten.dateien[]`, `daten.fehler[]`
401Niezalogowany
403brak uprawnień
404Nie znaleziono (lub niewidoczny)
curl – prześlij dowód rejestracyjny
curl -s https://app.fahrten.fusenigk.de/api/v1/fahrzeuge/4/dateien -H "Authorization: Bearer $TOKEN" \
  -F dokumentart=fahrzeugschein -F datei=@fahrzeugschein.pdf

Wartości pomiarowe

Migawki wszystkich danych na żywo

GET/messwerte🔒 wymagane logowanie

Migawki danych na żywo

Odpowiedzi
200Lista (`daten.momentaufnahmen`)
401Niezalogowany
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/messwerte -H "Authorization: Bearer $TOKEN"
GET/messwerte/{id}🔒 wymagane logowanie

Wszystkie wartości i wyniki jednej migawki

Parametry
NazwaMiejsceTypOpis
idpath · wymaganestring · uuid
Odpowiedzi
200Migawka
404Nie znaleziono (lub niewidoczny)
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/messwerte/$SNAP -H "Authorization: Bearer $TOKEN" | jq '.daten.werte[] | "\(.name): \(.value) \(.unit)"'
GET/messwerte/verlauf🔒 wymagane logowanie

Przebieg pomiaru przez wszystkie migawki

Parametry
NazwaMiejsceTypOpis
pidquerystring

OBD-PID szesnastkowo, np. 42 = napięcie sterownika, 05 = płyn chłodzący

Odpowiedzi
200Przebieg
401Niezalogowany
Przykładowa odpowiedź
{
  "ok": true,
  "daten": {
    "pid": "42",
    "verlauf": [
      {
        "zeit": "2026-10-01T08:12:00.000Z",
        "wert": 14.12,
        "einheit": "V"
      }
    ]
  }
}
curl
curl -s 'https://app.fahrten.fusenigk.de/api/v1/messwerte/verlauf?pid=42' -H "Authorization: Bearer $TOKEN"

Statystyka

Wskaźniki i dane wykresu

GET/statistik🔒 wymagane logowanie

Wskaźniki i dane wykresu

Sumy, miesiące, dziennik jazdy według rodzaju, dni tygodnia, godziny, Eco-Score, długości tras, zużycie, błędy według systemu oraz „Bewegung & Parken” (czas jazdy, czas parkowania, stosunek, przerwy w parkowaniu).

Parametry
NazwaMiejsceTypOpis
vonquerystring · date
bisquerystring · date
fahrzeugqueryinteger
allequerystring (1)

Tylko administratorzy: dane wszystkich użytkowników

Odpowiedzi
200Statystyka
401Niezalogowany
curl
curl -s 'https://app.fahrten.fusenigk.de/api/v1/statistik?von=2026-01-01' -H "Authorization: Bearer $TOKEN" | jq '.daten | {summe, bewegung: (.bewegung | {anteilFahren, verhaeltnis})}'
GET/karte/heatmap🔒 wymagane logowanie

Heatmapa: gęstość przebywania wszystkich przejazdów (komórki siatki ≈ 110 m, miejsca parkowania z większą wagą)

Parametry
NazwaMiejsceTypOpis
vonquerystring · date
bisquerystring · date
artquerystring (privat, geschaeftlich, arbeitsweg, none)
fahrzeugqueryinteger
allequerystring (1)

Tylko administratorzy: dane wszystkich użytkowników

Odpowiedzi
200`punkte[[lat, lon, gewicht]]`, `grenzen`, `haeufigsteOrte[]`
401Niezalogowany
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/karte/heatmap -H "Authorization: Bearer $TOKEN" | jq '.daten | {zellen, haeufigsteOrte}'
GET/karte/tage🔒 wymagane logowanie

Mapa roczna: przejazdy i km na dzień (jak wskaźnik aktywności GitHub)

Parametry
NazwaMiejsceTypOpis
jahrqueryinteger
artquerystring (privat, geschaeftlich, arbeitsweg, none)
fahrzeugqueryinteger
allequerystring (1)

Tylko administratorzy: dane wszystkich użytkowników

Odpowiedzi
200`tage[]`, `aktiveTage`, `laengsteSerie`, `meisteFahrten`
401Niezalogowany
curl
curl -s 'https://app.fahrten.fusenigk.de/api/v1/karte/tage?jahr=2026' -H "Authorization: Bearer $TOKEN" | jq '.daten | {aktiveTage, laengsteSerie}'

Eksport

Dziennik jazdy jako CSV lub PDF, wszystkie dane jako JSON, trasa jako GPX

GET/fahrten/{id}/gpx🔒 wymagane logowanie

Trasa przejazdu jako GPX 1.1

Parametry
NazwaMiejsceTypOpis
idpath · wymaganestring · uuid
Odpowiedzi
200Plik GPX
404Nie znaleziono (lub niewidoczny)
curl
curl -s -OJ https://app.fahrten.fusenigk.de/api/v1/fahrten/$ID/gpx -H "Authorization: Bearer $TOKEN"
GET/export/fahrten.csv🔒 wymagane logowanie

Dziennik jazdy jako CSV

Rozdzielany średnikami, UTF-8 z BOM (otwiera się bezpośrednio w Excel/Numbers), z sumami według rodzaju. Filtry jak w /fahrten.

Parametry
NazwaMiejsceTypOpis
vonquerystring · date
bisquerystring · date
artqueryFahrtArt
fahrzeugqueryinteger
allequerystring (1)

Tylko administratorzy: dane wszystkich użytkowników

Odpowiedzi
200Plik CSV
401Niezalogowany
Przykładowa odpowiedź
Datum;Beginn;Ende;Dauer (min);Start;Ziel;km;Art;Notiz;…
06.11.2026;09:43;10:01;18;Unter den Linden 10, 10117 Berlin;Rudower Chaussee 17, 12489 Berlin;17,4;Geschäftlich;Projektbesprechung;…
curl – przejazdy służbowe 2026 do celów podatkowych
curl -s -o fahrtenbuch-2026.csv \
  'https://app.fahrten.fusenigk.de/api/v1/export/fahrten.csv?art=geschaeftlich&von=2026-01-01&bis=2026-12-31' \
  -H "Authorization: Bearer $TOKEN"
GET/export/fahrten.pdf🔒 wymagane logowanie

Dziennik jazdy jako PDF (A4 poziomo)

Dziennik jazdy gotowy do druku: nagłówek z użytkownikiem, okresem i filtrem, sumy według rodzaju przejazdu (prywatny, służbowy, droga do pracy, otwarty), tabela chronologicznie według miesięcy z sumami częściowymi, suma całkowita i numery stron. Czcionka Unicode (DejaVu Sans), dlatego także polskie adresy są poprawne. Filtry jak w /fahrten.

Parametry
NazwaMiejsceTypOpis
vonquerystring · date
bisquerystring · date
artqueryFahrtArt
fahrzeugqueryinteger
suchequerystring
allequerystring (1)

Tylko administratorzy: dane wszystkich użytkowników

Odpowiedzi
200Plik PDF
401Niezalogowany
curl – przejazdy służbowe za październik jako PDF
curl -s -o fahrtenbuch-oktober.pdf \
  'https://app.fahrten.fusenigk.de/api/v1/export/fahrten.pdf?art=geschaeftlich&von=2026-10-01&bis=2026-10-31' \
  -H "Authorization: Bearer $TOKEN"
GET/export/daten.json🔒 wymagane logowanie

Wszystkie własne dane jako JSON

Pojazdy, przejazdy, kody błędów, odczyty i migawki. Z messpunkte=1 dodatkowo wszystkie punkty pomiarowe każdego przejazdu.

Parametry
NazwaMiejsceTypOpis
messpunktequerystring (1)
allequerystring (1)

Tylko administratorzy: dane wszystkich użytkowników

Odpowiedzi
200Plik JSON
401Niezalogowany
Przykładowa odpowiedź
{
  "benutzer": "max.mustermann",
  "format": "obdrest-fahrten-export",
  "version": 1,
  "fahrzeuge": [],
  "fahrten": [],
  "fehler": [],
  "auslesungen": [],
  "momentaufnahmen": []
}
curl
curl -s -o meine-daten.json 'https://app.fahrten.fusenigk.de/api/v1/export/daten.json?messpunkte=1' -H "Authorization: Bearer $TOKEN"

Administracja

Zarządzanie użytkownikami (tylko administratorzy)

GET/admin/benutzer🔒 wymagane logowanie

Wszyscy użytkownicy ze statystykami (tylko admin)

Odpowiedzi
200Lista
403Tylko dla administratorów
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/admin/benutzer -H "Authorization: Bearer $ADMIN_TOKEN"
POST/admin/benutzer🔒 wymagane logowanie

Utwórz użytkownika (SSO lub lokalnie)

Żądanie (application/json) – schemat BenutzerEingabe
{
  "username": "kasia",
  "name": "Katarzyna",
  "rolle": "user",
  "darfSenden": true,
  "darfLoeschen": false,
  "aktiv": true,
  "anmeldung": "sso"
}
Odpowiedzi
201utworzono
409już istnieje
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/admin/benutzer -H "Authorization: Bearer $ADMIN_TOKEN" \
  -H 'Content-Type: application/json' -d '{"username":"kasia","rolle":"user","anmeldung":"sso"}'
GET/admin/system🔒 Wymagane logowanie

Stan systemu (tylko administratorzy)

Wersja aplikacji i MariaDB, czas działania, pamięć operacyjna, wiersze i rozmiar każdej tabeli, pamięć dokumentów i zestaw danych demonstracyjnych.

Odpowiedzi
200OK
401Niezalogowany
403tylko dla administratorów
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/admin/system -H "Authorization: Bearer $TOKEN"
GET/admin/fahrzeuge🔒 Wymagane logowanie

Wszystkie pojazdy z adapterem i wskaźnikami (tylko administratorzy)

Pojazdy wszystkich użytkowników z protokołem, adapterem OBD, liczbą sterowników, przejazdami, km, aktywnymi błędami i nieznanymi kodami oraz przegląd według adaptera.

Odpowiedzi
200OK
401Niezalogowany
403tylko dla administratorów
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/admin/fahrzeuge -H "Authorization: Bearer $TOKEN"
GET/admin/aktivitaet🔒 Wymagane logowanie

Ostatnia aktywność (tylko administratorzy)

Ostatnio przesłane przejazdy, odczyty błędów, wartości pomiarowe, wydatki i nieznane kody, przejazdy dzisiaj/7 dni i ostatnia synchronizacja według użytkownika.

Parametry
NazwaMiejsceTypOpis
limitqueryinteger
Odpowiedzi
200OK
401Niezalogowany
403tylko dla administratorów
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/admin/aktivitaet -H "Authorization: Bearer $TOKEN"
GET/admin/unbekannt🔒 wymagane logowanie

Nieznane kody wszystkich użytkowników z odwołaniem do pojazdu (tylko administratorzy)

Parametry
NazwaMiejsceTypOpis
artquerystring (pid, dtc)
statusquerystring (neu, in-analyse, geklaert, ignoriert)
fahrzeugqueryinteger
suchequerystring

kod, VIN lub nazwa pojazdu

Odpowiedzi
200Lista (najpierw nowe) z próbkami surowych danych, pojazdem (VIN, model, sterowniki, przebieg) i użytkownikiem
401Niezalogowany
403tylko dla administratorów
curl
curl -s 'https://app.fahrten.fusenigk.de/api/v1/admin/unbekannt?status=neu' -H "Authorization: Bearer $TOKEN"
PUT/admin/unbekannt/{id}🔒 wymagane logowanie

Ustawienie statusu analizy i notatki (tylko administratorzy)

Parametry
NazwaMiejsceTypOpis
idpath · wymaganeinteger
Żądanie (application/json)
{
  "status": "geklaert",
  "notiz": "PID 8B = SCR-Dosierung, A = Bitmaske"
}
Odpowiedzi
200zmieniono
404nie znaleziono wpisu
403tylko dla administratorów
curl
curl -s -X PUT https://app.fahrten.fusenigk.de/api/v1/admin/unbekannt/1 -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -d '{"status":"in-analyse"}'
DELETE/admin/unbekannt/{id}🔒 wymagane logowanie

Usunięcie wpisu (tylko administratorzy)

Parametry
NazwaMiejsceTypOpis
idpath · wymaganeinteger
Odpowiedzi
200usunięto
404nie znaleziono wpisu
403tylko dla administratorów
curl
curl -s -X DELETE https://app.fahrten.fusenigk.de/api/v1/admin/unbekannt/1 -H "Authorization: Bearer $TOKEN"
GET/admin/benutzer/{id}🔒 wymagane logowanie

Odczytaj pojedynczego użytkownika

Parametry
NazwaMiejsceTypOpis
idpath · wymaganeinteger
Odpowiedzi
200Użytkownicy
404Nie znaleziono (lub niewidoczny)
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/admin/benutzer/2 -H "Authorization: Bearer $ADMIN_TOKEN"
PUT/admin/benutzer/{id}🔒 wymagane logowanie

Zmień rolę, uprawnienia, sposób logowania, hasło

Parametry
NazwaMiejsceTypOpis
idpath · wymaganeinteger
Żądanie (application/json) – schemat BenutzerEingabe
{
  "darfLoeschen": true,
  "aktiv": true
}
Odpowiedzi
200zmieniono
400Nieprawidłowe dane wejściowe
curl
curl -s -X PUT https://app.fahrten.fusenigk.de/api/v1/admin/benutzer/2 -H "Authorization: Bearer $ADMIN_TOKEN" \
  -H 'Content-Type: application/json' -d '{"darfLoeschen":true}'
DELETE/admin/benutzer/{id}🔒 wymagane logowanie

Usuń użytkownika wraz ze wszystkimi danymi

Parametry
NazwaMiejsceTypOpis
idpath · wymaganeinteger
Odpowiedzi
200usunięto
400Główny administrator lub własne konto nie mogą zostać usunięte
curl
curl -s -X DELETE https://app.fahrten.fusenigk.de/api/v1/admin/benutzer/7 -H "Authorization: Bearer $ADMIN_TOKEN"

System

Stan eksploatacyjny

GET/health🌐 publiczny

Sygnał życia wraz z bazą danych

Odpowiedzi
200ok
503Baza danych nieosiągalna
429Zbyt wiele żądań
Przykładowa odpowiedź
{
  "ok": true,
  "daten": {
    "status": "ok",
    "datenbank": "ok",
    "zeit": "2026-11-07T09:00:00.000Z"
  }
}
curl
curl -s https://app.fahrten.fusenigk.de/api/v1/health

🧱 Modele danych

Formaty przesyłania odpowiadają typom Codable aplikacji iOS – kto buduje własny serwer, musi przyjmować dokładnie te pola.

Trip

Przejazd w formacie Codable aplikacji iOS

Pole (* obowiązkowe)TypOpis
id *string · uuid
startDate *string · date-time
endDate *string · date-time
samplestablica TripSample
summaryobject | null

TripSummary aplikacji, m.in. distanceKm, maxSpeed, avgSpeed, fuelLiters, litersPer100km, co2Kg, idleSeconds, events[], eco{score}

startAddressstring | null
endAddressstring | null
kindFahrtArt

Przypisanie do ewidencji przejazdów; none = jeszcze nieprzypisane

notestring
detailsstring | null

Wielowierszowy, opcjonalny opis przejazdu

fuelTypestring (diesel, petrol)
vinstring | null
isDemoboolean
TripSample

Punkt pomiarowy (ok. 1 na sekundę)

Pole (* obowiązkowe)TypOpis
time *string · date-time
speednumber | null

km/h

rpmnumber | null
loadnumber | null

Obciążenie silnika %

coolantnumber | null

°C

voltagenumber | null

V

ambientnumber | null

Temperatura zewnętrzna °C

pedalnumber | null

Pedał przyspieszenia %

fuelRatenumber | null

l/h

latitudenumber | null
longitudenumber | null
altitudenumber | null

m n.p.m.

FahrzeugUpload
Pole (* obowiązkowe)TypOpis
vinstring | null
namestring | null
manufacturerstring | null
seriesstring | null
modelYearinteger | null
fuelTypestring | null
protocolstring | null
adapterstring | null
ecustablica obiektów
FehlerUpload
Pole (* obowiązkowe)TypOpis
id *string · uuid
vinstring | null
readAt *string · date-time
entriestablica obiektów
udsECUstablica stringów
historytablica obiektów
Momentaufnahme
Pole (* obowiązkowe)TypOpis
id *string · uuid
vinstring | null
takenAt *string · date-time
voltagenumber | null
protocolstring | null
readings *tablica obiektów
findingstablica obiektów
Fahrt

Przejazd w widoku listy aplikacji webowej

Pole (* obowiązkowe)TypOpis
idstring · uuid
benutzerstring
fahrzeugstring | null
startstring · date-time
endestring · date-time
dauerSekundeninteger
kmnumber
maxKmhnumber | null
schnittKmhnumber | null
literJe100number | null
ecointeger | null
startAdressestring | null
zielAdressestring | null
artFahrtArt

Przypisanie do ewidencji przejazdów; none = jeszcze nieprzypisane

notizstring | null
beschreibungstring | null

Wielowierszowy opis (Trip.details)

Benutzer
Pole (* obowiązkowe)TypOpis
idinteger
usernamestring
namestring | null
emailstring | null
rollestring (admin, user)
istAdminboolean
darfSendenboolean
darfLoeschenboolean
aktivboolean
anmeldungstring (sso, local)
darfApiboolean

REST-API dozwolone (logowanie aplikacji, Bearer, Basic); w przeciwnym razie tylko sesja przeglądarki

BenutzerEingabe
Pole (* obowiązkowe)TypOpis
usernamestring
namestring | null
emailstring | null
rollestring (admin, user)
darfSendenboolean
darfLoeschenboolean
aktivboolean
anmeldungstring (sso, local)
passwortstring | null

tylko przy anmeldung=local

notizstring | null
darfApiboolean
LoginAnfrage
Pole (* obowiązkowe)TypOpis
username *string
password *string · password
clientstring (app, web)

app = token Bearer 90 dni, web = cookie 12 h

Registrierung
Pole (* obowiązkowe)TypOpis
username *string
name *string
email *string · email
passwort *string
clientstring (app, web)