Factorizer/Cluster ERP WikiCluster ERP Türkçe
Home / API reference

API

Fleet API (fleet)

HTTP endpoints of the fleet module under /api/v1/fleet: 116 routes with permissions, schemas, status codes, and error codes.

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.


Verified against commit 92f8051 on 2026-11-13.

Verified against commit 92f8051 · 2026-11-13