The fleet module serves fleet assets and classes, meters and readings, maintenance plans and reminders, fleet work orders, operations (assignments, couplings, inspections, defects, reservations, incidents), fuel and compliance, TCO, tyres, campaigns, emission factors, and a telematics feed. All 116 endpoints sit under /api/v1/fleet. For business meaning see the Fleet module page.
Group facts¶
| Item | Value | Source |
|---|---|---|
| Base path | /api/v1/fleet |
src/cluster_erp/core/module_base.py:37-38, src/cluster_erp/modules/fleet/module.py:310 |
| Routers | 25 router objects in 8 files; listed in the section Endpoint summary | src/cluster_erp/modules/fleet/module.py:267 |
| Endpoints | 116, counted from the route decorators and add_api_route calls of the routers that register_routes mounts |
src/cluster_erp/modules/fleet/assets/routes.py, src/cluster_erp/modules/fleet/fuel/routes.py, src/cluster_erp/modules/fleet/maintenance/routes.py ... |
| Authentication | Bearer header or session cookie, resolved by get_current_user; see Authentication and headers |
src/cluster_erp/modules/auth/guards.py:85-167 |
| Permission guard | 116 of 116 routes declare require_permission |
src/cluster_erp/modules/auth/guards.py:205-240 |
| Error format | JSON body {"error": {...}}; see Errors |
src/cluster_erp/server/error_handler.py:33-46 |
Endpoint summary¶
One row per sub-module folder. The router prefix is added to the base path.
| Sub-module | Routers | Endpoints | Router source |
|---|---|---|---|
assets |
asset_router (/assets), class_router (/classes) |
10 | src/cluster_erp/modules/fleet/assets/routes.py:34, src/cluster_erp/modules/fleet/assets/routes.py:35 |
meters |
meter_router (/meters), reading_router (/readings) |
9 | src/cluster_erp/modules/fleet/meters/routes.py:29, src/cluster_erp/modules/fleet/meters/routes.py:30 |
maintenance |
plan_router (/maintenance/plans), reminder_router (/maintenance/reminders) |
9 | src/cluster_erp/modules/fleet/maintenance/routes.py:25, src/cluster_erp/modules/fleet/maintenance/routes.py:26 |
workorders |
wo_router (/work-orders), wo_item_router (/work-order-items), wo_part_router (/work-order-parts) |
14 | src/cluster_erp/modules/fleet/workorders/routes.py:27, src/cluster_erp/modules/fleet/workorders/routes.py:28, src/cluster_erp/modules/fleet/workorders/routes.py:29 |
operations |
assignment_router (/assignments), coupling_router (/couplings), inspection_router (/inspections), defect_router (/defects), reservation_router (/reservations), incident_router (/incidents) |
27 | src/cluster_erp/modules/fleet/operations/routes.py:45, src/cluster_erp/modules/fleet/operations/routes.py:46, src/cluster_erp/modules/fleet/operations/routes.py:47, src/cluster_erp/modules/fleet/operations/routes.py:48, src/cluster_erp/modules/fleet/operations/routes.py:49, src/cluster_erp/modules/fleet/operations/routes.py:50 |
fuel |
fuel_router (/fuel), compliance_router (/compliance), penalty_router (/penalties), period_router (/inspection-periods) |
23 | src/cluster_erp/modules/fleet/fuel/routes.py:35, src/cluster_erp/modules/fleet/fuel/routes.py:36, src/cluster_erp/modules/fleet/fuel/routes.py:37, src/cluster_erp/modules/fleet/fuel/routes.py:38 |
tco |
tco_router (/tco), tire_router (/tires), campaign_router (/campaigns), campaign_asset_router (/campaign-assets), emission_router (/emission-factors) |
23 | src/cluster_erp/modules/fleet/tco/routes.py:34, src/cluster_erp/modules/fleet/tco/routes.py:35, src/cluster_erp/modules/fleet/tco/routes.py:36, src/cluster_erp/modules/fleet/tco/routes.py:37, src/cluster_erp/modules/fleet/tco/routes.py:40 |
telematics |
telematics_router (/telematics) |
1 | src/cluster_erp/modules/fleet/telematics.py:34 |
Assets and classes endpoints¶
Asset records with state actions under /actions/{action}, and asset classes.
| Method | Path | Handler | Permission | Request | Query | Response | Status | Source |
|---|---|---|---|---|---|---|---|---|
GET |
/api/v1/fleet/assets/ |
list_assets |
fleet_asset.read |
none | search, class_id, status, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/assets/routes.py:54 |
POST |
/api/v1/fleet/assets/ |
create_asset |
fleet_asset.create |
FleetAssetCreate |
none | FleetAssetRead |
201 |
src/cluster_erp/modules/fleet/assets/routes.py:89 |
GET |
/api/v1/fleet/assets/{asset_id} |
get_asset |
fleet_asset.read |
none | none | FleetAssetRead |
200 (default) | src/cluster_erp/modules/fleet/assets/routes.py:98 |
PUT |
/api/v1/fleet/assets/{asset_id} |
update_asset |
fleet_asset.update |
FleetAssetUpdate |
none | FleetAssetRead |
200 (default) | src/cluster_erp/modules/fleet/assets/routes.py:110 |
POST |
/api/v1/fleet/assets/{asset_id}/actions/{action} |
run_asset_action |
fleet_asset.update |
dict[str, Any] \| None |
none | FleetAssetRead |
200 (default) | src/cluster_erp/modules/fleet/assets/routes.py:120 |
DELETE |
/api/v1/fleet/assets/{asset_id} |
deactivate_asset |
fleet_asset.delete |
none | none | FleetAssetRead |
200 (default) | src/cluster_erp/modules/fleet/assets/routes.py:134 |
GET |
/api/v1/fleet/classes/ |
list_classes |
fleet_asset_class.read |
none | include_inactive |
dict |
200 (default) | src/cluster_erp/modules/fleet/assets/routes.py:146 |
GET |
/api/v1/fleet/classes/{class_id} |
get_class |
fleet_asset_class.read |
none | none | FleetClassRead |
200 (default) | src/cluster_erp/modules/fleet/assets/routes.py:159 |
POST |
/api/v1/fleet/classes/ |
create_class |
fleet_asset_class.update |
FleetClassCreate |
none | FleetClassRead |
201 |
src/cluster_erp/modules/fleet/assets/routes.py:172 |
PUT |
/api/v1/fleet/classes/{class_id} |
update_class |
fleet_asset_class.update |
FleetClassUpdate |
none | FleetClassRead |
200 (default) | src/cluster_erp/modules/fleet/assets/routes.py:183 |
Meters and readings endpoints¶
Meters, meter kinds, readings, and reading actions.
| Method | Path | Handler | Permission | Request | Query | Response | Status | Source |
|---|---|---|---|---|---|---|---|---|
GET |
/api/v1/fleet/meters/ |
list_meters |
fleet_meter.read |
none | asset_id |
dict |
200 (default) | src/cluster_erp/modules/fleet/meters/routes.py:33 |
POST |
/api/v1/fleet/meters/ |
create_meter |
fleet_meter.update |
FleetMeterCreate |
none | dict |
201 |
src/cluster_erp/modules/fleet/meters/routes.py:43 |
GET |
/api/v1/fleet/meters/kinds |
list_meter_kinds |
fleet_meter.read |
none | none | dict |
200 (default) | src/cluster_erp/modules/fleet/meters/routes.py:61 |
GET |
/api/v1/fleet/meters/{meter_id} |
get_meter |
fleet_meter.read |
none | none | dict |
200 (default) | src/cluster_erp/modules/fleet/meters/routes.py:81 |
DELETE |
/api/v1/fleet/meters/{meter_id} |
deactivate_meter |
fleet_meter.delete |
none | none | dict |
200 (default) | src/cluster_erp/modules/fleet/meters/routes.py:93 |
GET |
/api/v1/fleet/readings/ |
list_readings |
fleet_meter_reading.read |
none | meter_id, asset_id, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/meters/routes.py:105 |
POST |
/api/v1/fleet/readings/ |
create_reading |
fleet_meter_reading.update |
FleetReadingCreate |
none | FleetReadingRead |
201 |
src/cluster_erp/modules/fleet/meters/routes.py:125 |
GET |
/api/v1/fleet/readings/{reading_id} |
get_reading |
fleet_meter_reading.read |
none | none | FleetReadingRead |
200 (default) | src/cluster_erp/modules/fleet/meters/routes.py:145 |
POST |
/api/v1/fleet/readings/{reading_id}/actions/{action} |
run_reading_action |
fleet_meter_reading.update |
none | none | FleetReadingRead |
200 (default) | src/cluster_erp/modules/fleet/meters/routes.py:157 |
Maintenance endpoints¶
Maintenance plans, reminders with actions, and a reminder recompute.
| Method | Path | Handler | Permission | Request | Query | Response | Status | Source |
|---|---|---|---|---|---|---|---|---|
GET |
/api/v1/fleet/maintenance/plans/ |
list_plans |
fleet_maintenance_plan.read |
none | none | dict |
200 (default) | src/cluster_erp/modules/fleet/maintenance/routes.py:31 |
POST |
/api/v1/fleet/maintenance/plans/ |
create_plan |
fleet_maintenance_plan.update |
PlanCreate |
none | dict |
201 |
src/cluster_erp/modules/fleet/maintenance/routes.py:40 |
GET |
/api/v1/fleet/maintenance/plans/{plan_id} |
get_plan |
fleet_maintenance_plan.read |
none | none | dict |
200 (default) | src/cluster_erp/modules/fleet/maintenance/routes.py:51 |
PUT |
/api/v1/fleet/maintenance/plans/{plan_id} |
update_plan |
fleet_maintenance_plan.update |
PlanUpdate |
none | dict |
200 (default) | src/cluster_erp/modules/fleet/maintenance/routes.py:63 |
DELETE |
/api/v1/fleet/maintenance/plans/{plan_id} |
deactivate_plan |
fleet_maintenance_plan.delete |
none | none | dict |
200 (default) | src/cluster_erp/modules/fleet/maintenance/routes.py:77 |
GET |
/api/v1/fleet/maintenance/reminders/ |
list_reminders |
fleet_maintenance_reminder.read |
none | asset_id, status, plan_id, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/maintenance/routes.py:89 |
GET |
/api/v1/fleet/maintenance/reminders/{reminder_id} |
get_reminder |
fleet_maintenance_reminder.read |
none | none | ReminderRead |
200 (default) | src/cluster_erp/modules/fleet/maintenance/routes.py:112 |
POST |
/api/v1/fleet/maintenance/reminders/{reminder_id}/actions/{action} |
run_reminder_action |
fleet_maintenance_reminder.update |
dict[str, Any] \| None |
none | ReminderRead |
200 (default) | src/cluster_erp/modules/fleet/maintenance/routes.py:124 |
POST |
/api/v1/fleet/maintenance/reminders/recompute |
recompute |
fleet_maintenance_reminder.update |
none | asset_id |
dict |
200 (default) | src/cluster_erp/modules/fleet/maintenance/routes.py:141 |
Fleet work orders endpoints¶
Work orders with actions, work order items, and parts with an issue action.
| Method | Path | Handler | Permission | Request | Query | Response | Status | Source |
|---|---|---|---|---|---|---|---|---|
GET |
/api/v1/fleet/work-orders/ |
list_work_orders |
fleet_work_order.read |
none | search, asset_id, status, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/workorders/routes.py:32 |
POST |
/api/v1/fleet/work-orders/ |
create_work_order |
fleet_work_order.create |
WorkOrderCreate |
none | WorkOrderRead |
201 |
src/cluster_erp/modules/fleet/workorders/routes.py:55 |
GET |
/api/v1/fleet/work-orders/{wo_id} |
get_work_order |
fleet_work_order.read |
none | none | WorkOrderRead |
200 (default) | src/cluster_erp/modules/fleet/workorders/routes.py:67 |
PUT |
/api/v1/fleet/work-orders/{wo_id} |
update_work_order |
fleet_work_order.update |
WorkOrderUpdate |
none | WorkOrderRead |
200 (default) | src/cluster_erp/modules/fleet/workorders/routes.py:79 |
POST |
/api/v1/fleet/work-orders/{wo_id}/actions/{action} |
run_work_order_action |
fleet_work_order.update |
dict[str, Any] \| None |
none | WorkOrderRead |
200 (default) | src/cluster_erp/modules/fleet/workorders/routes.py:94 |
DELETE |
/api/v1/fleet/work-orders/{wo_id} |
deactivate_work_order |
fleet_work_order.delete |
none | none | WorkOrderRead |
200 (default) | src/cluster_erp/modules/fleet/workorders/routes.py:109 |
GET |
/api/v1/fleet/work-order-items/ |
list_items |
fleet_work_order_item.read |
none | work_order_id |
dict |
200 (default) | src/cluster_erp/modules/fleet/workorders/routes.py:123 |
POST |
/api/v1/fleet/work-order-items/ |
add_item |
fleet_work_order_item.update |
WorkOrderItemCreate |
none | WorkOrderItemRead |
201 |
src/cluster_erp/modules/fleet/workorders/routes.py:136 |
PUT |
/api/v1/fleet/work-order-items/{item_id} |
update_item |
fleet_work_order_item.update |
WorkOrderItemUpdate |
none | WorkOrderItemRead |
200 (default) | src/cluster_erp/modules/fleet/workorders/routes.py:147 |
DELETE |
/api/v1/fleet/work-order-items/{item_id} |
remove_item |
fleet_work_order_item.update |
none | none | dict |
200 (default) | src/cluster_erp/modules/fleet/workorders/routes.py:161 |
GET |
/api/v1/fleet/work-order-parts/ |
list_parts |
fleet_work_order_part.read |
none | work_order_id |
dict |
200 (default) | src/cluster_erp/modules/fleet/workorders/routes.py:173 |
POST |
/api/v1/fleet/work-order-parts/ |
add_part |
fleet_work_order_part.update |
WorkOrderPartCreate |
none | WorkOrderPartRead |
201 |
src/cluster_erp/modules/fleet/workorders/routes.py:186 |
POST |
/api/v1/fleet/work-order-parts/{part_id}/actions/issue |
issue_part |
fleet_work_order_part.update |
none | none | WorkOrderPartRead |
200 (default) | src/cluster_erp/modules/fleet/workorders/routes.py:198 |
DELETE |
/api/v1/fleet/work-order-parts/{part_id} |
remove_part |
fleet_work_order_part.update |
none | none | dict |
200 (default) | src/cluster_erp/modules/fleet/workorders/routes.py:211 |
Operations endpoints¶
Six routers: assignments (with an as-of read), couplings, inspections, defects, reservations, and incidents, each with an actions endpoint.
| Method | Path | Handler | Permission | Request | Query | Response | Status | Source |
|---|---|---|---|---|---|---|---|---|
GET |
/api/v1/fleet/assignments/ |
list_assignments |
fleet_assignment.read |
none | asset_id, party_id, open_only, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:56 |
GET |
/api/v1/fleet/assignments/as-of |
assignments_as_of |
fleet_assignment.read |
none | asset_id, at |
dict |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:83 |
POST |
/api/v1/fleet/assignments/ |
create_assignment |
fleet_assignment.update |
AssignmentCreate |
none | AssignmentRead |
201 |
src/cluster_erp/modules/fleet/operations/routes.py:103 |
GET |
/api/v1/fleet/assignments/{assignment_id} |
get_assignment |
fleet_assignment.read |
none | none | AssignmentRead |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:115 |
POST |
/api/v1/fleet/assignments/{assignment_id}/actions/{action} |
run_assignment_action |
fleet_assignment.update |
dict[str, Any] \| None |
none | AssignmentRead |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:127 |
GET |
/api/v1/fleet/couplings/ |
list_couplings |
fleet_coupling.read |
none | asset_id, open_only, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:145 |
POST |
/api/v1/fleet/couplings/ |
create_coupling |
fleet_coupling.update |
CouplingCreate |
none | CouplingRead |
201 |
src/cluster_erp/modules/fleet/operations/routes.py:165 |
GET |
/api/v1/fleet/couplings/{coupling_id} |
get_coupling |
fleet_coupling.read |
none | none | CouplingRead |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:176 |
POST |
/api/v1/fleet/couplings/{coupling_id}/actions/{action} |
run_coupling_action |
fleet_coupling.update |
dict[str, Any] \| None |
none | CouplingRead |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:188 |
GET |
/api/v1/fleet/inspections/ |
list_inspections |
fleet_inspection.read |
none | asset_id, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:206 |
POST |
/api/v1/fleet/inspections/ |
create_inspection |
fleet_inspection.update |
InspectionCreate |
none | InspectionRead |
201 |
src/cluster_erp/modules/fleet/operations/routes.py:223 |
GET |
/api/v1/fleet/inspections/{inspection_id} |
get_inspection |
fleet_inspection.read |
none | none | InspectionRead |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:234 |
PUT |
/api/v1/fleet/inspections/{inspection_id} |
update_inspection |
fleet_inspection.update |
InspectionUpdate |
none | InspectionRead |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:246 |
POST |
/api/v1/fleet/inspections/{inspection_id}/actions/{action} |
run_inspection_action |
fleet_inspection.update |
none | none | InspectionRead |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:260 |
GET |
/api/v1/fleet/defects/ |
list_defects |
fleet_defect.read |
none | asset_id, status, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:276 |
POST |
/api/v1/fleet/defects/ |
create_defect |
fleet_defect.update |
DefectCreate |
none | DefectRead |
201 |
src/cluster_erp/modules/fleet/operations/routes.py:296 |
GET |
/api/v1/fleet/defects/{defect_id} |
get_defect |
fleet_defect.read |
none | none | DefectRead |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:305 |
POST |
/api/v1/fleet/defects/{defect_id}/actions/{action} |
run_defect_action |
fleet_defect.update |
dict[str, Any] \| None |
none | DefectRead |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:317 |
GET |
/api/v1/fleet/reservations/ |
list_reservations |
fleet_reservation.read |
none | asset_id, status, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:333 |
POST |
/api/v1/fleet/reservations/ |
create_reservation |
fleet_reservation.update |
ReservationCreate |
none | ReservationRead |
201 |
src/cluster_erp/modules/fleet/operations/routes.py:353 |
GET |
/api/v1/fleet/reservations/{reservation_id} |
get_reservation |
fleet_reservation.read |
none | none | ReservationRead |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:365 |
POST |
/api/v1/fleet/reservations/{reservation_id}/actions/{action} |
run_reservation_action |
fleet_reservation.update |
dict[str, Any] \| None |
none | ReservationRead |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:377 |
GET |
/api/v1/fleet/incidents/ |
list_incidents |
fleet_incident.read |
none | asset_id, status, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:394 |
POST |
/api/v1/fleet/incidents/ |
create_incident |
fleet_incident.update |
IncidentCreate |
none | IncidentRead |
201 |
src/cluster_erp/modules/fleet/operations/routes.py:414 |
GET |
/api/v1/fleet/incidents/{incident_id} |
get_incident |
fleet_incident.read |
none | none | IncidentRead |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:425 |
PUT |
/api/v1/fleet/incidents/{incident_id} |
update_incident |
fleet_incident.update |
IncidentUpdate |
none | IncidentRead |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:437 |
POST |
/api/v1/fleet/incidents/{incident_id}/actions/{action} |
run_incident_action |
fleet_incident.update |
none | none | IncidentRead |
200 (default) | src/cluster_erp/modules/fleet/operations/routes.py:449 |
Fuel and compliance endpoints¶
Four routers: fuel entries with an import, compliance items, penalties, and inspection periods.
| Method | Path | Handler | Permission | Request | Query | Response | Status | Source |
|---|---|---|---|---|---|---|---|---|
GET |
/api/v1/fleet/fuel/ |
list_fuel |
fleet_fuel_entry.read |
none | asset_id, match_status, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:46 |
POST |
/api/v1/fleet/fuel/ |
create_fuel |
fleet_fuel_entry.update |
FuelEntryCreate |
none | FuelEntryRead |
201 |
src/cluster_erp/modules/fleet/fuel/routes.py:68 |
POST |
/api/v1/fleet/fuel/import |
import_fuel |
fleet_fuel_entry.update |
FuelImportRequest |
none | dict |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:79 |
GET |
/api/v1/fleet/fuel/{entry_id} |
get_fuel |
fleet_fuel_entry.read |
none | none | FuelEntryRead |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:90 |
POST |
/api/v1/fleet/fuel/{entry_id}/actions/{action} |
run_fuel_action |
fleet_fuel_entry.update |
dict[str, Any] \| None |
none | FuelEntryRead |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:102 |
DELETE |
/api/v1/fleet/fuel/{entry_id} |
deactivate_fuel |
fleet_fuel_entry.delete |
none | none | FuelEntryRead |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:115 |
GET |
/api/v1/fleet/compliance/ |
list_compliance |
fleet_compliance_item.read |
none | asset_id, kind, status, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:129 |
POST |
/api/v1/fleet/compliance/ |
create_compliance |
fleet_compliance_item.update |
ComplianceCreate |
none | ComplianceRead |
201 |
src/cluster_erp/modules/fleet/fuel/routes.py:152 |
GET |
/api/v1/fleet/compliance/{item_id} |
get_compliance |
fleet_compliance_item.read |
none | none | ComplianceRead |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:163 |
PUT |
/api/v1/fleet/compliance/{item_id} |
update_compliance |
fleet_compliance_item.update |
ComplianceUpdate |
none | ComplianceRead |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:175 |
POST |
/api/v1/fleet/compliance/{item_id}/actions/{action} |
run_compliance_action |
fleet_compliance_item.update |
dict[str, Any] \| None |
none | ComplianceRead |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:189 |
DELETE |
/api/v1/fleet/compliance/{item_id} |
deactivate_compliance |
fleet_compliance_item.delete |
none | none | ComplianceRead |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:205 |
GET |
/api/v1/fleet/penalties/ |
list_penalties |
fleet_penalty.read |
none | asset_id, status, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:219 |
POST |
/api/v1/fleet/penalties/ |
create_penalty |
fleet_penalty.update |
PenaltyCreate |
none | PenaltyRead |
201 |
src/cluster_erp/modules/fleet/fuel/routes.py:241 |
GET |
/api/v1/fleet/penalties/{penalty_id} |
get_penalty |
fleet_penalty.read |
none | none | PenaltyRead |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:252 |
PUT |
/api/v1/fleet/penalties/{penalty_id} |
update_penalty |
fleet_penalty.update |
PenaltyUpdate |
none | PenaltyRead |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:264 |
POST |
/api/v1/fleet/penalties/{penalty_id}/actions/{action} |
run_penalty_action |
fleet_penalty.update |
none | none | PenaltyRead |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:278 |
DELETE |
/api/v1/fleet/penalties/{penalty_id} |
deactivate_penalty |
fleet_penalty.delete |
none | none | PenaltyRead |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:290 |
GET |
/api/v1/fleet/inspection-periods/ |
list_periods |
fleet_inspection_period.read |
none | none | dict |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:304 |
POST |
/api/v1/fleet/inspection-periods/ |
create_period |
fleet_inspection_period.update |
InspectionPeriodCreate |
none | InspectionPeriodRead |
201 |
src/cluster_erp/modules/fleet/fuel/routes.py:316 |
GET |
/api/v1/fleet/inspection-periods/{period_id} |
get_period |
fleet_inspection_period.read |
none | none | InspectionPeriodRead |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:327 |
PUT |
/api/v1/fleet/inspection-periods/{period_id} |
update_period |
fleet_inspection_period.update |
InspectionPeriodUpdate |
none | InspectionPeriodRead |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:339 |
DELETE |
/api/v1/fleet/inspection-periods/{period_id} |
deactivate_period |
fleet_inspection_period.delete |
none | none | InspectionPeriodRead |
200 (default) | src/cluster_erp/modules/fleet/fuel/routes.py:353 |
TCO, tyres, and campaigns endpoints¶
Five routers: asset TCO and renewal ranking, tyres, campaigns, campaign assets, and emission factors.
| Method | Path | Handler | Permission | Request | Query | Response | Status | Source |
|---|---|---|---|---|---|---|---|---|
GET |
/api/v1/fleet/tco/assets/{asset_id} |
asset_tco |
fleet_asset.read |
none | months |
dict |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:48 |
GET |
/api/v1/fleet/tco/renewal |
renewal_ranking |
fleet_asset.read |
none | months |
dict |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:59 |
GET |
/api/v1/fleet/tires/ |
list_tires |
fleet_tire.read |
none | asset_id, status, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:72 |
POST |
/api/v1/fleet/tires/ |
create_tire |
fleet_tire.update |
TireCreate |
none | TireRead |
201 |
src/cluster_erp/modules/fleet/tco/routes.py:94 |
GET |
/api/v1/fleet/tires/{tire_id} |
get_tire |
fleet_tire.read |
none | none | TireRead |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:105 |
PUT |
/api/v1/fleet/tires/{tire_id} |
update_tire |
fleet_tire.update |
TireUpdate |
none | TireRead |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:117 |
POST |
/api/v1/fleet/tires/{tire_id}/actions/{action} |
run_tire_action |
fleet_tire.update |
dict[str, Any] \| None |
none | TireRead |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:131 |
DELETE |
/api/v1/fleet/tires/{tire_id} |
deactivate_tire |
fleet_tire.delete |
none | none | TireRead |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:145 |
GET |
/api/v1/fleet/campaigns/ |
list_campaigns |
fleet_campaign.read |
none | status, search, limit, offset |
dict |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:157 |
POST |
/api/v1/fleet/campaigns/ |
create_campaign |
fleet_campaign.update |
CampaignCreate |
none | CampaignRead |
201 |
src/cluster_erp/modules/fleet/tco/routes.py:179 |
GET |
/api/v1/fleet/campaigns/{campaign_id} |
get_campaign |
fleet_campaign.read |
none | none | CampaignRead |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:190 |
PUT |
/api/v1/fleet/campaigns/{campaign_id} |
update_campaign |
fleet_campaign.update |
CampaignUpdate |
none | CampaignRead |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:202 |
POST |
/api/v1/fleet/campaigns/{campaign_id}/actions/{action} |
run_campaign_action |
fleet_campaign.update |
none | none | CampaignRead |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:216 |
DELETE |
/api/v1/fleet/campaigns/{campaign_id} |
deactivate_campaign |
fleet_campaign.delete |
none | none | CampaignRead |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:228 |
GET |
/api/v1/fleet/campaign-assets/ |
list_campaign_assets |
fleet_campaign_asset.read |
none | campaign_id |
dict |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:242 |
POST |
/api/v1/fleet/campaign-assets/ |
add_campaign_asset |
fleet_campaign_asset.update |
CampaignAssetCreate |
none | CampaignAssetRead |
201 |
src/cluster_erp/modules/fleet/tco/routes.py:255 |
POST |
/api/v1/fleet/campaign-assets/{item_id}/actions/{action} |
run_campaign_asset_action |
fleet_campaign_asset.update |
none | none | CampaignAssetRead |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:266 |
DELETE |
/api/v1/fleet/campaign-assets/{item_id} |
remove_campaign_asset |
fleet_campaign_asset.update |
none | none | dict |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:280 |
GET |
/api/v1/fleet/emission-factors/ |
list_factors |
fleet_emission_factor.read |
none | none | dict |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:292 |
POST |
/api/v1/fleet/emission-factors/ |
create_factor |
fleet_emission_factor.update |
EmissionFactorCreate |
none | EmissionFactorRead |
201 |
src/cluster_erp/modules/fleet/tco/routes.py:304 |
GET |
/api/v1/fleet/emission-factors/{factor_id} |
get_factor |
fleet_emission_factor.read |
none | none | EmissionFactorRead |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:315 |
PUT |
/api/v1/fleet/emission-factors/{factor_id} |
update_factor |
fleet_emission_factor.update |
EmissionFactorUpdate |
none | EmissionFactorRead |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:327 |
DELETE |
/api/v1/fleet/emission-factors/{factor_id} |
deactivate_factor |
fleet_emission_factor.delete |
none | none | EmissionFactorRead |
200 (default) | src/cluster_erp/modules/fleet/tco/routes.py:341 |
Telematics endpoints¶
One ingest route for a telematics feed, defined in src/cluster_erp/modules/fleet/telematics.py.
| Method | Path | Handler | Permission | Request | Query | Response | Status | Source |
|---|---|---|---|---|---|---|---|---|
POST |
/api/v1/fleet/telematics/feed |
ingest_feed |
fleet_asset.update |
TelematicsFeed |
none | dict |
200 (default) | src/cluster_erp/modules/fleet/telematics.py:52 |
Error codes¶
The table lists the error codes that code under src/cluster_erp/modules/fleet/ raises, found by a syntax-tree scan for AppError(...), the factories in src/cluster_erp/core/errors.py (not_found, conflict, protected, permission_denied, privilege_escalation, check_version), and HTTPException(...). A status of 400 is the AppError default (src/cluster_erp/core/errors.py:23). Guard errors (401, 403), the entitlement codes, and validation errors (422) apply to every route and are listed on Errors.
| Code | HTTP status | Raised in | First site |
|---|---|---|---|
FLEET_ASSET_NOT_OPERABLE |
400 |
meters |
src/cluster_erp/modules/fleet/meters/services.py:260 |
FLEET_INVALID_CAMPAIGN |
400 |
tco |
src/cluster_erp/modules/fleet/tco/services.py:606 |
FLEET_INVALID_COMPLIANCE |
400 |
fuel |
src/cluster_erp/modules/fleet/fuel/services.py:466 |
FLEET_INVALID_FUEL |
400 |
fuel |
src/cluster_erp/modules/fleet/fuel/services.py:130 |
FLEET_INVALID_METER |
400 |
meters |
src/cluster_erp/modules/fleet/meters/services.py:125 |
FLEET_INVALID_OPERATION |
400 |
operations |
src/cluster_erp/modules/fleet/operations/services.py:74 |
FLEET_INVALID_PLAN |
400 |
maintenance |
src/cluster_erp/modules/fleet/maintenance/services.py:102 |
FLEET_INVALID_REMINDER |
400 |
maintenance |
src/cluster_erp/modules/fleet/maintenance/services.py:343 |
FLEET_INVALID_STATUS |
400 |
assets |
src/cluster_erp/modules/fleet/assets/services.py:283 |
FLEET_INVALID_TIRE |
400 |
tco |
src/cluster_erp/modules/fleet/tco/services.py:428 |
FLEET_INVALID_WO |
400 |
workorders |
src/cluster_erp/modules/fleet/workorders/services.py:125 |
FLEET_READING_CHAIN_BLOCKED |
400 |
meters |
src/cluster_erp/modules/fleet/meters/services.py:524 |
FLEET_READING_INVALID |
400 |
meters |
src/cluster_erp/modules/fleet/meters/services.py:266 |
FLEET_READING_OUT_OF_ORDER |
400 |
meters |
src/cluster_erp/modules/fleet/meters/services.py:280 |
RESOURCE_CONFLICT |
409 |
assets, tco |
src/cluster_erp/modules/fleet/assets/services.py:76 |
RESOURCE_NOT_FOUND |
404 |
assets, fuel, maintenance, meters, operations, tco, workorders |
src/cluster_erp/modules/fleet/assets/routes.py:106 |
VALIDATION_ERROR |
422 |
operations |
src/cluster_erp/modules/fleet/operations/routes.py:94 |
Events emitted¶
The table lists the contract classes that code under src/cluster_erp/modules/fleet/ passes directly to EventBus.emit, found by a syntax-tree scan. Events built in a variable first are not counted. The contracts are described in Contracts reference.
None found by the scan.
Related pages¶
Verified against commit 92f8051 on 2026-11-13.