Trips
bearerAuthAuthorizationBearer <JWT>vehicleId?stringuuidtype?string"business""private""commute""unclassified"from?stringdate-timeto?stringdate-timelimit?integervalue <= 500100offset?integer0Fahrten
application/json- response
[index: integer]?curl -X GET 'https://example.com/api/v1/trips'[ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "vehicleId": "c406adf4-e700-4483-ad7a-e7447a2941cb", "type": "business", "specialCategory": "medical", "status": "recording", "clientTripId": "318f40ef-c424-48c0-a9d6-a2368e4149e4", "startedAt": "2019-08-24T14:15:22Z", "endedAt": "2019-08-24T14:15:22Z", "startTimeZone": "string", "endTimeZone": "string", "timeZoneSource": "trip", "startAddress": "string", "endAddress": "string", "purpose": "string", "contact": "string", "notes": "string", "distanceKm": 0, "durationSeconds": 0, "reimbursementRateEur": 0, "reimbursementEur": 0, "mapMatching": null, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }]bearerAuthAuthorizationBearer <JWT>application/json- body
vehicleId*stringuuidtype?string"unclassified""business""private""commute""unclassified"specialCategory?|Optional secondary purpose category independent of the primary trip type.
"medical""volunteer""education""application""moving""other"nullstartedAt*stringdate-timeendedAt?|date-timestartTimeZone?|IANA time zone; omitted = keep (update) or account time zone (create).
endTimeZone?|IANA time zone; defaults to startTimeZone.
startAddress?string|nullendAddress?string|nullpurpose?string|nullcontact?string|nullnotes?string|nullreimbursementRateEur?|Reimbursement rate (EUR per km) for this trip. Omitted = keep (update) or vehicle default for business trips (create); null removes it.
0 <= value <= 1000startLat?|Nur beim Anlegen (POST /trips): Koordinate der Startadresse, zusammen mit startLon.
-90 <= value <= 90startLon?|Nur beim Anlegen
-180 <= value <= 180endLat?|Nur beim Anlegen: Koordinate der Zieladresse, zusammen mit endLon.
-90 <= value <= 90endLon?|Nur beim Anlegen
-180 <= value <= 180distanceKm?|Nur beim Anlegen einer beendeten Fahrt: gefahrene Strecke, z. B. vom Tacho oder aus GET /geocoding/route. Ohne Angabe bleibt die Distanz leer.
0 <= value <= 10000Fahrt angelegt
application/json- response
id*stringuuidvehicleId*stringuuidtype*string"business""private""commute""unclassified"specialCategory?|Optional secondary purpose category independent of the primary trip type.
"medical""volunteer""education""application""moving""other"nullstatus*string"recording""completed""cancelled"clientTripId?|Trip ID generated by the recording device at start (sent as clientTripId to /tracking/start).
uuidstartedAt*stringdate-timeendedAt?|date-timestartTimeZone?|IANA time zone in which the trip started. Falls back to the user's time zone. Format startedAt in this zone to show local time (DST-aware).
endTimeZone?|IANA time zone in which the trip ended. Falls back to startTimeZone, then the user's time zone.
timeZoneSource?|trip = recorded with the trip, user = fallback to the account time zone.
"trip""user"nullstartAddress?string|nullendAddress?string|nullpurpose?string|nullcontact?string|nullnotes?string|nulldistanceKm?number|nulldurationSeconds?integer|nullreimbursementRateEur?|Employer reimbursement rate of this trip (EUR per km). Taken from the vehicle when the trip becomes a business trip and has no rate yet; kept when the type changes later.
reimbursementEur?|distanceKm × reimbursementRateEur, rounded to cents. Only for business trips, otherwise null.
mapMatching?|Ergebnis des Map-Matchings (null = noch nicht gematcht). Bei status applied ist distanceKm die gematchte Distanz.
createdAt?stringdate-timeupdatedAt?stringdate-timecurl -X POST 'https://example.com/api/v1/trips' \ -H 'Content-Type: application/json' \ -d '{ "vehicleId": "c406adf4-e700-4483-ad7a-e7447a2941cb", "startedAt": "2019-08-24T14:15:22Z"}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "vehicleId": "c406adf4-e700-4483-ad7a-e7447a2941cb", "type": "business", "specialCategory": "medical", "status": "recording", "clientTripId": "318f40ef-c424-48c0-a9d6-a2368e4149e4", "startedAt": "2019-08-24T14:15:22Z", "endedAt": "2019-08-24T14:15:22Z", "startTimeZone": "string", "endTimeZone": "string", "timeZoneSource": "trip", "startAddress": "string", "endAddress": "string", "purpose": "string", "contact": "string", "notes": "string", "distanceKm": 0, "durationSeconds": 0, "reimbursementRateEur": 0, "reimbursementEur": 0, "mapMatching": null, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}bearerAuthAuthorizationBearer <JWT>id*stringuuidFahrt
application/json- response
id*stringuuidvehicleId*stringuuidtype*string"business""private""commute""unclassified"specialCategory?|Optional secondary purpose category independent of the primary trip type.
"medical""volunteer""education""application""moving""other"nullstatus*string"recording""completed""cancelled"clientTripId?|Trip ID generated by the recording device at start (sent as clientTripId to /tracking/start).
uuidstartedAt*stringdate-timeendedAt?|date-timestartTimeZone?|IANA time zone in which the trip started. Falls back to the user's time zone. Format startedAt in this zone to show local time (DST-aware).
endTimeZone?|IANA time zone in which the trip ended. Falls back to startTimeZone, then the user's time zone.
timeZoneSource?|trip = recorded with the trip, user = fallback to the account time zone.
"trip""user"nullstartAddress?string|nullendAddress?string|nullpurpose?string|nullcontact?string|nullnotes?string|nulldistanceKm?number|nulldurationSeconds?integer|nullreimbursementRateEur?|Employer reimbursement rate of this trip (EUR per km). Taken from the vehicle when the trip becomes a business trip and has no rate yet; kept when the type changes later.
reimbursementEur?|distanceKm × reimbursementRateEur, rounded to cents. Only for business trips, otherwise null.
mapMatching?|Ergebnis des Map-Matchings (null = noch nicht gematcht). Bei status applied ist distanceKm die gematchte Distanz.
createdAt?stringdate-timeupdatedAt?stringdate-timecurl -X GET 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "vehicleId": "c406adf4-e700-4483-ad7a-e7447a2941cb", "type": "business", "specialCategory": "medical", "status": "recording", "clientTripId": "318f40ef-c424-48c0-a9d6-a2368e4149e4", "startedAt": "2019-08-24T14:15:22Z", "endedAt": "2019-08-24T14:15:22Z", "startTimeZone": "string", "endTimeZone": "string", "timeZoneSource": "trip", "startAddress": "string", "endAddress": "string", "purpose": "string", "contact": "string", "notes": "string", "distanceKm": 0, "durationSeconds": 0, "reimbursementRateEur": 0, "reimbursementEur": 0, "mapMatching": null, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}bearerAuthAuthorizationBearer <JWT>id*stringuuidFahrt gelöscht
curl -X DELETE 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08'bearerAuthAuthorizationBearer <JWT>id*stringuuidapplication/json- body
vehicleId*stringuuidtype?string"unclassified""business""private""commute""unclassified"specialCategory?|Optional secondary purpose category independent of the primary trip type.
"medical""volunteer""education""application""moving""other"nullstartedAt*stringdate-timeendedAt?|date-timestartTimeZone?|IANA time zone; omitted = keep (update) or account time zone (create).
endTimeZone?|IANA time zone; defaults to startTimeZone.
startAddress?string|nullendAddress?string|nullpurpose?string|nullcontact?string|nullnotes?string|nullreimbursementRateEur?|Reimbursement rate (EUR per km) for this trip. Omitted = keep (update) or vehicle default for business trips (create); null removes it.
0 <= value <= 1000startLat?|Nur beim Anlegen (POST /trips): Koordinate der Startadresse, zusammen mit startLon.
-90 <= value <= 90startLon?|Nur beim Anlegen
-180 <= value <= 180endLat?|Nur beim Anlegen: Koordinate der Zieladresse, zusammen mit endLon.
-90 <= value <= 90endLon?|Nur beim Anlegen
-180 <= value <= 180distanceKm?|Nur beim Anlegen einer beendeten Fahrt: gefahrene Strecke, z. B. vom Tacho oder aus GET /geocoding/route. Ohne Angabe bleibt die Distanz leer.
0 <= value <= 10000Fahrt aktualisiert
application/json- response
id*stringuuidvehicleId*stringuuidtype*string"business""private""commute""unclassified"specialCategory?|Optional secondary purpose category independent of the primary trip type.
"medical""volunteer""education""application""moving""other"nullstatus*string"recording""completed""cancelled"clientTripId?|Trip ID generated by the recording device at start (sent as clientTripId to /tracking/start).
uuidstartedAt*stringdate-timeendedAt?|date-timestartTimeZone?|IANA time zone in which the trip started. Falls back to the user's time zone. Format startedAt in this zone to show local time (DST-aware).
endTimeZone?|IANA time zone in which the trip ended. Falls back to startTimeZone, then the user's time zone.
timeZoneSource?|trip = recorded with the trip, user = fallback to the account time zone.
"trip""user"nullstartAddress?string|nullendAddress?string|nullpurpose?string|nullcontact?string|nullnotes?string|nulldistanceKm?number|nulldurationSeconds?integer|nullreimbursementRateEur?|Employer reimbursement rate of this trip (EUR per km). Taken from the vehicle when the trip becomes a business trip and has no rate yet; kept when the type changes later.
reimbursementEur?|distanceKm × reimbursementRateEur, rounded to cents. Only for business trips, otherwise null.
mapMatching?|Ergebnis des Map-Matchings (null = noch nicht gematcht). Bei status applied ist distanceKm die gematchte Distanz.
createdAt?stringdate-timeupdatedAt?stringdate-timecurl -X PUT 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08' \ -H 'Content-Type: application/json' \ -d '{ "vehicleId": "c406adf4-e700-4483-ad7a-e7447a2941cb", "startedAt": "2019-08-24T14:15:22Z"}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "vehicleId": "c406adf4-e700-4483-ad7a-e7447a2941cb", "type": "business", "specialCategory": "medical", "status": "recording", "clientTripId": "318f40ef-c424-48c0-a9d6-a2368e4149e4", "startedAt": "2019-08-24T14:15:22Z", "endedAt": "2019-08-24T14:15:22Z", "startTimeZone": "string", "endTimeZone": "string", "timeZoneSource": "trip", "startAddress": "string", "endAddress": "string", "purpose": "string", "contact": "string", "notes": "string", "distanceKm": 0, "durationSeconds": 0, "reimbursementRateEur": 0, "reimbursementEur": 0, "mapMatching": null, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}bearerAuthAuthorizationBearer <JWT>id*stringuuidFahrten-Historie
application/json- response
[index: integer]?curl -X GET 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/history'[ { "id": "string", "tripId": "ab93ac19-a7bf-4885-87b6-6dcba80ee2d5", "eventType": "CREATED", "changedFields": {}, "oldValues": {}, "newValues": {}, "metadata": {}, "actor": null, "createdAt": "2019-08-24T14:15:22Z" }]Auf das Straßennetz gelegte Route aus dem Map-Matching. Die GPS-Rohpunkte bleiben unter /trips/{id}/points unverändert.
bearerAuthAuthorizationBearer <JWT>id*stringuuidGematchte Route
application/json- response
status*string"applied""rejected""failed"provider*string"valhalla""osrm""atlas"matchedAt?stringdate-timerawDistanceMeters?|Distanz aus den GPS-Rohpunkten
matchedDistanceMeters?integer|nullmessage?|Grund bei rejected/failed
tripId*stringuuidpointCount?integerconfidence?number|nullcoordinates*array<array<number>>Route auf dem Straßennetz als [lat, lon]-Paare
curl -X GET 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/matched-route'{ "status": "applied", "provider": "valhalla", "matchedAt": "2019-08-24T14:15:22Z", "rawDistanceMeters": 0, "matchedDistanceMeters": 0, "message": "string", "tripId": "ab93ac19-a7bf-4885-87b6-6dcba80ee2d5", "pointCount": 0, "confidence": 0, "coordinates": [ [ 0, 0 ] ]}bearerAuthAuthorizationBearer <JWT>id*stringuuidGPS-Punkte
application/json- response
[index: integer]?curl -X GET 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/points'[ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "tripId": "ab93ac19-a7bf-4885-87b6-6dcba80ee2d5", "lat": -90, "lon": -180, "altitude": 0, "accuracy": 0, "speed": 0, "bearing": 0, "recordedAt": "2019-08-24T14:15:22Z", "source": "gps" }]Entfernt einzelne GPS-Punkte (z. B. Sprünge durch schlechten Empfang). Distanz,
Dauer sowie Start- und Zielkoordinaten werden aus den verbleibenden Punkten neu
berechnet, ein vorhandenes Map-Matching wird verworfen und beim nächsten Lauf neu
erzeugt. Die entfernten Punkte stehen mit Koordinaten und Zeit in der Fahrthistorie
(POINTS_REMOVED). Nur für abgeschlossene Fahrten; mindestens zwei Punkte bleiben.
bearerAuthAuthorizationBearer <JWT>id*stringuuidapplication/json- body
pointIds*array<>IDs aus GET /trips/{id}/points
1 <= items <= 5000Aktualisierte Fahrt
application/json- response
id*stringuuidvehicleId*stringuuidtype*string"business""private""commute""unclassified"specialCategory?|Optional secondary purpose category independent of the primary trip type.
"medical""volunteer""education""application""moving""other"nullstatus*string"recording""completed""cancelled"clientTripId?|Trip ID generated by the recording device at start (sent as clientTripId to /tracking/start).
uuidstartedAt*stringdate-timeendedAt?|date-timestartTimeZone?|IANA time zone in which the trip started. Falls back to the user's time zone. Format startedAt in this zone to show local time (DST-aware).
endTimeZone?|IANA time zone in which the trip ended. Falls back to startTimeZone, then the user's time zone.
timeZoneSource?|trip = recorded with the trip, user = fallback to the account time zone.
"trip""user"nullstartAddress?string|nullendAddress?string|nullpurpose?string|nullcontact?string|nullnotes?string|nulldistanceKm?number|nulldurationSeconds?integer|nullreimbursementRateEur?|Employer reimbursement rate of this trip (EUR per km). Taken from the vehicle when the trip becomes a business trip and has no rate yet; kept when the type changes later.
reimbursementEur?|distanceKm × reimbursementRateEur, rounded to cents. Only for business trips, otherwise null.
mapMatching?|Ergebnis des Map-Matchings (null = noch nicht gematcht). Bei status applied ist distanceKm die gematchte Distanz.
createdAt?stringdate-timeupdatedAt?stringdate-timecurl -X POST 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/points/remove' \ -H 'Content-Type: application/json' \ -d '{ "pointIds": [ "077ab0e7-997d-450a-aa83-a0ee4c7f1644" ]}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "vehicleId": "c406adf4-e700-4483-ad7a-e7447a2941cb", "type": "business", "specialCategory": "medical", "status": "recording", "clientTripId": "318f40ef-c424-48c0-a9d6-a2368e4149e4", "startedAt": "2019-08-24T14:15:22Z", "endedAt": "2019-08-24T14:15:22Z", "startTimeZone": "string", "endTimeZone": "string", "timeZoneSource": "trip", "startAddress": "string", "endAddress": "string", "purpose": "string", "contact": "string", "notes": "string", "distanceKm": 0, "durationSeconds": 0, "reimbursementRateEur": 0, "reimbursementEur": 0, "mapMatching": null, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}Ersetzt alle GPS-Punkte einer abgeschlossenen Fahrt und setzt Start, Ende und Adressen.
Der erste Punkt erhält die Startzeit, der letzte die Endzeit; Punkte ohne recordedAt
(neu gesetzt oder über die Straße ergänzt) werden nach Strecke zeitlich verteilt.
Distanz und Dauer werden neu berechnet, Map-Matching neu eingereiht. Bleibt eine Adresse
unverändert, während sich der zugehörige Endpunkt um mehr als 150 m verschiebt, wird
sie neu ermittelt. Historie: ROUTE_CORRECTED mit metadata.method = editor.
bearerAuthAuthorizationBearer <JWT>id*stringuuidapplication/json- body
startedAt*stringdate-timeendedAt*stringdate-timestartAddress?|Fehlt das Feld
endAddress?|Fehlt das Feld
routedPointCount?integerVeraltet – wird aus den Punkten mit source routed ermittelt.
points*array<>2 <= items <= 20000Aktualisierte Fahrt
application/json- response
id*stringuuidvehicleId*stringuuidtype*string"business""private""commute""unclassified"specialCategory?|Optional secondary purpose category independent of the primary trip type.
"medical""volunteer""education""application""moving""other"nullstatus*string"recording""completed""cancelled"clientTripId?|Trip ID generated by the recording device at start (sent as clientTripId to /tracking/start).
uuidstartedAt*stringdate-timeendedAt?|date-timestartTimeZone?|IANA time zone in which the trip started. Falls back to the user's time zone. Format startedAt in this zone to show local time (DST-aware).
endTimeZone?|IANA time zone in which the trip ended. Falls back to startTimeZone, then the user's time zone.
timeZoneSource?|trip = recorded with the trip, user = fallback to the account time zone.
"trip""user"nullstartAddress?string|nullendAddress?string|nullpurpose?string|nullcontact?string|nullnotes?string|nulldistanceKm?number|nulldurationSeconds?integer|nullreimbursementRateEur?|Employer reimbursement rate of this trip (EUR per km). Taken from the vehicle when the trip becomes a business trip and has no rate yet; kept when the type changes later.
reimbursementEur?|distanceKm × reimbursementRateEur, rounded to cents. Only for business trips, otherwise null.
mapMatching?|Ergebnis des Map-Matchings (null = noch nicht gematcht). Bei status applied ist distanceKm die gematchte Distanz.
createdAt?stringdate-timeupdatedAt?stringdate-timecurl -X PUT 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/route' \ -H 'Content-Type: application/json' \ -d '{ "startedAt": "2019-08-24T14:15:22Z", "endedAt": "2019-08-24T14:15:22Z", "points": [ { "lat": -90, "lon": -180 }, { "lat": -90, "lon": -180 } ]}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "vehicleId": "c406adf4-e700-4483-ad7a-e7447a2941cb", "type": "business", "specialCategory": "medical", "status": "recording", "clientTripId": "318f40ef-c424-48c0-a9d6-a2368e4149e4", "startedAt": "2019-08-24T14:15:22Z", "endedAt": "2019-08-24T14:15:22Z", "startTimeZone": "string", "endTimeZone": "string", "timeZoneSource": "trip", "startAddress": "string", "endAddress": "string", "purpose": "string", "contact": "string", "notes": "string", "distanceKm": 0, "durationSeconds": 0, "reimbursementRateEur": 0, "reimbursementEur": 0, "mapMatching": null, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}Verwirft alle erzeugten Punkte (source = routed) und füllt die Lücken über 250 m
zwischen gemessenen und gesetzten Punkten neu über den Routing-Dienst. Gemessene und
gesetzte Punkte, Start, Ende und Adressen bleiben unverändert; Distanz und Dauer werden
neu berechnet. Historie: ROUTE_CORRECTED mit metadata.method = recalculate.
bearerAuthAuthorizationBearer <JWT>id*stringuuidErgebnis
application/json- response
trip?gapCount?integerroutedGaps?integerfailedGaps?integerroutedPointCount?integercurl -X POST 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/route/recalculate'{ "trip": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "vehicleId": "c406adf4-e700-4483-ad7a-e7447a2941cb", "type": "business", "specialCategory": "medical", "status": "recording", "clientTripId": "318f40ef-c424-48c0-a9d6-a2368e4149e4", "startedAt": "2019-08-24T14:15:22Z", "endedAt": "2019-08-24T14:15:22Z", "startTimeZone": "string", "endTimeZone": "string", "timeZoneSource": "trip", "startAddress": "string", "endAddress": "string", "purpose": "string", "contact": "string", "notes": "string", "distanceKm": 0, "durationSeconds": 0, "reimbursementRateEur": 0, "reimbursementEur": 0, "mapMatching": null, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }, "gapCount": 0, "routedGaps": 0, "failedGaps": 0, "routedPointCount": 0}Füllt Lücken einer abgeschlossenen Fahrt (Fahrtbeginn bis erster Punkt, Abstände
zwischen Punkten, letzter Punkt bis Fahrtende – jeweils ab 60 Sekunden) mit
Standortpunkten aus der verbundenen Dawarich-Instanz des Benutzers
(siehe /users/me/dawarich). Vorhandene Punkte bleiben unverändert; Dawarich-Punkte
mit mehr als 200 m Ungenauigkeit werden übersprungen. Distanz und Dauer werden neu
berechnet, Map-Matching wird neu eingereiht. Verschieben sich Start oder Ziel um mehr
als 150 m, wird die jeweilige Adresse neu ermittelt. In der Fahrthistorie steht
POINTS_IMPORTED. Mit preview: true werden die passenden Punkte nur geliefert
(points) und nichts gespeichert – so übernimmt der Fahrt-Editor sie als ungespeicherte
Änderung.
bearerAuthAuthorizationBearer <JWT>id*stringuuidapplication/json- body
preview?booleanfalseErgebnis des Imports
application/json- response
importedCount*integerAnzahl übernommener (bzw. bei preview passender) Punkte
gapCount*integerAnzahl gefundener Lücken
trip?Nur ohne preview
points?array<>Nur bei preview – die passenden Punkte, nicht gespeichert
curl -X POST 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/dawarich-import' \ -H 'Content-Type: application/json' \ -d '{}'{ "importedCount": 0, "gapCount": 0, "trip": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "vehicleId": "c406adf4-e700-4483-ad7a-e7447a2941cb", "type": "business", "specialCategory": "medical", "status": "recording", "clientTripId": "318f40ef-c424-48c0-a9d6-a2368e4149e4", "startedAt": "2019-08-24T14:15:22Z", "endedAt": "2019-08-24T14:15:22Z", "startTimeZone": "string", "endTimeZone": "string", "timeZoneSource": "trip", "startAddress": "string", "endAddress": "string", "purpose": "string", "contact": "string", "notes": "string", "distanceKm": 0, "durationSeconds": 0, "reimbursementRateEur": 0, "reimbursementEur": 0, "mapMatching": null, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }, "points": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "tripId": "ab93ac19-a7bf-4885-87b6-6dcba80ee2d5", "lat": -90, "lon": -180, "altitude": 0, "accuracy": 0, "speed": 0, "bearing": 0, "recordedAt": "2019-08-24T14:15:22Z", "source": "gps" } ]}bearerAuthAuthorizationBearer <JWT>id*stringuuidapplication/json- body
type*string"business""private""commute"specialCategory?|Optional secondary purpose category; null removes it.
"medical""volunteer""education""application""moving""other"nullpurpose?|Trip purpose. Only changed when present; null or "" removes it.
length <= 1000contact?|Business contact / visited person. Only changed when present; null or "" removes it.
length <= 1000notes?|Free-text note. Only changed when present; null or "" removes it.
length <= 20000reimbursementRateEur?|Reimbursement rate (EUR per km). Only changed when present; null removes it. Omitted when switching to business = vehicle default if the trip has no rate yet.
0 <= value <= 1000Fahrt klassifiziert
curl -X PUT 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/classify' \ -H 'Content-Type: application/json' \ -d '{ "type": "business"}'bearerAuthAuthorizationBearer <JWT>id*stringuuidapplication/json- body
tagIds*array<>Tags gesetzt
curl -X PUT 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/tags' \ -H 'Content-Type: application/json' \ -d '{ "tagIds": [ "9c99701b-f191-4642-8bc0-e04053f29131" ]}'bearerAuthAuthorizationBearer <JWT>Prüfzusammenfassung, Integrität und Auffälligkeiten
curl -X GET 'https://example.com/api/v1/compliance/checks'bearerAuthAuthorizationBearer <JWT>Integritätsstatus
curl -X GET 'https://example.com/api/v1/compliance/integrity'bearerAuthAuthorizationBearer <JWT>Abgeschlossene Zeiträume
curl -X GET 'https://example.com/api/v1/compliance/periods'bearerAuthAuthorizationBearer <JWT>Zeitraum abgeschlossen
curl -X POST 'https://example.com/api/v1/compliance/periods'bearerAuthAuthorizationBearer <JWT>Successful response
curl -X GET 'https://example.com/api/v1/trips/archive'bearerAuthAuthorizationBearer <JWT>id*stringSuccessful response
curl -X POST 'https://example.com/api/v1/trips/string/restore'bearerAuthAuthorizationBearer <JWT>id*stringSuccessful response
curl -X DELETE 'https://example.com/api/v1/trips/string/permanent'bearerAuthAuthorizationBearer <JWT>id*stringuuidGeteilte Fahrten
curl -X POST 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/split'bearerAuthAuthorizationBearer <JWT>Zusammengeführte Fahrt
curl -X POST 'https://example.com/api/v1/trips/merge'bearerAuthAuthorizationBearer <JWT>id*stringuuidZulässige Fahrer und Rückgabeoptionen
curl -X GET 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/assignable-drivers'bearerAuthAuthorizationBearer <JWT>id*stringuuidapplication/json- body
userId*stringuuidreason?stringlength <= 500Fahrerzuordnung aktualisiert
curl -X POST 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/assign-driver' \ -H 'Content-Type: application/json' \ -d '{ "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b"}'Vorschläge zur Fahrtart. source places = bekannte Orte (Zuhause, Arbeitsort, gespeicherte Orte), history = gleiche Strecke wurde schon mehrfach gleich eingeordnet, ai = gespeicherter KI-Vorschlag. Nur Vorschläge – eingeordnet wird über PUT /trips/{id}/classify. history und ai nur mit Feature aiClassification.
bearerAuthAuthorizationBearer <JWT>id*stringuuidVorschläge
application/json- response
suggestions*array<>ai?Nur mit Feature aiClassification.
curl -X GET 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/suggestions'{ "suggestions": [ { "type": "business", "reason": "string", "source": "places", "confidence": 0, "historyCount": 0, "historyTotal": 0, "provider": "string", "purpose": "string", "contact": "string", "startPlace": {}, "endPlace": {} } ], "ai": { "available": true, "enabled": true, "status": "none" }}Fragt den KI-Anbieter (Claude, OpenAI oder Ollama) sofort, auch erneut. Sendet Adressen, Zeiten, bekannte Orte und die letzten eingeordneten Fahrten – keine GPS-Spur. Erfordert Feature aiClassification, einen eingerichteten Anbieter und aiClassificationEnabled in den Nutzereinstellungen.
bearerAuthAuthorizationBearer <JWT>id*stringuuidAktualisierte Vorschläge
application/json- response
suggestions*array<>ai?Nur mit Feature aiClassification.
curl -X POST 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/suggestions/ai'{ "suggestions": [ { "type": "business", "reason": "string", "source": "places", "confidence": 0, "historyCount": 0, "historyTotal": 0, "provider": "string", "purpose": "string", "contact": "string", "startPlace": {}, "endPlace": {} } ], "ai": { "available": true, "enabled": true, "status": "none" }}bearerAuthAuthorizationBearer <JWT>id*stringuuidAktualisierte Vorschläge
application/json- response
suggestions*array<>ai?Nur mit Feature aiClassification.
curl -X POST 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/suggestions/ai/dismiss'{ "suggestions": [ { "type": "business", "reason": "string", "source": "places", "confidence": 0, "historyCount": 0, "historyTotal": 0, "provider": "string", "purpose": "string", "contact": "string", "startPlace": {}, "endPlace": {} } ], "ai": { "available": true, "enabled": true, "status": "none" }}bearerAuthAuthorizationBearer <JWT>id*stringuuidKorrigierte Fahrt
curl -X POST 'https://example.com/api/v1/trips/497f6eca-6276-4993-bfeb-53cbbbba6f08/route-correction'