Entwickler

REST-API für Ihre eigenen Systeme

Version 1.2.0 · Spezifikation (OpenAPI 3.1, JSON) · In allen Paketen inklusive

Lesender Zugriff auf Fahrzeuge, Fahrer, Aufträge, Aufgaben, Dokumente, Bußgelder, Kostenstellen und Rechnungen Ihrer Firma — per OAuth2, in allen Paketen inklusive.

Überblick

Die REST-API v1 von fleetfeat gibt Ihren eigenen Systemen — ERP, HR, Buchhaltung — lesenden Zugriff auf die Daten Ihrer Firma. Sie legen in fleetfeat einen Zugang an, wählen, welche Daten er lesen darf, und holen sich damit per OAuth2 ein Zugriffstoken. Die API ist in allen Paketen inklusive.

  • Nur lesend: Außer dem Token-Endpunkt ist jeder Endpunkt ein GET; über die API ändern Sie keine Daten in fleetfeat.
  • Ein Zugang gehört genau einer Firma und sieht nur deren Daten — immer die ganze Firma.
  • JSON, Feldnamen in snake_case, alle Zeitangaben in UTC nach ISO 8601, Beträge in Cent.
  • Listen mit Cursor-Paginierung und Filtern nach Zeitraum, Kennzeichen oder FIN.
  • Höchstens 300 Aufrufe pro Minute je Zugang.

Schnellstart

Drei Schritte bis zur ersten Antwort. Die Beispiele nutzen curl; jede andere HTTP-Bibliothek funktioniert genauso.

1. Zugang anlegen

Melden Sie sich in fleetfeat an und öffnen Sie Einstellungen → API-Zugang. Den Bereich sieht nur, wer Zugriff auf die ganze Firma und das Recht „Berichte erstellen & exportieren“ hat — in der Regel der Super Admin.

Geben Sie dem Zugang eine Bezeichnung (z. B. „SAP Produktiv“) und wählen Sie unter „Freigegebene Daten“ nur die Scopes, die Ihre Anbindung braucht.

Nach dem Anlegen zeigt fleetfeat die Client-ID und das Client-Secret. Das Secret erscheint genau einmal; wir speichern es nur als Prüfsumme. Geht es verloren, erneuern Sie es an derselben Stelle („Secret erneuern“). „Entziehen“ sperrt den Zugang samt aller Tokens sofort.

2. Token holen

Ihr System tauscht Client-ID und Secret gegen ein Zugriffstoken (OAuth2 Client Credentials). Das Token gilt 60 Minuten; danach holen Sie einfach ein neues.

Token holen mit curl
curl -s -X POST https://fleetfeat.de/api/v1/oauth/token \
  -u "$CLIENT_ID:$CLIENT_SECRET" \
  -d grant_type=client_credentials

Antwort:

Antwort des Token-Endpunkts
{
  "access_token": "ffat_…",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "vehicles:read service-orders:read"
}

3. Erste Abfrage

Mit dem Token im Header Authorization: Bearer … fragen Sie die Fahrzeuge Ihrer Firma ab:

Fahrzeuge abfragen mit curl
curl -s "https://fleetfeat.de/api/v1/vehicles?limit=50" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Antwort (gekürzt):

Antwort der Fahrzeugliste
{
  "data": [
    {
      "id": "…",
      "fin": "…",
      "license_plate": "…",
      "make": "…",
      "model": "…",
      "mileage_km": …,
      "updated_at": "…"
    }
  ],
  "next_cursor": "…"
}

Steht in der Antwort ein next_cursor, holen Sie die nächste Seite mit ?cursor=<Wert>. Auf der letzten Seite ist next_cursor null.

Scopes und Rechte

Ein Scope ist eine Datenart, die ein Zugang lesen darf. Beim Anlegen wählen Sie die Scopes; beim Token-Abruf kann Ihr System mit scope eine Teilmenge anfordern. Ohne Scope antwortet ein Endpunkt mit 403 insufficient_scope.

Scopes der REST-API v1
ScopeWas der Zugang liestZusätzliches Recht beim Anlegen
vehicles:readFahrzeuge lesen
FIN, Kennzeichen, Stammdaten, Kilometerstand, Erstzulassung, Eigentum und Leasingende, Ausflottung; der aktuelle Fahrer nur zusammen mit drivers:read.
—
drivers:readFahrer und Zuweisungsverlauf lesen (personenbezogene Daten)
Fahrerzuweisungen: Name, Profil-ID, Art und Zeitraum der Zuweisung, Fahrzeug. Personenbezogene Daten.
—
service-orders:readService-Aufträge lesen
Status, Leistung, Termin und Fahrzeug je Service-Auftrag.
—
tasks:readFuhrpark-Aufgaben lesen
Titel, Beschreibung, Fälligkeit, Priorität, Status, Fahrzeug und zuständige Person; der Fahrer nur zusammen mit drivers:read.
„Fristen & Führerscheinkontrolle verwalten“
documents:readMetadaten der Fahrzeugdokumente lesen und Download-Links ausstellen
Unterlagen der Fahrzeugakte: Kategorie, Titel, Belegdatum, Betrag, SHA-256, Größe, Dateityp; die Datei nur über einen signierten Link.
—
fines:readBußgelder lesen (Fahrerzuordnung nur mit drivers:read)
Aktenzeichen, Tatzeit, Tatvorwurf, Ort, Behörde, Betrag, Fristen, Status; die Fahrerzuordnung nur zusammen mit drivers:read. Keine Führerscheindaten.
—
cost-centers:readStammdaten der Kostenstellen lesen
Nummer, Name, übergeordnete Kostenstelle, Gesellschaft, verantwortliche Person, Gültigkeit.
„Kosten & TCO sehen“
invoices:readRechnungen von fleetfeat lesen und Download-Links ausstellen
Alle Belege von fleetfeat an Ihre Firma (Service, Abo, Storno, Korrektur): Nummer, Status, Beträge, Daten; PDF und E-Rechnung nur über signierte Links.
„Rechnungen & Belege sehen“

Ein Zugang gibt nie mehr heraus, als sein Anleger in der Oberfläche sieht. Deshalb verlangen einige Scopes beim Anlegen zusätzlich den passenden Rechteschalter aus der Teamverwaltung:

  • tasks:read → „Fristen & Führerscheinkontrolle verwalten“
  • cost-centers:read → „Kosten & TCO sehen“
  • invoices:read → „Rechnungen & Belege sehen“

Ohne diesen Schalter lässt fleetfeat den Scope beim Anlegen nicht zu.

Limits und Paginierung

  • Rate-Limit: 300 Aufrufe pro Minute je Zugang. Jede Antwort der Daten-Endpunkte auf einen gültigen Token trägt X-RateLimit-Limit und X-RateLimit-Remaining; beim Überschreiten kommt 429 mit Retry-After (Sekunden).
  • Auch abgelehnte Aufrufe (403, 400) zählen gegen das Limit.
  • Seitengröße: limit von 1 bis 200, ohne Angabe 50 Einträge.
  • Download-Links für Dokumente, Rechnungs-PDFs und E-Rechnungen sind 5 Minuten gültig und werden ohne Bearer-Token abgerufen.
  • Unbekannte Parameter lehnt die API mit 400 ab, statt sie still zu übergehen.

Fehlerformat

Jeder Fehler der Daten-Endpunkte hat dasselbe Format: ein Objekt error mit maschinenlesbarem code, einer englischen message und — bei Parameterfehlern — dem Feld field.

Beispiel einer Fehlerantwort
{
  "error": {
    "code": "insufficient_scope",
    "message": "This endpoint requires the scope \"drivers:read\"."
  }
}
Fehlercodes der Daten-Endpunkte
CodeHTTPBedeutung
invalid_token401Token fehlt, ist abgelaufen oder wurde mit dem Zugang entzogen. Neues Token holen.
insufficient_scope403Dem Token fehlt der Scope dieses Endpunkts.
module_not_available403Die Daten gehören zu einem Softwaremodul, das Ihre Firma nicht gebucht oder in den Einstellungen ausgeblendet hat.
invalid_parameter400Unbekannter oder ungültiger Parameter; field nennt ihn.
not_found404Unbekannte ID — oder eine ID, die nicht zu Ihrer Firma gehört.
file_unavailable404Zu diesem Datensatz ist keine Datei abgelegt.
rate_limited429Rate-Limit überschritten; nach Retry-After Sekunden erneut versuchen.
internal_error500Unerwarteter Fehler auf unserer Seite, ohne Details. Später erneut versuchen.

Der Token-Endpunkt antwortet nach OAuth2-Standard (RFC 6749 §5.2) mit error und error_description, z. B. invalid_client bei falscher Client-ID oder falschem Secret.

Datenschutz

Über einen Zugang gelangen Daten Ihrer Firma in ein anderes System, je nach Scope auch personenbezogene Daten Ihrer Beschäftigten. Für dieses System und seinen Betreiber sind Sie verantwortlich: Es gehört in Ihr Verzeichnis der Verarbeitungstätigkeiten, und mit seinem Betreiber braucht es einen Auftragsverarbeitungsvertrag (AVV).

Fahrerdaten — Fahrerzuweisungen, der aktuelle Fahrer am Fahrzeug, Fahrer an Aufgaben, die Fahrerzuordnung bei Bußgeldern — gibt die API nur mit dem Scope drivers:read heraus.

Nie über die API: Führerscheindaten, Anhörungen zum Bußgeld, Notizen, Mailadressen.

Jeder authentifizierte Aufruf wird mit Zugang, Endpunkt (ohne Suchparameter), Status und Zeit protokolliert und nach 12 Monaten automatisch gelöscht.

Stabilitätszusage und Changelog

Unsere Zusage für Ihre Anbindung:

/v1 bleibt rückwärtskompatibel; neue Felder kommen ohne Vorwarnung, Entfernen/Umbenennen nur mit neuer Hauptversion und mindestens 6 Monaten Ankündigung.

Changelog

  • Ergänzung ohne neue Version · — 403 driver_data_not_available an Fahrer-Endpunkten (/drivers, /fines), wenn die Person, die den Zugang angelegt hat, keine Fahrerdaten sehen darf oder nicht mehr zur Firma gehört; Fahrerfelder an den übrigen Endpunkten fehlen dann.
  • Ergänzung ohne neue Version · — 403 module_not_available auch dann, wenn die Firma das Modul in ihren Einstellungen ausgeblendet hat (Bußgelder, Kostenstellen).
  • Ergänzung ohne neue Version · — Neuer Aufgabenstatus erledigt_ausstehend (gemeldet, Freigabe durch die Fuhrparkleitung steht aus).
  • Ergänzung ohne neue Version · — Neue Fahrzeugfelder max_speed_kmh und work_machine_kind.
  • Ergänzung ohne neue Version · — Neue Fahrzeugfelder für Nutzfahrzeuge (z. B. gross_weight_kg, axle_count) und E-Fahrzeuge (z. B. battery_capacity_kwh, wltp_range_km).
  • 1.2.0 · — Belegarten: /api/v1/invoices liefert neben Service-Rechnungen auch Abo-Rechnungen, Storno- und Korrekturbelege, mit kind und dem Verweis corrects_invoice_id.
  • 1.1.0 · — Aufgaben, Dokumente der Fahrzeugakte (mit Download-Link), Bußgelder, Kostenstellen und Rechnungen (mit PDF und E-Rechnung), jeweils mit eigenem Scope.
  • 1.0.0 · — Erste Fassung: Token-Endpunkt (OAuth2 Client Credentials), Fahrzeuge, Fahrerzuweisungen und Service-Aufträge.

Endpunkte

Alle Endpunkte der Version, erzeugt aus derselben Spezifikation, die der Server unter /api/v1/openapi.json ausliefert.

Zugriffstoken ausstellen (Client Credentials)

POST /api/v1/oauth/token

RFC 6749 §4.4. Anmeldung per HTTP Basic (client_id:client_secret) oder mit client_id/client_secret im Rumpf. Fehler kommen im Format nach RFC 6749 §5.2 { error, error_description } (zusätzlich code/message).

Kein Token nötig — Anmeldung mit Client-ID und Secret

Anfrage-Rumpf: application/x-www-form-urlencoded → TokenRequest · application/json → TokenRequest

Antworten: Zugriffstoken ausstellen (Client Credentials)
StatusBeschreibung
200Zugriffstoken
Schema: TokenResponse
400invalid_request, unsupported_grant_type oder invalid_scope
401invalid_client
429Zu viele Token-Anfragen (30 pro Minute je Zugang)

Fahrzeuge auflisten

GET /api/v1/vehicles

Fahrzeuge der Firma, auch ausgeflottete (archived_at). from/to filtern auf updated_at. current_driver ist nur mit dem Scope drivers:read enthalten.

Scope: vehicles:read

Parameter: Fahrzeuge auflisten
NameOrtTypBeschreibung
limitQueryinteger · 1–200 · Standard 50
cursorQuerystringCursor aus next_cursor, unverändert weitergeben
license_plateQuerystringExakter Treffer; Leerzeichen und Bindestriche werden ignoriert, Groß-/Kleinschreibung egal
finQuerystring · max. 17Exakte FIN, Groß-/Kleinschreibung egal
fromQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
toQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
Antworten: Fahrzeuge auflisten
StatusBeschreibung
200Eine Seite mit Ergebnissen
data: array<Vehicle>
next_cursor: string · kann null sein — Als cursor mitgeben, um die nächste Seite zu holen; auf der letzten Seite null.
Header: X-RateLimit-Limit, X-RateLimit-Remaining
400Ungültiger Parameter
Schema: Error
401Token fehlt, ist abgelaufen oder entzogen
Schema: Error
403Dem Token fehlt der nötige Scope (insufficient_scope), oder die Daten gehören zu den Softwaremodulen und die Firma hat sie nicht gebucht oder das Modul in ihren Einstellungen ausgeblendet (module_not_available), oder der Endpunkt liefert personenbezogene Fahrerdaten und die Person, die den Zugang angelegt hat, darf keine Fahrerdaten sehen oder gehört nicht mehr zur Firma (driver_data_not_available)
Schema: Error
429Rate-Limit überschritten (300 Aufrufe pro Minute je Zugang)
Schema: Error
Header: Retry-After (Sekunden, bis das Zeitfenster neu beginnt)

Fahrerzuweisungen auflisten (Verlauf)

GET /api/v1/drivers

Zeiträume der Fahrerzuweisung je Fahrzeug, halboffen [valid_from, valid_to). valid_to = null ist die aktuelle Zuweisung. from/to liefern Zeiträume, die den Bereich überschneiden.

Scope: drivers:read

Parameter: Fahrerzuweisungen auflisten (Verlauf)
NameOrtTypBeschreibung
limitQueryinteger · 1–200 · Standard 50
cursorQuerystringCursor aus next_cursor, unverändert weitergeben
license_plateQuerystringExakter Treffer; Leerzeichen und Bindestriche werden ignoriert, Groß-/Kleinschreibung egal
finQuerystring · max. 17Exakte FIN, Groß-/Kleinschreibung egal
fromQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
toQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
Antworten: Fahrerzuweisungen auflisten (Verlauf)
StatusBeschreibung
200Eine Seite mit Ergebnissen
data: array<DriverAssignment>
next_cursor: string · kann null sein — Als cursor mitgeben, um die nächste Seite zu holen; auf der letzten Seite null.
Header: X-RateLimit-Limit, X-RateLimit-Remaining
400Ungültiger Parameter
Schema: Error
401Token fehlt, ist abgelaufen oder entzogen
Schema: Error
403Dem Token fehlt der nötige Scope (insufficient_scope), oder die Daten gehören zu den Softwaremodulen und die Firma hat sie nicht gebucht oder das Modul in ihren Einstellungen ausgeblendet (module_not_available), oder der Endpunkt liefert personenbezogene Fahrerdaten und die Person, die den Zugang angelegt hat, darf keine Fahrerdaten sehen oder gehört nicht mehr zur Firma (driver_data_not_available)
Schema: Error
429Rate-Limit überschritten (300 Aufrufe pro Minute je Zugang)
Schema: Error
Header: Retry-After (Sekunden, bis das Zeitfenster neu beginnt)

Service-Aufträge auflisten

GET /api/v1/service-orders

Service-Aufträge (Buchungen) der Firma. from/to filtern auf den geplanten Beginn, ohne Termin auf den Zeitpunkt der Anlage.

Scope: service-orders:read

Parameter: Service-Aufträge auflisten
NameOrtTypBeschreibung
limitQueryinteger · 1–200 · Standard 50
cursorQuerystringCursor aus next_cursor, unverändert weitergeben
license_plateQuerystringExakter Treffer; Leerzeichen und Bindestriche werden ignoriert, Groß-/Kleinschreibung egal
finQuerystring · max. 17Exakte FIN, Groß-/Kleinschreibung egal
fromQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
toQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
Antworten: Service-Aufträge auflisten
StatusBeschreibung
200Eine Seite mit Ergebnissen
data: array<ServiceOrder>
next_cursor: string · kann null sein — Als cursor mitgeben, um die nächste Seite zu holen; auf der letzten Seite null.
Header: X-RateLimit-Limit, X-RateLimit-Remaining
400Ungültiger Parameter
Schema: Error
401Token fehlt, ist abgelaufen oder entzogen
Schema: Error
403Dem Token fehlt der nötige Scope (insufficient_scope), oder die Daten gehören zu den Softwaremodulen und die Firma hat sie nicht gebucht oder das Modul in ihren Einstellungen ausgeblendet (module_not_available), oder der Endpunkt liefert personenbezogene Fahrerdaten und die Person, die den Zugang angelegt hat, darf keine Fahrerdaten sehen oder gehört nicht mehr zur Firma (driver_data_not_available)
Schema: Error
429Rate-Limit überschritten (300 Aufrufe pro Minute je Zugang)
Schema: Error
Header: Retry-After (Sekunden, bis das Zeitfenster neu beginnt)

Aufgaben auflisten

GET /api/v1/tasks

Fuhrpark-Aufgaben der Firma in jedem Status. from/to filtern auf das Fälligkeitsdatum (Kalendertag). driver ist nur mit dem Scope drivers:read enthalten. 403 module_not_available ohne die Softwaremodule.

Scope: tasks:read

Parameter: Aufgaben auflisten
NameOrtTypBeschreibung
limitQueryinteger · 1–200 · Standard 50
cursorQuerystringCursor aus next_cursor, unverändert weitergeben
license_plateQuerystringExakter Treffer; Leerzeichen und Bindestriche werden ignoriert, Groß-/Kleinschreibung egal
finQuerystring · max. 17Exakte FIN, Groß-/Kleinschreibung egal
fromQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
toQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
Antworten: Aufgaben auflisten
StatusBeschreibung
200Eine Seite mit Ergebnissen
data: array<Task>
next_cursor: string · kann null sein — Als cursor mitgeben, um die nächste Seite zu holen; auf der letzten Seite null.
Header: X-RateLimit-Limit, X-RateLimit-Remaining
400Ungültiger Parameter
Schema: Error
401Token fehlt, ist abgelaufen oder entzogen
Schema: Error
403Dem Token fehlt der nötige Scope (insufficient_scope), oder die Daten gehören zu den Softwaremodulen und die Firma hat sie nicht gebucht oder das Modul in ihren Einstellungen ausgeblendet (module_not_available), oder der Endpunkt liefert personenbezogene Fahrerdaten und die Person, die den Zugang angelegt hat, darf keine Fahrerdaten sehen oder gehört nicht mehr zur Firma (driver_data_not_available)
Schema: Error
429Rate-Limit überschritten (300 Aufrufe pro Minute je Zugang)
Schema: Error
Header: Retry-After (Sekunden, bis das Zeitfenster neu beginnt)

Dokumente der Fahrzeugakte auflisten (Metadaten)

GET /api/v1/documents

Unterlagen der Fahrzeugakten: Metadaten und SHA-256-Prüfsumme (null bei Dateien, die vor dem 08.09.2026 abgelegt wurden). Kein Dateiinhalt und kein Link — dafür download_path verwenden. from/to filtern auf den Zeitpunkt des Hochladens. 403 module_not_available ohne die Softwaremodule.

Scope: documents:read

Parameter: Dokumente der Fahrzeugakte auflisten (Metadaten)
NameOrtTypBeschreibung
limitQueryinteger · 1–200 · Standard 50
cursorQuerystringCursor aus next_cursor, unverändert weitergeben
license_plateQuerystringExakter Treffer; Leerzeichen und Bindestriche werden ignoriert, Groß-/Kleinschreibung egal
finQuerystring · max. 17Exakte FIN, Groß-/Kleinschreibung egal
fromQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
toQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
Antworten: Dokumente der Fahrzeugakte auflisten (Metadaten)
StatusBeschreibung
200Eine Seite mit Ergebnissen
data: array<Document>
next_cursor: string · kann null sein — Als cursor mitgeben, um die nächste Seite zu holen; auf der letzten Seite null.
Header: X-RateLimit-Limit, X-RateLimit-Remaining
400Ungültiger Parameter
Schema: Error
401Token fehlt, ist abgelaufen oder entzogen
Schema: Error
403Dem Token fehlt der nötige Scope (insufficient_scope), oder die Daten gehören zu den Softwaremodulen und die Firma hat sie nicht gebucht oder das Modul in ihren Einstellungen ausgeblendet (module_not_available), oder der Endpunkt liefert personenbezogene Fahrerdaten und die Person, die den Zugang angelegt hat, darf keine Fahrerdaten sehen oder gehört nicht mehr zur Firma (driver_data_not_available)
Schema: Error
429Rate-Limit überschritten (300 Aufrufe pro Minute je Zugang)
Schema: Error
Header: Retry-After (Sekunden, bis das Zeitfenster neu beginnt)

Bußgelder auflisten

GET /api/v1/fines

Bußgeldvorgänge der Firma. from/to filtern auf die Tatzeit. driver_assignment ist nur mit dem Scope drivers:read enthalten; confirmed: false ist ein Vorschlag des Systems, keine bestätigte Zuordnung. Keine Führerscheindaten. 403 module_not_available ohne die Softwaremodule oder wenn die Firma das Modul Bußgelder ausgeblendet hat.

Scope: fines:read

Parameter: Bußgelder auflisten
NameOrtTypBeschreibung
limitQueryinteger · 1–200 · Standard 50
cursorQuerystringCursor aus next_cursor, unverändert weitergeben
license_plateQuerystringExakter Treffer; Leerzeichen und Bindestriche werden ignoriert, Groß-/Kleinschreibung egal
finQuerystring · max. 17Exakte FIN, Groß-/Kleinschreibung egal
fromQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
toQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
Antworten: Bußgelder auflisten
StatusBeschreibung
200Eine Seite mit Ergebnissen
data: array<Fine>
next_cursor: string · kann null sein — Als cursor mitgeben, um die nächste Seite zu holen; auf der letzten Seite null.
Header: X-RateLimit-Limit, X-RateLimit-Remaining
400Ungültiger Parameter
Schema: Error
401Token fehlt, ist abgelaufen oder entzogen
Schema: Error
403Dem Token fehlt der nötige Scope (insufficient_scope), oder die Daten gehören zu den Softwaremodulen und die Firma hat sie nicht gebucht oder das Modul in ihren Einstellungen ausgeblendet (module_not_available), oder der Endpunkt liefert personenbezogene Fahrerdaten und die Person, die den Zugang angelegt hat, darf keine Fahrerdaten sehen oder gehört nicht mehr zur Firma (driver_data_not_available)
Schema: Error
429Rate-Limit überschritten (300 Aufrufe pro Minute je Zugang)
Schema: Error
Header: Retry-After (Sekunden, bis das Zeitfenster neu beginnt)

Kostenstellen auflisten

GET /api/v1/cost-centers

Stammdaten der Kostenstellen. from/to filtern auf updated_at. 403 module_not_available ohne die Softwaremodule oder wenn die Firma das Modul Kostenstellen ausgeblendet hat.

Scope: cost-centers:read

Parameter: Kostenstellen auflisten
NameOrtTypBeschreibung
limitQueryinteger · 1–200 · Standard 50
cursorQuerystringCursor aus next_cursor, unverändert weitergeben
fromQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
toQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
Antworten: Kostenstellen auflisten
StatusBeschreibung
200Eine Seite mit Ergebnissen
data: array<CostCenter>
next_cursor: string · kann null sein — Als cursor mitgeben, um die nächste Seite zu holen; auf der letzten Seite null.
Header: X-RateLimit-Limit, X-RateLimit-Remaining
400Ungültiger Parameter
Schema: Error
401Token fehlt, ist abgelaufen oder entzogen
Schema: Error
403Dem Token fehlt der nötige Scope (insufficient_scope), oder die Daten gehören zu den Softwaremodulen und die Firma hat sie nicht gebucht oder das Modul in ihren Einstellungen ausgeblendet (module_not_available), oder der Endpunkt liefert personenbezogene Fahrerdaten und die Person, die den Zugang angelegt hat, darf keine Fahrerdaten sehen oder gehört nicht mehr zur Firma (driver_data_not_available)
Schema: Error
429Rate-Limit überschritten (300 Aufrufe pro Minute je Zugang)
Schema: Error
Header: Retry-After (Sekunden, bis das Zeitfenster neu beginnt)

Rechnungen von fleetfeat auflisten

GET /api/v1/invoices

Alle Belege, die fleetfeat an die Firma ausgestellt hat: Service-Rechnungen (kind: service), Abo-Rechnungen (subscription), Stornobelege (cancellation) und Korrekturbelege einschließlich Minderungsbelegen (correction); die beiden letzten verweisen über corrects_invoice_id auf das Original. from/to filtern auf das Rechnungsdatum (Kalendertag). Dateien über pdf.download_path und e_invoice.download_path.

Scope: invoices:read

Parameter: Rechnungen von fleetfeat auflisten
NameOrtTypBeschreibung
limitQueryinteger · 1–200 · Standard 50
cursorQuerystringCursor aus next_cursor, unverändert weitergeben
fromQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
toQuerystringDatum nach ISO 8601 (00:00 UTC) oder Zeitpunkt mit Zeitzone
Antworten: Rechnungen von fleetfeat auflisten
StatusBeschreibung
200Eine Seite mit Ergebnissen
data: array<Invoice>
next_cursor: string · kann null sein — Als cursor mitgeben, um die nächste Seite zu holen; auf der letzten Seite null.
Header: X-RateLimit-Limit, X-RateLimit-Remaining
400Ungültiger Parameter
Schema: Error
401Token fehlt, ist abgelaufen oder entzogen
Schema: Error
403Dem Token fehlt der nötige Scope (insufficient_scope), oder die Daten gehören zu den Softwaremodulen und die Firma hat sie nicht gebucht oder das Modul in ihren Einstellungen ausgeblendet (module_not_available), oder der Endpunkt liefert personenbezogene Fahrerdaten und die Person, die den Zugang angelegt hat, darf keine Fahrerdaten sehen oder gehört nicht mehr zur Firma (driver_data_not_available)
Schema: Error
429Rate-Limit überschritten (300 Aufrufe pro Minute je Zugang)
Schema: Error
Header: Retry-After (Sekunden, bis das Zeitfenster neu beginnt)

Datenmodelle

Error

Schema Error
FeldTypBeschreibung
error Pflichtobject
error.code Pflichtstring · einer von invalid_token, insufficient_scope, module_not_available, invalid_parameter, not_found, file_unavailable, rate_limited, internal_error
error.message Pflichtstring
error.fieldstringDer beanstandete Parameter, falls einer

TokenRequest

Schema TokenRequest
FeldTypBeschreibung
grant_type Pflichtstring · = client_credentials
scopestringDurch Leerzeichen getrennte Teilmenge der Scopes des Zugangs; ohne Angabe alle
client_idstring
client_secretstring

TokenResponse

Schema TokenResponse
FeldTypBeschreibung
access_token Pflichtstring
token_type Pflichtstring · = Bearer
expires_in Pflichtinteger
scope Pflichtstring

Vehicle

Schema Vehicle
FeldTypBeschreibung
idstring (uuid)
finstring
license_platestring · kann null sein
makestring · kann null sein
modelstring · kann null sein
yearinteger · kann null sein
vehicle_typestring · kann null sein
fuel_typestring · kann null sein
usage_typestring · kann null sein
mileage_kminteger · kann null sein
first_registrationstring (date) · kann null sein
ownershipstring · kann null sein
leasing_endstring (date) · kann null sein
gross_weight_kginteger · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
empty_weight_kginteger · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
length_mminteger · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
width_mminteger · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
height_mminteger · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
axle_countinteger · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
brake_systemstring · einer von ungebremst, auflauf, druckluft · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
trailer_kindstring · einer von tandem_kasten, kipper, tieflader, bauwagen, tankanhaenger, sattelauflieger, sonstiges · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
coupling_typestring · einer von kugelkopf, bolzen, sattelkupplung · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
truck_bodystring · einer von pritsche, kipper, koffer, sattelzugmaschine, kran, sonstiges · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
towing_capacity_kginteger · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
has_tachographboolean · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
adr_equippedboolean · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
max_speed_kmhinteger · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
work_machine_kindstring · einer von erdbau, walze, sonstige · kann null seinStammdaten für Nutzfahrzeuge. Null, wenn das Feld nicht zu vehicle_type passt (Lkw, Anhänger; Transporter: nur zulässige Gesamtmasse).
battery_capacity_kwhnumber · kann null seinDaten für E-Fahrzeuge. Null, wenn das Feld nicht zu fuel_type passt.
wltp_range_kminteger · kann null seinDaten für E-Fahrzeuge. Null, wenn das Feld nicht zu fuel_type passt.
electric_range_kminteger · kann null seinDaten für E-Fahrzeuge. Null, wenn das Feld nicht zu fuel_type passt.
co2_g_kminteger · kann null seinDaten für E-Fahrzeuge. Null, wenn das Feld nicht zu fuel_type passt.
charging_power_ac_kwnumber · kann null seinDaten für E-Fahrzeuge. Null, wenn das Feld nicht zu fuel_type passt.
charging_power_dc_kwnumber · kann null seinDaten für E-Fahrzeuge. Null, wenn das Feld nicht zu fuel_type passt.
high_voltage_systemboolean · kann null seinDaten für E-Fahrzeuge. Null, wenn das Feld nicht zu fuel_type passt.
archived_atstring (date-time) · kann null sein
archive_reasonstring · kann null sein
current_driverobject · kann null seinNur mit dem Scope drivers:read
current_driver.namestring · kann null sein
current_driver.profile_idstring · kann null sein
created_atstring (date-time)
updated_atstring (date-time)

DriverAssignment

Schema DriverAssignment
FeldTypBeschreibung
idstring (uuid)
driverobject
driver.namestring
driver.profile_idstring · kann null sein
vehicleobject
vehicle.idstring (uuid)
vehicle.license_platestring · kann null sein
vehicle.finstring · kann null sein
assignment_typestring · einer von dauerhaft, temporaer, pool
valid_fromstring (date-time)
valid_tostring (date-time) · kann null sein
created_atstring (date-time)

ServiceOrder

Schema ServiceOrder
FeldTypBeschreibung
idstring (uuid)
statusstring · einer von awaiting_payment, requested, offered, accepted, scheduled, in_progress, awaiting_acceptance, done, cancelled, expired
serviceobject
service.slugstring
service.name_destring
service.name_enstring
vehicleobject · kann null sein
vehicle.idstring (uuid)
vehicle.license_platestring · kann null sein
vehicle.finstring · kann null sein
scheduled_startstring (date-time) · kann null sein
scheduled_endstring (date-time) · kann null sein
created_atstring (date-time)
updated_atstring (date-time)

Task

Schema Task
FeldTypBeschreibung
idstring (uuid)
titlestring
descriptionstring · kann null sein
due_onstring (date)
prioritystring · einer von niedrig, mittel, hoch
statusstring · einer von offen, erledigt_ausstehend, erledigt, storniert
done_bystring · einer von fahrer, fuhrpark, service · kann null sein
vehicleobject · kann null sein
vehicle.idstring (uuid)
vehicle.license_platestring · kann null sein
vehicle.finstring · kann null sein
assigneeobject · kann null sein
assignee.profile_idstring (uuid)
assignee.namestring · kann null sein
driverobject · kann null seinNur mit dem Scope drivers:read
driver.profile_idstring (uuid)
driver.namestring · kann null sein
completed_via_service_order_idstring (uuid) · kann null sein
completed_atstring (date-time) · kann null sein
cancel_reasonstring · kann null sein
created_atstring (date-time)
updated_atstring (date-time)

Document

Schema Document
FeldTypBeschreibung
idstring (uuid)
vehicleobject · kann null sein
vehicle.idstring (uuid)
vehicle.license_platestring · kann null sein
vehicle.finstring · kann null sein
categorystring
titlestring
issued_onstring (date) · kann null sein
amount_centsinteger · kann null sein
fileobject
file.sha256string · kann null seinSHA-256 als Hex in Kleinbuchstaben; null bei Dateien vor dem 08.09.2026
file.byte_sizeinteger · kann null sein
file.media_typestring · kann null sein
supersededbooleanEine ältere Fassung eines ersetzten Kostenbelegs
after_decommissionboolean
download_pathstring
created_atstring (date-time)

Fine

Schema Fine
FeldTypBeschreibung
idstring (uuid)
vehicleobject · kann null sein
vehicle.idstring (uuid)
vehicle.license_platestring · kann null sein
vehicle.finstring · kann null sein
file_numberstring · kann null sein
offense_atstring (date-time)
offense_typestring
locationstring · kann null sein
authoritystring · kann null sein
amount_centsinteger
due_onstring (date) · kann null sein
hearing_due_onstring (date) · kann null sein
statusstring
paid_atstring (date-time) · kann null sein
has_documentboolean
driver_assignmentobject · kann null seinNur mit dem Scope drivers:read
driver_assignment.namestring · kann null sein
driver_assignment.profile_idstring (uuid) · kann null sein
driver_assignment.sourcestring
driver_assignment.confirmedboolean
created_atstring (date-time)
updated_atstring (date-time)

CostCenter

Schema CostCenter
FeldTypBeschreibung
idstring (uuid)
numberstring
namestring
parent_idstring (uuid) · kann null sein
companyobject · kann null sein
company.idstring (uuid)
company.namestring
responsibleobject · kann null sein
responsible.profile_idstring (uuid)
responsible.namestring · kann null sein
valid_fromstring (date)
valid_tostring (date) · kann null sein
activeboolean
created_atstring (date-time)
updated_atstring (date-time)

Invoice

Schema Invoice
FeldTypBeschreibung
idstring (uuid)
kindstring · einer von service, subscription, cancellation, correction
numberstring
statusstring · einer von open, collecting, paid, cancelled, issuedcollecting = Lastschrift läuft (nur Abo-Rechnungen); issued = Storno- und Korrekturbelege, die keinen Zahlungsstatus haben
corrects_invoice_idstring (uuid) · kann null seinNur bei Storno/Korrektur: der Originalbeleg (eine id aus dieser Liste)
corrects_invoice_numberstring · kann null sein
service_labelstring · kann null seinnull bei Abo-Rechnungen
service_datestring (date) · kann null sein
service_periodobject · kann null seinNur bei Abo-Rechnungen: der abgerechnete Zeitraum
service_period.startstring (date)
service_period.endstring (date)
service_order_idsarray<string (uuid)>
currencystring · = EUR
net_centsinteger
vat_rate_bpintegerUmsatzsteuersatz in Basispunkten (1900 = 19 %)
vat_centsinteger
gross_centsinteger
issued_onstring (date)
due_onstring (date) · kann null sein
paid_atstring (date-time) · kann null sein
cancelled_atstring (date-time) · kann null sein
pdfobject
pdf.sha256string · kann null sein
pdf.byte_sizeinteger · kann null sein
pdf.download_pathstring
e_invoiceobject · kann null sein
e_invoice.formatstring · einer von zugferd, xrechnung
e_invoice.sha256string
e_invoice.byte_sizeinteger · kann null sein
e_invoice.validboolean · kann null sein
e_invoice.download_pathstring
created_atstring (date-time)

Fragen zur Anbindung? Schreiben Sie an info@fleetfeat.de.