location_to_id. The API user needs the permission to update vehicle locations; without it the call returns a business error.vehicle_relocated: false and applied automatically by a daily job on its date. Only the location changes then: the vehicle's odometer and fuel level are not updated.date_date must be on or after the day after that relocation.amount is not sent, the relocation cost configured in Settings for this pair of locations is used.fleets_vehicle_relocated webhook fires when the relocation is created, also for a future date.{
"location_to_id": 3,
"date_date": "2026-10-07",
"date_time": "09:00",
"amount": 45,
"odometer": 18275,
"fuel_level": 7,
"reason": "Rebalancing for weekend demand"
}data.relocation, with the vehicle (including its model and make), location_from, location_to and the created expense (or null). HTTP 200 is also used for failures: always check success. When it is false, the body is an ErrorBusinessRule (status_code 410) or an ErrorUnauthorized (status_code 401 or 403).{
"success": true,
"status_code": 200,
"errors": [],
"data": {
"relocation": {
"id": 731,
"vehicle_id": 57,
"location_from_id": 1,
"location_to_id": 3,
"date": "2026-10-07T09:00:00.000000Z",
"amount": "45.00",
"reason": "Rebalancing for weekend demand",
"type_id": null,
"old_odometer": 18240,
"new_odometer": 18275,
"old_fuel_level": 8,
"new_fuel_level": 7,
"vehicle_relocated": true,
"created_at": "2026-10-07T09:02:41.000000Z",
"updated_at": "2026-10-07T09:02:41.000000Z",
"vehicle": {
"id": 57,
"plate": "KLM 4821",
"current_location_id": 3,
"status": "available"
},
"location_from": {
"id": 1,
"name": "Miami Airport"
},
"location_to": {
"id": 3,
"name": "Fort Lauderdale Downtown"
},
"expense": null
}
}
}