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
Krok 1🔑 Logowanie za pomocą curl
Każde wywołanie poza /health, /auth/login i /auth/registrieren wymaga zalogowania. Najpierw pobierz token, a następnie używaj go jako nagłówka Authorization: Bearer. Do korzystania z API potrzebne jest własne konto (zarejestruj się bezpłatnie). Konto demonstracyjne demo ze względów bezpieczeństwa jest dostępne tylko w przeglądarce – serwer odpowiada na wywołania API kodem 403.
Ustaw dane dostępowe (własne konto – konto demonstracyjne nie ma dostępu do API)
export BENUTZER='max.mustermann'
export PASSWORT='geheim-und-lang'
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"
Następnie każde wywołanie z tokenem Bearer
curl -s https://app.fahrten.fusenigk.de/api/v1/auth/me -H "Authorization: Bearer $TOKEN"
Alternatywa bez tokena – HTTP Basic
curl -s -u "$BENUTZER:$PASSWORT" https://app.fahrten.fusenigk.de/api/v1/auth/me
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"
}
}
Bez jq: skopiuj token z pola daten.token odpowiedzi. Nieudane próby: 401 (błędne dane), 403 (konto nieaktywne), 429 (zbyt wiele prób).
📘 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):
POST /auth/login z nazwą użytkownika i hasłem (konto SSO lub konto lokalne) → daten.token.- 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). - 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)
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.
| Status | Znaczenie |
|---|
| 200/201 | Sukces |
| 400 | Nieprawidłowe dane wejściowe (walidacja zod, details wskazuje pole) |
| 401 | Niezalogowany lub token wygasł → zaloguj się ponownie |
| 403 | Brak uprawnień (np. wysyłanie, usuwanie, administracja) |
| 404 | Nie znaleziono – również gdy rekord należy do innego użytkownika |
| 409/429 | Konflikt (nazwa zajęta) / zbyt wiele żądań |
| 500/503 | Błą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
| 200 | Zalogowany |
| 400 | Nieprawidłowe dane wejściowe |
| 401 | Nieprawidłowa nazwa użytkownika lub hasło (także przy nieznanym użytkowniku – brak enumeracji) |
| 403 | Hasło prawidłowe, ale konto nieodblokowane, zablokowane lub bez uprawnienia API (grund: api_disabled, np. konto demo) |
| 429 | Zbyt wiele nieudanych prób |
| 503 | Serwer 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
| 201 | Utworzono i zalogowano (odpowiedź jak przy logowaniu) |
| 400 | Nieprawidłowe dane wejściowe |
| 409 | Nazwa zastrzeżona lub zajęta |
| 429 | Zbyt 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
| 200 | Użytkownicy |
| 401 | Niezalogowany |
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
| 200 | Wylogowano |
| 429 | Zbyt 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
| 200 | Wynik dla każdego przejazdu |
| 400 | Nieprawidłowe dane wejściowe |
| 401 | Niezalogowany |
| 403 | Brak 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
| 200 | Pojazd utworzony/zaktualizowany |
| 403 | Brak 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
| 200 | zapisano |
| 401 | Niezalogowany |
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
| 200 | zapisano |
| 401 | Niezalogowany |
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
| 200 | Indeks |
| 401 | Niezalogowany |
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
| 200 | Status dla każdego wydatku (nowy/zaktualizowany/obcy) |
| 401 | Niezalogowany |
| 403 | brak 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
| 200 | Status dla każdego wpisu (nowy/zaktualizowany/obcy/brak-pojazdu) |
| 401 | Niezalogowany |
| 403 | brak 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
| 200 | ID pojazdu, liczba kodów, w tym nowe |
| 400 | nieprawidłowe dane wejściowe (np. surowe dane nie w formacie hex) |
| 401 | Niezalogowany |
| 403 | brak 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[]` |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
alle | query | string (1) | Tylko administratorzy: dane wszystkich użytkowników |
benutzer | query | integer | Tylko administratorzy: dane określonego użytkownika |
fahrzeug | query | integer | ID pojazdu |
von | query | string · date | Przykład: 2026-10-01 |
bis | query | string · date | Przykład: 2026-10-31 |
art | query | FahrtArt | |
suche | query | string | Pełny tekst w adresach i notatce |
limit | query | integer | |
offset | query | integer | |
Odpowiedzi
| 200 | Strona listy przejazdów |
| 401 | Niezalogowany |
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
| 200 | Liczba zmienionych przejazdów |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | string · uuid | |
format | query | string (app) | app zwraca format Codable aplikacji iOS (Trip)
|
alle | query | string (1) | Tylko administratorzy: dane wszystkich użytkowników |
Odpowiedzi
| 200 | Przejazd wraz z `punkte` (lub `samples` przy format=app) |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | string · uuid | |
Żądanie (application/json)
{
"kind": "geschaeftlich",
"note": "Kundentermin Adlershof",
"details": "Projektbesprechung mit Frau Muster.\nRückweg über Lager Schönefeld (Material abgeholt)."
}
Odpowiedzi
| 200 | zmieniono |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | string · uuid | |
Odpowiedzi
| 200 | usunięto |
| 403 | Brak uprawnień |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
alle | query | string (1) | Tylko administratorzy: dane wszystkich użytkowników |
Odpowiedzi
| 200 | Lista (`daten.fahrzeuge`) |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | integer | |
Odpowiedzi
| 200 | Pojazd |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | integer | |
Odpowiedzi
| 200 | Przebieg |
| 401 | Niezalogowany |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | integer | |
Żądanie (application/json) – schemat Kilometerstand
{
"km": 128450,
"datum": "2026-11-07T09:00:00Z",
"notiz": "Tacho abgelesen"
}
Odpowiedzi
| 200 | zaktualizowano |
| 201 | utworzono nowy |
| 400 | nieprawidłowe dane wejściowe |
| 401 | Niezalogowany |
| 403 | brak uprawnień (np. dostęp demo) |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | string · uuid | |
Odpowiedzi
| 200 | usunięto |
| 401 | Niezalogowany |
| 403 | brak uprawnień |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
aktiv | query | string (1) | tylko aktywne kody |
fahrzeug | query | integer | |
alle | query | string (1) | Tylko administratorzy: dane wszystkich użytkowników |
Odpowiedzi
| 200 | Lista (`daten.fehler`) |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | integer | |
Odpowiedzi
| 200 | Błędy |
| 404 | Nie 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
| 200 | Lista (`daten.auslesungen`) |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
kategoria | query | string (tanken, parken, reparatur, sonstiges) | |
von | query | string · date | |
bis | query | string · date | |
fahrzeug | query | integer | |
limit | query | integer | |
alle | query | string (1) | Tylko administratorzy: dane wszystkich użytkowników |
Odpowiedzi
| 200 | `daten.ausgaben[]` (w tym liczba dokumentów), `daten.summen`, `daten.gesamt` |
| 401 | Niezalogowany |
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
| 201 | utworzono (szczegóły z `belegListe`) |
| 400 | Nieprawidłowe dane wejściowe |
| 401 | Niezalogowany |
| 403 | brak 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | string · uuid | |
Odpowiedzi
| 200 | Wydatek |
| 401 | Niezalogowany |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | string · 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
| 200 | zmieniono |
| 401 | Niezalogowany |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | string · uuid | |
Odpowiedzi
| 200 | usunięto |
| 401 | Niezalogowany |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
von | query | string · date | |
bis | query | string · date | |
fahrzeug | query | integer | |
alle | query | string (1) | Tylko administratorzy: dane wszystkich użytkowników |
Odpowiedzi
| 200 | Statystyka |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | string · uuid | |
Odpowiedzi
| 200 | `daten.belege[]` (plik) |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | string · uuid | |
Żądanie (application/json)
Odpowiedzi
| 201 | `daten.belege[]` zapisane, `daten.fehler[]` odrzucone pliki |
| 400 | brak prawidłowego pliku |
| 401 | Niezalogowany |
| 403 | brak uprawnień |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | string · uuid | |
download | query | string (1) | |
Odpowiedzi
| 200 | Plik |
| 401 | Niezalogowany |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | string · uuid | |
Odpowiedzi
| 200 | usunięto |
| 401 | Niezalogowany |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | integer | |
Odpowiedzi
| 200 | `daten.dateien[]` |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | integer | |
Żądanie (application/json)
Odpowiedzi
| 201 | `daten.dateien[]`, `daten.fehler[]` |
| 401 | Niezalogowany |
| 403 | brak uprawnień |
| 404 | Nie 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
| 200 | Lista (`daten.momentaufnahmen`) |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | string · uuid | |
Odpowiedzi
| 200 | Migawka |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
pid | query | string | OBD-PID szesnastkowo, np. 42 = napięcie sterownika, 05 = płyn chłodzący |
Odpowiedzi
| 200 | Przebieg |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
von | query | string · date | |
bis | query | string · date | |
fahrzeug | query | integer | |
alle | query | string (1) | Tylko administratorzy: dane wszystkich użytkowników |
Odpowiedzi
| 200 | Statystyka |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
von | query | string · date | |
bis | query | string · date | |
art | query | string (privat, geschaeftlich, arbeitsweg, none) | |
fahrzeug | query | integer | |
alle | query | string (1) | Tylko administratorzy: dane wszystkich użytkowników |
Odpowiedzi
| 200 | `punkte[[lat, lon, gewicht]]`, `grenzen`, `haeufigsteOrte[]` |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
jahr | query | integer | |
art | query | string (privat, geschaeftlich, arbeitsweg, none) | |
fahrzeug | query | integer | |
alle | query | string (1) | Tylko administratorzy: dane wszystkich użytkowników |
Odpowiedzi
| 200 | `tage[]`, `aktiveTage`, `laengsteSerie`, `meisteFahrten` |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | string · uuid | |
Odpowiedzi
| 200 | Plik GPX |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
von | query | string · date | |
bis | query | string · date | |
art | query | FahrtArt | |
fahrzeug | query | integer | |
alle | query | string (1) | Tylko administratorzy: dane wszystkich użytkowników |
Odpowiedzi
| 200 | Plik CSV |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
von | query | string · date | |
bis | query | string · date | |
art | query | FahrtArt | |
fahrzeug | query | integer | |
suche | query | string | |
alle | query | string (1) | Tylko administratorzy: dane wszystkich użytkowników |
Odpowiedzi
| 200 | Plik PDF |
| 401 | Niezalogowany |
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
| Nazwa | Miejsce | Typ | Opis |
|---|
messpunkte | query | string (1) | |
alle | query | string (1) | Tylko administratorzy: dane wszystkich użytkowników |
Odpowiedzi
| 200 | Plik JSON |
| 401 | Niezalogowany |
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
| 200 | Lista |
| 403 | Tylko 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
| 201 | utworzono |
| 409 | już 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
| 200 | OK |
| 401 | Niezalogowany |
| 403 | tylko 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
| 200 | OK |
| 401 | Niezalogowany |
| 403 | tylko 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
| Nazwa | Miejsce | Typ | Opis |
|---|
limit | query | integer | |
Odpowiedzi
| 200 | OK |
| 401 | Niezalogowany |
| 403 | tylko 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
| Nazwa | Miejsce | Typ | Opis |
|---|
art | query | string (pid, dtc) | |
status | query | string (neu, in-analyse, geklaert, ignoriert) | |
fahrzeug | query | integer | |
suche | query | string | kod, VIN lub nazwa pojazdu |
Odpowiedzi
| 200 | Lista (najpierw nowe) z próbkami surowych danych, pojazdem (VIN, model, sterowniki, przebieg) i użytkownikiem |
| 401 | Niezalogowany |
| 403 | tylko 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | integer | |
Żądanie (application/json)
{
"status": "geklaert",
"notiz": "PID 8B = SCR-Dosierung, A = Bitmaske"
}
Odpowiedzi
| 200 | zmieniono |
| 404 | nie znaleziono wpisu |
| 403 | tylko 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | integer | |
Odpowiedzi
| 200 | usunięto |
| 404 | nie znaleziono wpisu |
| 403 | tylko 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | integer | |
Odpowiedzi
| 200 | Użytkownicy |
| 404 | Nie 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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | integer | |
Żądanie (application/json) – schemat BenutzerEingabe
{
"darfLoeschen": true,
"aktiv": true
}
Odpowiedzi
| 200 | zmieniono |
| 400 | Nieprawidł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
| Nazwa | Miejsce | Typ | Opis |
|---|
id | path · wymagane | integer | |
Odpowiedzi
| 200 | usunięto |
| 400 | Głó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
| 200 | ok |
| 503 | Baza danych nieosiągalna |
| 429 | Zbyt 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) | Typ | Opis |
|---|
id * | string · uuid | |
startDate * | string · date-time | |
endDate * | string · date-time | |
samples | tablica TripSample | |
summary | object | null | TripSummary aplikacji, m.in. distanceKm, maxSpeed, avgSpeed, fuelLiters, litersPer100km, co2Kg, idleSeconds, events[], eco{score} |
startAddress | string | null | |
endAddress | string | null | |
kind | FahrtArt | Przypisanie do ewidencji przejazdów; none = jeszcze nieprzypisane |
note | string | |
details | string | null | Wielowierszowy, opcjonalny opis przejazdu |
fuelType | string (diesel, petrol) | |
vin | string | null | |
isDemo | boolean | |
TripSample
Punkt pomiarowy (ok. 1 na sekundę)
| Pole (* obowiązkowe) | Typ | Opis |
|---|
time * | string · date-time | |
speed | number | null | km/h |
rpm | number | null | |
load | number | null | Obciążenie silnika % |
coolant | number | null | °C |
voltage | number | null | V |
ambient | number | null | Temperatura zewnętrzna °C |
pedal | number | null | Pedał przyspieszenia % |
fuelRate | number | null | l/h |
latitude | number | null | |
longitude | number | null | |
altitude | number | null | m n.p.m. |
FahrzeugUpload
| Pole (* obowiązkowe) | Typ | Opis |
|---|
vin | string | null | |
name | string | null | |
manufacturer | string | null | |
series | string | null | |
modelYear | integer | null | |
fuelType | string | null | |
protocol | string | null | |
adapter | string | null | |
ecus | tablica obiektów | |
FehlerUpload
| Pole (* obowiązkowe) | Typ | Opis |
|---|
id * | string · uuid | |
vin | string | null | |
readAt * | string · date-time | |
entries | tablica obiektów | |
udsECUs | tablica stringów | |
history | tablica obiektów | |
Momentaufnahme
| Pole (* obowiązkowe) | Typ | Opis |
|---|
id * | string · uuid | |
vin | string | null | |
takenAt * | string · date-time | |
voltage | number | null | |
protocol | string | null | |
readings * | tablica obiektów | |
findings | tablica obiektów | |
Fahrt
Przejazd w widoku listy aplikacji webowej
| Pole (* obowiązkowe) | Typ | Opis |
|---|
id | string · uuid | |
benutzer | string | |
fahrzeug | string | null | |
start | string · date-time | |
ende | string · date-time | |
dauerSekunden | integer | |
km | number | |
maxKmh | number | null | |
schnittKmh | number | null | |
literJe100 | number | null | |
eco | integer | null | |
startAdresse | string | null | |
zielAdresse | string | null | |
art | FahrtArt | Przypisanie do ewidencji przejazdów; none = jeszcze nieprzypisane |
notiz | string | null | |
beschreibung | string | null | Wielowierszowy opis (Trip.details) |
Benutzer
| Pole (* obowiązkowe) | Typ | Opis |
|---|
id | integer | |
username | string | |
name | string | null | |
email | string | null | |
rolle | string (admin, user) | |
istAdmin | boolean | |
darfSenden | boolean | |
darfLoeschen | boolean | |
aktiv | boolean | |
anmeldung | string (sso, local) | |
darfApi | boolean | REST-API dozwolone (logowanie aplikacji, Bearer, Basic); w przeciwnym razie tylko sesja przeglądarki |
BenutzerEingabe
| Pole (* obowiązkowe) | Typ | Opis |
|---|
username | string | |
name | string | null | |
email | string | null | |
rolle | string (admin, user) | |
darfSenden | boolean | |
darfLoeschen | boolean | |
aktiv | boolean | |
anmeldung | string (sso, local) | |
passwort | string | null | tylko przy anmeldung=local |
notiz | string | null | |
darfApi | boolean | |
LoginAnfrage
| Pole (* obowiązkowe) | Typ | Opis |
|---|
username * | string | |
password * | string · password | |
client | string (app, web) | app = token Bearer 90 dni, web = cookie 12 h
|
Registrierung
| Pole (* obowiązkowe) | Typ | Opis |
|---|
username * | string | |
name * | string | |
email * | string · email | |
passwort * | string | |
client | string (app, web) | |