openapi: 3.1.0 info: title: Fleet Ops API version: 0.1.0 description: Generated contract for Fleet Ops. The visible product name is Fleet Ops; MobilityOps remains the technical repository and service identifier. paths: /health: get: summary: Health operationId: health_health_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: type: string type: object title: Response Health Health Get /health/live: get: summary: Liveness description: Process liveness only; external dependencies deliberately do not affect it. operationId: liveness_health_live_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: type: string type: object title: Response Liveness Health Live Get /health/ready: get: summary: Readiness description: 'Traffic readiness: the API is useful only while its canonical database responds.' operationId: readiness_health_ready_get responses: '200': description: Successful Response content: application/json: schema: {} /api/v1/system/status: get: summary: System Status operationId: system_status_api_v1_system_status_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response System Status Api V1 System Status Get /api/v1/demo/manifest: get: tags: - demo summary: Demo Manifest operationId: demo_manifest_api_v1_demo_manifest_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DemoManifestOut' /api/v1/demo/login: post: tags: - demo summary: Demo Login operationId: demo_login_api_v1_demo_login_post requestBody: content: application/json: schema: $ref: '#/components/schemas/DemoLoginRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CurrentUser' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/demo/session: get: tags: - demo summary: Get Session operationId: get_session_api_v1_demo_session_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CurrentUser' /api/v1/demo/logout: post: tags: - demo summary: Demo Logout operationId: demo_logout_api_v1_demo_logout_post responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Demo Logout Api V1 Demo Logout Post /api/v1/demo/reset: post: tags: - demo summary: Demo Reset operationId: demo_reset_api_v1_demo_reset_post responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Demo Reset Api V1 Demo Reset Post /api/v1/auth/login: post: tags: - auth summary: Password Login operationId: password_login_api_v1_auth_login_post requestBody: content: application/json: schema: $ref: '#/components/schemas/PasswordLoginRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CurrentUser' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/auth/session: get: tags: - auth summary: Get Session operationId: get_session_api_v1_auth_session_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CurrentUser' /api/v1/auth/logout: post: tags: - auth summary: Logout operationId: logout_api_v1_auth_logout_post responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Logout Api V1 Auth Logout Post /api/v1/dashboard: get: tags: - dashboard summary: Get Dashboard operationId: get_dashboard_api_v1_dashboard_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DashboardOut' /api/v1/vehicles: get: tags: - vehicles summary: List Vehicles operationId: list_vehicles_api_v1_vehicles_get parameters: - name: status in: query required: false schema: anyOf: - type: string - type: 'null' title: Status - name: attention_only in: query required: false schema: type: boolean default: false title: Attention Only - name: location in: query required: false schema: anyOf: - type: string minLength: 1 maxLength: 120 - type: 'null' title: Location - name: query in: query required: false schema: anyOf: - type: string minLength: 1 maxLength: 100 - type: 'null' title: Query - name: page in: query required: false schema: anyOf: - type: integer minimum: 1 - type: 'null' title: Page - name: page_size in: query required: false schema: type: integer maximum: 25 minimum: 1 default: 25 title: Page Size responses: '200': description: Successful Response content: application/json: schema: anyOf: - type: array items: $ref: '#/components/schemas/VehicleOut' - $ref: '#/components/schemas/VehiclePageOut' title: Response List Vehicles Api V1 Vehicles Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/vehicles/{public_ref}: get: tags: - vehicles summary: Get Vehicle operationId: get_vehicle_api_v1_vehicles__public_ref__get parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/VehicleDetailOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/vehicles/{public_ref}/maintenance: post: tags: - vehicles summary: Create Maintenance Record operationId: create_maintenance_record_api_v1_vehicles__public_ref__maintenance_post parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateMaintenanceRequest' responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/MaintenanceOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/vehicles/{public_ref}/release: post: tags: - vehicles summary: Release Vehicle operationId: release_vehicle_api_v1_vehicles__public_ref__release_post parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ReleaseVehicleRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/VehicleOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/bookings: get: tags: - bookings summary: List Bookings operationId: list_bookings_api_v1_bookings_get parameters: - name: status in: query required: false schema: anyOf: - type: string - type: 'null' title: Status - name: vehicle_ref in: query required: false schema: anyOf: - type: string - type: 'null' title: Vehicle Ref - name: query in: query required: false schema: anyOf: - type: string minLength: 1 maxLength: 100 - type: 'null' title: Query - name: starts_from in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Starts From - name: starts_to in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Starts To - name: location in: query required: false schema: anyOf: - type: string minLength: 1 maxLength: 120 - type: 'null' title: Location - name: sort in: query required: false schema: enum: - operational - starts_asc - starts_desc type: string default: operational title: Sort - name: page in: query required: false schema: anyOf: - type: integer minimum: 1 - type: 'null' title: Page - name: page_size in: query required: false schema: type: integer maximum: 25 minimum: 1 default: 25 title: Page Size responses: '200': description: Successful Response content: application/json: schema: anyOf: - type: array items: $ref: '#/components/schemas/BookingOut' - $ref: '#/components/schemas/BookingPageOut' title: Response List Bookings Api V1 Bookings Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - bookings summary: Create Booking operationId: create_booking_api_v1_bookings_post requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateBookingRequest' responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/BookingOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/bookings/{public_ref}/checkout: post: tags: - bookings summary: Checkout Booking operationId: checkout_booking_api_v1_bookings__public_ref__checkout_post parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CheckoutBookingRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CheckoutBookingResult' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/bookings/availability: get: tags: - bookings summary: List Available Vehicles operationId: list_available_vehicles_api_v1_bookings_availability_get parameters: - name: starts_at in: query required: true schema: type: string format: date-time title: Starts At - name: ends_at in: query required: true schema: type: string format: date-time title: Ends At - name: query in: query required: false schema: anyOf: - type: string maxLength: 100 - type: 'null' title: Query - name: limit in: query required: false schema: type: integer maximum: 50 minimum: 1 default: 25 title: Limit responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/AvailableVehicleOut' title: Response List Available Vehicles Api V1 Bookings Availability Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/bookings/{public_ref}: get: tags: - bookings summary: Get Booking operationId: get_booking_api_v1_bookings__public_ref__get parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/BookingOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/bookings/{public_ref}/cancel: post: tags: - bookings summary: Cancel Booking operationId: cancel_booking_api_v1_bookings__public_ref__cancel_post parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CancelBookingRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/BookingOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/bookings/{public_ref}/return-preview: post: tags: - bookings summary: Preview Return operationId: preview_return_api_v1_bookings__public_ref__return_preview_post parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RegisterReturnRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ReturnPreviewResult' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/bookings/{public_ref}/return: post: tags: - bookings summary: Register Return operationId: register_return_api_v1_bookings__public_ref__return_post parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref - name: Idempotency-Key in: header required: true schema: type: string minLength: 8 maxLength: 128 title: Idempotency-Key requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RegisterReturnRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/RegisterReturnResult' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/customers: get: tags: - customers summary: Search Customers operationId: search_customers_api_v1_customers_get parameters: - name: query in: query required: true schema: type: string minLength: 2 maxLength: 100 title: Query - name: limit in: query required: false schema: type: integer maximum: 50 minimum: 1 default: 20 title: Limit responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/CustomerOptionOut' title: Response Search Customers Api V1 Customers Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/audit: get: tags: - audit summary: List Audit Events operationId: list_audit_events_api_v1_audit_get parameters: - name: actor_label in: query required: false schema: anyOf: - type: string - type: 'null' title: Actor Label - name: action in: query required: false schema: anyOf: - type: string - type: 'null' title: Action - name: entity_type in: query required: false schema: anyOf: - type: string - type: 'null' title: Entity Type - name: entity_ref in: query required: false schema: anyOf: - type: string minLength: 1 maxLength: 100 - type: 'null' title: Entity Ref - name: correlation_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Correlation Id - name: occurred_from in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Occurred From - name: occurred_to in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Occurred To - name: page in: query required: false schema: anyOf: - type: integer minimum: 1 - type: 'null' title: Page - name: page_size in: query required: false schema: type: integer maximum: 25 minimum: 1 default: 25 title: Page Size responses: '200': description: Successful Response content: application/json: schema: anyOf: - type: array items: $ref: '#/components/schemas/AuditEventOut' - $ref: '#/components/schemas/AuditEventPageOut' title: Response List Audit Events Api V1 Audit Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/data-quality/issues: get: tags: - data-quality summary: List Issues operationId: list_issues_api_v1_data_quality_issues_get parameters: - name: status in: query required: false schema: anyOf: - type: string - type: 'null' title: Status - name: rule_type in: query required: false schema: anyOf: - type: string - type: 'null' title: Rule Type - name: severity in: query required: false schema: anyOf: - type: string - type: 'null' title: Severity - name: assigned_to_ref in: query required: false schema: anyOf: - type: string - type: 'null' title: Assigned To Ref - name: overdue in: query required: false schema: anyOf: - type: boolean - type: 'null' title: Overdue - name: page in: query required: false schema: anyOf: - type: integer minimum: 1 - type: 'null' title: Page - name: page_size in: query required: false schema: type: integer maximum: 25 minimum: 1 default: 25 title: Page Size responses: '200': description: Successful Response content: application/json: schema: anyOf: - type: array items: $ref: '#/components/schemas/DataQualityIssueOut' - $ref: '#/components/schemas/DataQualityIssuePageOut' title: Response List Issues Api V1 Data Quality Issues Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/data-quality/issues/bulk-work: post: tags: - data-quality summary: Update Issue Work Queue operationId: update_issue_work_queue_api_v1_data_quality_issues_bulk_work_post requestBody: content: application/json: schema: $ref: '#/components/schemas/BulkDataQualityWorkRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/BulkDataQualityWorkResult' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/data-quality/issues/{public_ref}: get: tags: - data-quality summary: Get Issue operationId: get_issue_api_v1_data_quality_issues__public_ref__get parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataQualityIssueDetailOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/data-quality/issues/{public_ref}/defer: post: tags: - data-quality summary: Defer operationId: defer_api_v1_data_quality_issues__public_ref__defer_post parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataQualityIssueOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/data-quality/issues/{public_ref}/reject: post: tags: - data-quality summary: Reject operationId: reject_api_v1_data_quality_issues__public_ref__reject_post parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataQualityIssueOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/data-quality/issues/{public_ref}/merge-customers: post: tags: - data-quality summary: Merge operationId: merge_api_v1_data_quality_issues__public_ref__merge_customers_post parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MergeCustomersRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/MergeCustomersResult' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/data-quality/issues/{public_ref}/provide-fields: post: tags: - data-quality summary: Provide Fields operationId: provide_fields_api_v1_data_quality_issues__public_ref__provide_fields_post parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProvideFieldsRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataQualityIssueOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/data-quality/issues/{public_ref}/resolve-odometer-regression: post: tags: - data-quality summary: Resolve Odometer operationId: resolve_odometer_api_v1_data_quality_issues__public_ref__resolve_odometer_regression_post parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ResolveOdometerRegressionRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataQualityIssueOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/data-quality/issues/{public_ref}/resolve-overlap: post: tags: - data-quality summary: Resolve Overlap operationId: resolve_overlap_api_v1_data_quality_issues__public_ref__resolve_overlap_post parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ResolveOverlapRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DataQualityIssueOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/data-quality/issues/{public_ref}/status-recommendation: post: tags: - data-quality summary: Status Recommendation description: 'Non-mutating preview: computes the recommendation without changing anything, resolving no issue and writing no audit event. Safe to call repeatedly.' operationId: status_recommendation_api_v1_data_quality_issues__public_ref__status_recommendation_post parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/StatusRecommendationOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/data-quality/issues/{public_ref}/apply-recommended-status: post: tags: - data-quality summary: Apply Status operationId: apply_status_api_v1_data_quality_issues__public_ref__apply_recommended_status_post parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ApplyRecommendedStatusRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ApplyRecommendedStatusResult' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/data-quality/scan: post: tags: - data-quality summary: Scan operationId: scan_api_v1_data_quality_scan_post responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ScanResultOut' /api/v1/workflows: get: tags: - workflows summary: List Workflows operationId: list_workflows_api_v1_workflows_get parameters: - name: status in: query required: false schema: anyOf: - type: string - type: 'null' title: Status responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/AutomationRunOut' title: Response List Workflows Api V1 Workflows Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/workflows/{event_id}/retry: post: tags: - workflows summary: Retry Workflow operationId: retry_workflow_api_v1_workflows__event_id__retry_post parameters: - name: event_id in: path required: true schema: type: string title: Event Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AutomationRunOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/integrations/n8n/heartbeat: post: tags: - integrations summary: Workflow Heartbeat description: Authenticated, idempotent execution evidence from a canonical n8n workflow. operationId: workflow_heartbeat_api_v1_integrations_n8n_heartbeat_post parameters: - name: X-Service-Token in: header required: true schema: type: string title: X-Service-Token requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/N8nHeartbeatIn' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/N8nHeartbeatResult' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/integrations/n8n/return-callback: post: tags: - integrations summary: Return Callback operationId: return_callback_api_v1_integrations_n8n_return_callback_post parameters: - name: Idempotency-Key in: header required: true schema: type: string title: Idempotency-Key - name: X-Service-Token in: header required: true schema: type: string title: X-Service-Token requestBody: required: true content: application/json: schema: type: object additionalProperties: true title: Body responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Return Callback Api V1 Integrations N8N Return Callback Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/integrations/n8n/scheduled-scan: post: tags: - integrations summary: Scheduled Scan description: 'Triggered by the scheduled n8n quality-scan workflow. Narrow, read-mostly, and safe to call repeatedly: run_scan() only ever creates an issue for a condition that doesn''t already have one open, so a duplicate or overlapping trigger does no duplicate domain work -- it just reports zero new issues for anything already known.' operationId: scheduled_scan_api_v1_integrations_n8n_scheduled_scan_post parameters: - name: X-Service-Token in: header required: true schema: type: string title: X-Service-Token responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ScanResultOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/integrations/n8n/workflow-error: post: tags: - integrations summary: Workflow Error description: 'Receives a bounded, secret-free failure report from the central n8n "Fleet Ops -- Workflow Error Handler" workflow, which is attached as the Error Workflow on every other Fleet Ops n8n workflow. Idempotent on execution_id: n8n may redeliver the same error report (e.g. after a timed-out response), so this must not double-record.' operationId: workflow_error_api_v1_integrations_n8n_workflow_error_post parameters: - name: X-Service-Token in: header required: true schema: type: string title: X-Service-Token requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WorkflowErrorReportIn' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/WorkflowErrorReportResult' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/integrations/n8n/procedures: get: tags: - integrations summary: List Procedures description: 'Read-only source list for the RAGcore Procedure Sync workflow: every procedure Markdown file Fleet Ops ships, across every supported language, with a stable per-document id (source_id) and a content hash so the caller can detect changes without re-fetching content it already has.' operationId: list_procedures_api_v1_integrations_n8n_procedures_get parameters: - name: X-Service-Token in: header required: true schema: type: string title: X-Service-Token responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProcedureListOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/integrations/n8n/procedures-sync-result: post: tags: - integrations summary: Procedures Sync Result description: 'Receives a summary (counts only, no document content) from the n8n "Fleet Ops -- RAGcore Procedure Sync" workflow once it finishes uploading procedures to RAGcore. Idempotent on execution_id, matching the workflow-error and return-callback pattern.' operationId: procedures_sync_result_api_v1_integrations_n8n_procedures_sync_result_post parameters: - name: X-Service-Token in: header required: true schema: type: string title: X-Service-Token requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProcedureSyncResultIn' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProcedureSyncResultResult' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/knowledge/questions: post: tags: - knowledge summary: Ask Question operationId: ask_question_api_v1_knowledge_questions_post requestBody: content: application/json: schema: $ref: '#/components/schemas/AskQuestionRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/GroundedAnswer' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/knowledge/feedback: post: tags: - knowledge summary: Record Feedback operationId: record_feedback_api_v1_knowledge_feedback_post requestBody: content: application/json: schema: $ref: '#/components/schemas/KnowledgeFeedbackRequest' required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: type: string type: object title: Response Record Feedback Api V1 Knowledge Feedback Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/knowledge/status: get: tags: - knowledge summary: Knowledge Status operationId: knowledge_status_api_v1_knowledge_status_get parameters: - name: language in: query required: false schema: enum: - nl-BE - en-GB - fr-BE type: string default: en-GB title: Language responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/KnowledgeHealth' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/integrations/mcp/operations-summary: get: tags: - mcp summary: Operations Summary operationId: operations_summary_api_v1_integrations_mcp_operations_summary_get parameters: - name: X-Service-Token in: header required: true schema: type: string title: X-Service-Token - name: X-Client-Id in: header required: true schema: type: string minLength: 1 maxLength: 180 title: X-Client-Id - name: X-Tenant-Id in: header required: false schema: anyOf: - type: string maxLength: 120 - type: 'null' title: X-Tenant-Id - name: X-Correlation-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Correlation-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/OperationsSummaryOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/integrations/mcp/attention-vehicles: get: tags: - mcp summary: Attention Vehicles operationId: attention_vehicles_api_v1_integrations_mcp_attention_vehicles_get parameters: - name: minimum_severity in: query required: false schema: type: string pattern: ^(low|medium|high)$ default: medium title: Minimum Severity - name: date in: query required: false schema: anyOf: - type: string format: date - type: 'null' title: Date - name: limit in: query required: false schema: type: integer maximum: 50 minimum: 1 default: 20 title: Limit - name: X-Service-Token in: header required: true schema: type: string title: X-Service-Token - name: X-Client-Id in: header required: true schema: type: string minLength: 1 maxLength: 180 title: X-Client-Id - name: X-Tenant-Id in: header required: false schema: anyOf: - type: string maxLength: 120 - type: 'null' title: X-Tenant-Id - name: X-Correlation-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Correlation-Id responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/AttentionVehicleOut' title: Response Attention Vehicles Api V1 Integrations Mcp Attention Vehicles Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/integrations/mcp/vehicles/{vehicle_ref}: get: tags: - mcp summary: Vehicle Details operationId: vehicle_details_api_v1_integrations_mcp_vehicles__vehicle_ref__get parameters: - name: vehicle_ref in: path required: true schema: type: string title: Vehicle Ref - name: X-Service-Token in: header required: true schema: type: string title: X-Service-Token - name: X-Client-Id in: header required: true schema: type: string minLength: 1 maxLength: 180 title: X-Client-Id - name: X-Tenant-Id in: header required: false schema: anyOf: - type: string maxLength: 120 - type: 'null' title: X-Tenant-Id - name: X-Correlation-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Correlation-Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/McpVehicleDetailOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/integrations/mcp/search-knowledge: post: tags: - mcp summary: Search Knowledge operationId: search_knowledge_api_v1_integrations_mcp_search_knowledge_post parameters: - name: X-Service-Token in: header required: true schema: type: string title: X-Service-Token - name: X-Client-Id in: header required: true schema: type: string minLength: 1 maxLength: 180 title: X-Client-Id - name: X-Tenant-Id in: header required: false schema: anyOf: - type: string maxLength: 120 - type: 'null' title: X-Tenant-Id - name: X-Correlation-Id in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Correlation-Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/McpKnowledgeSearchRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/GroundedAnswer' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/search: get: tags: - search summary: Search operationId: search_api_v1_search_get parameters: - name: q in: query required: true schema: type: string minLength: 1 maxLength: 100 title: Q responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/SearchResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/integrations/status: get: tags: - integrations summary: Integration Status operationId: integration_status_api_v1_integrations_status_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/IntegrationStatusOut' /api/v1/users: get: tags: - users summary: List Users operationId: list_users_api_v1_users_get responses: '200': description: Successful Response content: application/json: schema: items: $ref: '#/components/schemas/UserOut' type: array title: Response List Users Api V1 Users Get post: tags: - users summary: Create User operationId: create_user_api_v1_users_post requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateUserRequest' required: true responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/users/{public_ref}: patch: tags: - users summary: Update User operationId: update_user_api_v1_users__public_ref__patch parameters: - name: public_ref in: path required: true schema: type: string title: Public Ref requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateUserRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' components: schemas: ApplyRecommendedStatusRequest: properties: recommendation_token: type: string title: Recommendation Token type: object required: - recommendation_token title: ApplyRecommendedStatusRequest ApplyRecommendedStatusResult: properties: issue: $ref: '#/components/schemas/DataQualityIssueOut' applied_status: type: string title: Applied Status reason_code: type: string title: Reason Code type: object required: - issue - applied_status - reason_code title: ApplyRecommendedStatusResult AskQuestionRequest: properties: question: type: string maxLength: 1000 minLength: 3 title: Question language: type: string enum: - nl-BE - en-GB - fr-BE title: Language default: en-GB type: object required: - question title: AskQuestionRequest AttentionItem: properties: kind: type: string enum: - quality_issue - vehicle title: Kind severity: type: string title: Severity rule_type: type: string title: Rule Type evidence_signals: items: $ref: '#/components/schemas/EvidenceSignalOut' type: array title: Evidence Signals link_type: type: string enum: - vehicle - booking - customer title: Link Type link_ref: type: string title: Link Ref issue_ref: anyOf: - type: string - type: 'null' title: Issue Ref type: object required: - kind - severity - rule_type - link_type - link_ref title: AttentionItem AttentionVehicleOut: properties: vehicle_ref: type: string title: Vehicle Ref severity: type: string enum: - low - medium - high title: Severity rule_type: type: string title: Rule Type summary: type: string title: Summary detected_at: type: string format: date-time title: Detected At type: object required: - vehicle_ref - severity - rule_type - summary - detected_at title: AttentionVehicleOut AuditEventOut: properties: id: type: string title: Id actor_type: type: string title: Actor Type actor_label: type: string title: Actor Label action: type: string title: Action entity_type: type: string title: Entity Type entity_id: anyOf: - type: string - type: 'null' title: Entity Id entity_ref: anyOf: - type: string - type: 'null' title: Entity Ref entity_link: anyOf: - type: string - type: 'null' title: Entity Link correlation_id: type: string title: Correlation Id occurred_at: type: string format: date-time title: Occurred At before: anyOf: - additionalProperties: true type: object - type: 'null' title: Before after: anyOf: - additionalProperties: true type: object - type: 'null' title: After metadata: anyOf: - additionalProperties: true type: object - type: 'null' title: Metadata type: object required: - id - actor_type - actor_label - action - entity_type - entity_id - correlation_id - occurred_at title: AuditEventOut AuditEventPageOut: properties: items: items: $ref: '#/components/schemas/AuditEventOut' type: array title: Items page: type: integer title: Page page_size: type: integer title: Page Size total: type: integer title: Total total_pages: type: integer title: Total Pages type: object required: - items - page - page_size - total - total_pages title: AuditEventPageOut AutomationRunOut: properties: event_id: type: string title: Event Id event_type: type: string title: Event Type aggregate_ref: type: string title: Aggregate Ref status: type: string title: Status attempts: type: integer title: Attempts last_error: anyOf: - type: string - type: 'null' title: Last Error last_error_code: anyOf: - type: string - type: 'null' title: Last Error Code is_demo_scenario: type: boolean title: Is Demo Scenario default: false occurred_at: type: string format: date-time title: Occurred At type: object required: - event_id - event_type - aggregate_ref - status - attempts - last_error - last_error_code - occurred_at title: AutomationRunOut AvailableVehicleOut: properties: public_ref: type: string title: Public Ref make: type: string title: Make model: type: string title: Model registration_number: type: string title: Registration Number location: type: string title: Location operational_status: type: string title: Operational Status type: object required: - public_ref - make - model - registration_number - location - operational_status title: AvailableVehicleOut BookingOut: properties: public_ref: type: string title: Public Ref customer_ref: type: string title: Customer Ref vehicle_ref: type: string title: Vehicle Ref starts_at: type: string format: date-time title: Starts At ends_at: type: string format: date-time title: Ends At status: type: string title: Status start_odometer_km: anyOf: - type: integer - type: 'null' title: Start Odometer Km end_odometer_km: anyOf: - type: integer - type: 'null' title: End Odometer Km requirements_complete: type: boolean title: Requirements Complete customer_name: type: string title: Customer Name type: object required: - public_ref - customer_ref - vehicle_ref - starts_at - ends_at - status - start_odometer_km - end_odometer_km - requirements_complete - customer_name title: BookingOut BookingPageOut: properties: items: items: $ref: '#/components/schemas/BookingOut' type: array title: Items page: type: integer title: Page page_size: type: integer title: Page Size total: type: integer title: Total total_pages: type: integer title: Total Pages type: object required: - items - page - page_size - total - total_pages title: BookingPageOut BookingSummaryOut: properties: public_ref: type: string title: Public Ref customer_ref: type: string title: Customer Ref vehicle_ref: type: string title: Vehicle Ref starts_at: type: string format: date-time title: Starts At ends_at: type: string format: date-time title: Ends At status: type: string title: Status type: object required: - public_ref - customer_ref - vehicle_ref - starts_at - ends_at - status title: BookingSummaryOut BulkDataQualityWorkRequest: properties: issue_refs: items: type: string type: array maxItems: 25 minItems: 1 title: Issue Refs assigned_to_ref: anyOf: - type: string maxLength: 20 minLength: 3 - type: 'null' title: Assigned To Ref clear_assignment: type: boolean title: Clear Assignment default: false due_at: anyOf: - type: string format: date-time - type: 'null' title: Due At clear_due_at: type: boolean title: Clear Due At default: false type: object required: - issue_refs title: BulkDataQualityWorkRequest BulkDataQualityWorkResult: properties: updated: items: $ref: '#/components/schemas/DataQualityIssueOut' type: array title: Updated type: object required: - updated title: BulkDataQualityWorkResult CancelBookingRequest: properties: reason: type: string maxLength: 500 minLength: 3 title: Reason type: object required: - reason title: CancelBookingRequest CheckoutBookingRequest: properties: start_odometer_km: type: integer minimum: 0.0 title: Start Odometer Km fuel_level_percent: type: integer maximum: 100.0 minimum: 0.0 title: Fuel Level Percent cleanliness_ok: type: boolean title: Cleanliness Ok damage_reported: type: boolean title: Damage Reported default: false technical_warning: type: boolean title: Technical Warning default: false notes: anyOf: - type: string maxLength: 2000 - type: 'null' title: Notes type: object required: - start_odometer_km - fuel_level_percent - cleanliness_ok title: CheckoutBookingRequest CheckoutBookingResult: properties: booking_ref: type: string title: Booking Ref vehicle_ref: type: string title: Vehicle Ref inspection_ref: type: string title: Inspection Ref booking_status: type: string title: Booking Status resulting_vehicle_status: type: string title: Resulting Vehicle Status activated: type: boolean title: Activated attention_reasons: items: type: string type: array title: Attention Reasons type: object required: - booking_ref - vehicle_ref - inspection_ref - booking_status - resulting_vehicle_status - activated - attention_reasons title: CheckoutBookingResult CreateBookingRequest: properties: customer_ref: type: string maxLength: 20 minLength: 3 title: Customer Ref vehicle_ref: type: string maxLength: 20 minLength: 3 title: Vehicle Ref starts_at: type: string format: date-time title: Starts At ends_at: type: string format: date-time title: Ends At requirements_complete: type: boolean title: Requirements Complete default: true type: object required: - customer_ref - vehicle_ref - starts_at - ends_at title: CreateBookingRequest CreateMaintenanceRequest: properties: occurred_at: type: string format: date-time title: Occurred At odometer_km: type: integer minimum: 0.0 title: Odometer Km category: type: string enum: - periodic_service - repair - inspection - tyres - other title: Category summary: type: string maxLength: 2000 minLength: 3 title: Summary next_service_km: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Next Service Km mark_maintenance: type: boolean title: Mark Maintenance default: true type: object required: - occurred_at - odometer_km - category - summary title: CreateMaintenanceRequest CreateUserRequest: properties: email: type: string maxLength: 320 minLength: 3 title: Email display_name: type: string maxLength: 120 minLength: 2 title: Display Name role: type: string enum: - operations_manager - rental_employee title: Role password: type: string maxLength: 256 minLength: 8 title: Password type: object required: - email - display_name - role - password title: CreateUserRequest CurrentUser: properties: public_ref: type: string title: Public Ref display_name: type: string title: Display Name role: type: string enum: - operations_manager - rental_employee title: Role type: object required: - public_ref - display_name - role title: CurrentUser CustomerOptionOut: properties: public_ref: type: string title: Public Ref display_name: type: string title: Display Name email: anyOf: - type: string - type: 'null' title: Email type: object required: - public_ref - display_name - email title: CustomerOptionOut DashboardMetrics: properties: available: type: integer title: Available rented: type: integer title: Rented cleaning: type: integer title: Cleaning maintenance: type: integer title: Maintenance blocked: type: integer title: Blocked open_quality_issues: type: integer title: Open Quality Issues pending_or_failed_workflows: type: integer title: Pending Or Failed Workflows type: object required: - available - rented - cleaning - maintenance - blocked - open_quality_issues - pending_or_failed_workflows title: DashboardMetrics DashboardOut: properties: metrics: $ref: '#/components/schemas/DashboardMetrics' attention_items: items: $ref: '#/components/schemas/AttentionItem' type: array title: Attention Items today: items: $ref: '#/components/schemas/TodayItem' type: array title: Today recent_automation: items: $ref: '#/components/schemas/AutomationRunOut' type: array title: Recent Automation type: object required: - metrics - attention_items - today - recent_automation title: DashboardOut DataQualityIssueDetailOut: properties: public_ref: type: string title: Public Ref rule_type: type: string title: Rule Type entity_type: type: string title: Entity Type entity_ref: type: string title: Entity Ref severity: type: string title: Severity status: type: string title: Status evidence: additionalProperties: true type: object title: Evidence detected_at: type: string format: date-time title: Detected At due_at: anyOf: - type: string format: date-time - type: 'null' title: Due At assigned_to_ref: anyOf: - type: string - type: 'null' title: Assigned To Ref assigned_to_name: anyOf: - type: string - type: 'null' title: Assigned To Name overdue: type: boolean title: Overdue default: false resolved_at: anyOf: - type: string format: date-time - type: 'null' title: Resolved At entity_snapshot: anyOf: - additionalProperties: true type: object - type: 'null' title: Entity Snapshot related_snapshots: items: additionalProperties: true type: object type: array title: Related Snapshots type: object required: - public_ref - rule_type - entity_type - entity_ref - severity - status - evidence - detected_at title: DataQualityIssueDetailOut DataQualityIssueOut: properties: public_ref: type: string title: Public Ref rule_type: type: string title: Rule Type entity_type: type: string title: Entity Type entity_ref: type: string title: Entity Ref severity: type: string title: Severity status: type: string title: Status evidence: additionalProperties: true type: object title: Evidence detected_at: type: string format: date-time title: Detected At due_at: anyOf: - type: string format: date-time - type: 'null' title: Due At assigned_to_ref: anyOf: - type: string - type: 'null' title: Assigned To Ref assigned_to_name: anyOf: - type: string - type: 'null' title: Assigned To Name overdue: type: boolean title: Overdue default: false resolved_at: anyOf: - type: string format: date-time - type: 'null' title: Resolved At type: object required: - public_ref - rule_type - entity_type - entity_ref - severity - status - evidence - detected_at title: DataQualityIssueOut DataQualityIssuePageOut: properties: items: items: $ref: '#/components/schemas/DataQualityIssueOut' type: array title: Items page: type: integer title: Page page_size: type: integer title: Page Size total: type: integer title: Total total_pages: type: integer title: Total Pages type: object required: - items - page - page_size - total - total_pages title: DataQualityIssuePageOut DemoIntegrationSummaryOut: properties: key: type: string enum: - n8n - ragcore - mcp_hub title: Key status_code: type: string title: Status Code detail_code: type: string title: Detail Code detail_params: additionalProperties: anyOf: - type: string - type: integer type: object title: Detail Params default: {} type: object required: - key - status_code - detail_code title: DemoIntegrationSummaryOut DemoLoginRequest: properties: role: type: string enum: - operations_manager - rental_employee title: Role type: object required: - role title: DemoLoginRequest DemoManifestOut: properties: demo_mode: type: boolean title: Demo Mode organization_name: type: string title: Organization Name timezone: type: string title: Timezone synthetic_data: type: boolean title: Synthetic Data allow_reset: type: boolean title: Allow Reset last_reset_at: anyOf: - type: string format: date-time - type: 'null' title: Last Reset At anchor_date: anyOf: - type: string - type: 'null' title: Anchor Date guide_available: type: boolean title: Guide Available required_roles: items: type: string enum: - operations_manager - rental_employee type: array title: Required Roles scenarios: items: $ref: '#/components/schemas/DemoScenarioOut' type: array title: Scenarios integrations: items: $ref: '#/components/schemas/DemoIntegrationSummaryOut' type: array title: Integrations type: object required: - demo_mode - organization_name - timezone - synthetic_data - allow_reset - last_reset_at - anchor_date - guide_available - required_roles - scenarios - integrations title: DemoManifestOut DemoScenarioOut: properties: id: type: string title: Id estimated_minutes: type: integer title: Estimated Minutes required_roles: items: type: string enum: - operations_manager - rental_employee type: array title: Required Roles start_path: type: string title: Start Path ready: type: boolean title: Ready blocked_reason_code: anyOf: - type: string - type: 'null' title: Blocked Reason Code blocked_reason_params: additionalProperties: type: string type: object title: Blocked Reason Params default: {} type: object required: - id - estimated_minutes - required_roles - start_path - ready title: DemoScenarioOut EvidenceSignalOut: properties: code: type: string title: Code params: additionalProperties: true type: object title: Params type: object required: - code title: EvidenceSignalOut GroundedAnswer: properties: answer: type: string title: Answer evidence_state: type: string enum: - grounded - insufficient - unavailable title: Evidence State sources: items: $ref: '#/components/schemas/SourceCard' type: array title: Sources provider: type: string title: Provider correlation_id: type: string title: Correlation Id type: object required: - answer - evidence_state - sources - provider - correlation_id title: GroundedAnswer HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError InspectionOut: properties: public_ref: type: string title: Public Ref booking_ref: type: string title: Booking Ref type: type: string title: Type fuel_level_percent: type: integer title: Fuel Level Percent cleanliness_ok: type: boolean title: Cleanliness Ok damage_reported: type: boolean title: Damage Reported technical_warning: type: boolean title: Technical Warning odometer_km: type: integer title: Odometer Km completed_at: type: string format: date-time title: Completed At type: object required: - public_ref - booking_ref - type - fuel_level_percent - cleanliness_ok - damage_reported - technical_warning - odometer_km - completed_at title: InspectionOut IntegrationStatusOut: properties: n8n: $ref: '#/components/schemas/N8nIntegrationStatus' mcp_hub: $ref: '#/components/schemas/McpHubIntegrationStatus' type: object required: - n8n - mcp_hub title: IntegrationStatusOut KnowledgeFeedbackRequest: properties: correlation_id: type: string format: uuid title: Correlation Id helpful: type: boolean title: Helpful type: object required: - correlation_id - helpful title: KnowledgeFeedbackRequest KnowledgeHealth: properties: provider: type: string title: Provider available: type: boolean title: Available detail: type: string title: Detail tenant: type: string title: Tenant workspace: type: string title: Workspace collection: type: string title: Collection document_count: anyOf: - type: integer - type: 'null' title: Document Count type: object required: - provider - available - detail - tenant - workspace - collection - document_count title: KnowledgeHealth MaintenanceOut: properties: public_ref: type: string title: Public Ref occurred_at: type: string format: date-time title: Occurred At odometer_km: type: integer title: Odometer Km category: type: string title: Category summary: type: string title: Summary type: object required: - public_ref - occurred_at - odometer_km - category - summary title: MaintenanceOut McpHubIntegrationStatus: properties: registration_enabled: type: boolean title: Registration Enabled state: type: string enum: - not_configured - no_evidence - operational title: State total_calls: type: integer title: Total Calls last_tool: anyOf: - type: string - type: 'null' title: Last Tool last_client: anyOf: - type: string - type: 'null' title: Last Client last_called_at: anyOf: - type: string format: date-time - type: 'null' title: Last Called At hub_reachable: anyOf: - type: boolean - type: 'null' title: Hub Reachable type: object required: - registration_enabled - state - total_calls title: McpHubIntegrationStatus McpKnowledgeSearchRequest: properties: question: type: string maxLength: 1000 minLength: 3 title: Question max_sources: type: integer maximum: 8.0 minimum: 1.0 title: Max Sources default: 4 locale: type: string enum: - nl-BE - en-GB - fr-BE title: Locale default: en-GB type: object required: - question title: McpKnowledgeSearchRequest McpVehicleDetailOut: properties: public_ref: type: string title: Public Ref make: type: string title: Make model: type: string title: Model model_year: type: integer title: Model Year location: type: string title: Location operational_status: type: string title: Operational Status odometer_km: type: integer title: Odometer Km next_service_km: type: integer title: Next Service Km open_quality_issue_count: type: integer title: Open Quality Issue Count current_booking_ref: anyOf: - type: string - type: 'null' title: Current Booking Ref type: object required: - public_ref - make - model - model_year - location - operational_status - odometer_km - next_service_km - open_quality_issue_count - current_booking_ref title: McpVehicleDetailOut MergeCustomersRequest: properties: survivor_ref: type: string title: Survivor Ref field_overrides: anyOf: - additionalProperties: type: string type: object - type: 'null' title: Field Overrides type: object required: - survivor_ref title: MergeCustomersRequest MergeCustomersResult: properties: issue_ref: type: string title: Issue Ref survivor_ref: type: string title: Survivor Ref loser_ref: type: string title: Loser Ref rewired_bookings: type: integer title: Rewired Bookings type: object required: - issue_ref - survivor_ref - loser_ref - rewired_bookings title: MergeCustomersResult N8nErrorHandlerStatus: properties: total_failures_registered: type: integer title: Total Failures Registered latest_failure_at: anyOf: - type: string format: date-time - type: 'null' title: Latest Failure At latest_failure_workflow: anyOf: - type: string - type: 'null' title: Latest Failure Workflow type: object required: - total_failures_registered - latest_failure_at - latest_failure_workflow title: N8nErrorHandlerStatus N8nHeartbeatIn: properties: workflow_id: type: string maxLength: 120 minLength: 1 title: Workflow Id workflow_name: type: string maxLength: 200 minLength: 1 title: Workflow Name execution_id: type: string maxLength: 120 minLength: 1 title: Execution Id status: type: string enum: - succeeded - failed title: Status type: object required: - workflow_id - workflow_name - execution_id - status title: N8nHeartbeatIn N8nHeartbeatResult: properties: status: type: string enum: - registered - already_registered title: Status execution_id: type: string title: Execution Id occurred_at: type: string format: date-time title: Occurred At type: object required: - status - execution_id - occurred_at title: N8nHeartbeatResult N8nIntegrationStatus: properties: configured: type: boolean title: Configured dispatch_enabled: type: boolean title: Dispatch Enabled state: type: string enum: - disabled - unavailable - degraded - operational - no_evidence title: State pending: type: integer title: Pending failed: type: integer title: Failed unexpected_failed: type: integer title: Unexpected Failed default: 0 demo_scenario_failed: type: integer title: Demo Scenario Failed default: 0 delivering: type: integer title: Delivering succeeded: type: integer title: Succeeded latest_success_at: anyOf: - type: string format: date-time - type: 'null' title: Latest Success At latest_failure_at: anyOf: - type: string format: date-time - type: 'null' title: Latest Failure At latest_demo_scenario_at: anyOf: - type: string format: date-time - type: 'null' title: Latest Demo Scenario At expected_workflow_count: type: integer title: Expected Workflow Count known_workflow_count: type: integer title: Known Workflow Count workflows: items: $ref: '#/components/schemas/N8nWorkflowEvidence' type: array title: Workflows error_handler: $ref: '#/components/schemas/N8nErrorHandlerStatus' type: object required: - configured - dispatch_enabled - state - pending - failed - delivering - succeeded - latest_success_at - latest_failure_at - expected_workflow_count - known_workflow_count - workflows - error_handler title: N8nIntegrationStatus N8nWorkflowEvidence: properties: name: type: string title: Name built: type: boolean title: Built last_seen_at: anyOf: - type: string format: date-time - type: 'null' title: Last Seen At state: type: string enum: - no_evidence - healthy - stale - failed title: State default: no_evidence last_status: anyOf: - type: string enum: - succeeded - failed - type: 'null' title: Last Status last_execution_id: anyOf: - type: string - type: 'null' title: Last Execution Id type: object required: - name - built - last_seen_at title: N8nWorkflowEvidence NextBookingRisk: properties: booking_ref: type: string title: Booking Ref starts_at: type: string format: date-time title: Starts At at_risk: type: boolean title: At Risk type: object required: - booking_ref - starts_at - at_risk title: NextBookingRisk OperationsSummaryOut: properties: tenant: type: string title: Tenant metrics: $ref: '#/components/schemas/DashboardMetrics' type: object required: - tenant - metrics title: OperationsSummaryOut PasswordLoginRequest: properties: email: type: string maxLength: 320 minLength: 3 title: Email password: type: string maxLength: 256 minLength: 8 title: Password type: object required: - email - password title: PasswordLoginRequest ProcedureDocumentOut: properties: id: type: string title: Id language: type: string title: Language document_id: type: string title: Document Id title: type: string title: Title version: type: string title: Version content: type: string title: Content content_hash: type: string title: Content Hash type: object required: - id - language - document_id - title - version - content - content_hash title: ProcedureDocumentOut ProcedureListOut: properties: documents: items: $ref: '#/components/schemas/ProcedureDocumentOut' type: array title: Documents type: object required: - documents title: ProcedureListOut ProcedureSyncResultIn: properties: execution_id: type: string maxLength: 120 title: Execution Id synced: type: integer minimum: 0.0 title: Synced failed: type: integer minimum: 0.0 title: Failed default: 0 type: object required: - execution_id - synced title: ProcedureSyncResultIn ProcedureSyncResultResult: properties: status: type: string enum: - registered - already_registered title: Status execution_id: type: string title: Execution Id occurred_at: type: string format: date-time title: Occurred At type: object required: - status - execution_id - occurred_at title: ProcedureSyncResultResult ProvideFieldsRequest: properties: fields: additionalProperties: type: string type: object title: Fields type: object required: - fields title: ProvideFieldsRequest RegisterReturnRequest: properties: end_odometer_km: type: integer minimum: 0.0 title: End Odometer Km fuel_level_percent: type: integer maximum: 100.0 minimum: 0.0 title: Fuel Level Percent cleanliness_ok: type: boolean title: Cleanliness Ok damage_reported: type: boolean title: Damage Reported technical_warning: type: boolean title: Technical Warning notes: anyOf: - type: string maxLength: 2000 - type: 'null' title: Notes type: object required: - end_odometer_km - fuel_level_percent - cleanliness_ok - damage_reported - technical_warning title: RegisterReturnRequest RegisterReturnResult: properties: booking_ref: type: string title: Booking Ref vehicle_ref: type: string title: Vehicle Ref inspection_ref: type: string title: Inspection Ref resulting_vehicle_status: type: string title: Resulting Vehicle Status odometer_regression: type: boolean title: Odometer Regression quality_issue_ref: anyOf: - type: string - type: 'null' title: Quality Issue Ref workflow_event_id: type: string title: Workflow Event Id next_booking_risk: anyOf: - $ref: '#/components/schemas/NextBookingRisk' - type: 'null' type: object required: - booking_ref - vehicle_ref - inspection_ref - resulting_vehicle_status - odometer_regression - quality_issue_ref - workflow_event_id - next_booking_risk title: RegisterReturnResult ReleaseVehicleRequest: properties: reason: type: string maxLength: 500 minLength: 3 title: Reason type: object required: - reason title: ReleaseVehicleRequest ResolveOdometerRegressionRequest: properties: decision: type: string enum: - retain_canonical - correct_reading title: Decision booking_ref: anyOf: - type: string - type: 'null' title: Booking Ref corrected_odometer_km: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Corrected Odometer Km note: anyOf: - type: string maxLength: 500 - type: 'null' title: Note type: object required: - decision title: ResolveOdometerRegressionRequest ResolveOverlapRequest: properties: booking_ref: type: string title: Booking Ref note: anyOf: - type: string maxLength: 500 - type: 'null' title: Note type: object required: - booking_ref title: ResolveOverlapRequest ReturnPreviewResult: properties: booking_ref: type: string title: Booking Ref vehicle_ref: type: string title: Vehicle Ref canonical_odometer_km: type: integer title: Canonical Odometer Km submitted_odometer_km: type: integer title: Submitted Odometer Km odometer_regression: type: boolean title: Odometer Regression resulting_odometer_km: type: integer title: Resulting Odometer Km resulting_vehicle_status: type: string title: Resulting Vehicle Status status_reason: type: string title: Status Reason status_reason_code: type: string title: Status Reason Code status_reason_params: additionalProperties: anyOf: - type: string - type: integer type: object title: Status Reason Params default: {} would_create_quality_issue: type: boolean title: Would Create Quality Issue attention_reasons: items: type: string type: array title: Attention Reasons next_booking_risk: anyOf: - $ref: '#/components/schemas/NextBookingRisk' - type: 'null' type: object required: - booking_ref - vehicle_ref - canonical_odometer_km - submitted_odometer_km - odometer_regression - resulting_odometer_km - resulting_vehicle_status - status_reason - status_reason_code - would_create_quality_issue - attention_reasons - next_booking_risk title: ReturnPreviewResult ScanResultOut: properties: created: additionalProperties: type: integer type: object title: Created type: object required: - created title: ScanResultOut SearchResponse: properties: query: type: string title: Query results: items: $ref: '#/components/schemas/SearchResultItem' type: array title: Results type: object required: - query - results title: SearchResponse SearchResultItem: properties: type: type: string enum: - vehicle - booking - data_quality_issue - section title: Type label: type: string title: Label detail_code: type: string title: Detail Code detail_params: additionalProperties: type: string type: object title: Detail Params default: {} link: type: string title: Link type: object required: - type - label - detail_code - link title: SearchResultItem SourceCard: properties: document_id: type: string title: Document Id title: type: string title: Title version: type: string title: Version section: type: string title: Section excerpt: type: string title: Excerpt type: object required: - document_id - title - version - section - excerpt title: SourceCard StatusRecommendationOut: properties: current_status: type: string title: Current Status recommended_status: anyOf: - type: string - type: 'null' title: Recommended Status recommendation_code: type: string title: Recommendation Code safe_to_apply: type: boolean title: Safe To Apply manual_review_required: type: boolean title: Manual Review Required facts: $ref: '#/components/schemas/VehicleStatusFactsOut' blocking_reasons: items: type: string type: array title: Blocking Reasons recommendation_token: type: string title: Recommendation Token type: object required: - current_status - recommended_status - recommendation_code - safe_to_apply - manual_review_required - facts - blocking_reasons - recommendation_token title: StatusRecommendationOut TodayItem: properties: kind: type: string enum: - departure - return title: Kind booking_ref: type: string title: Booking Ref vehicle_ref: type: string title: Vehicle Ref scheduled_at: type: string format: date-time title: Scheduled At type: object required: - kind - booking_ref - vehicle_ref - scheduled_at title: TodayItem UpdateUserRequest: properties: display_name: anyOf: - type: string maxLength: 120 minLength: 2 - type: 'null' title: Display Name role: anyOf: - type: string enum: - operations_manager - rental_employee - type: 'null' title: Role active: anyOf: - type: boolean - type: 'null' title: Active password: anyOf: - type: string maxLength: 256 minLength: 8 - type: 'null' title: Password type: object title: UpdateUserRequest UserOut: properties: public_ref: type: string title: Public Ref email: anyOf: - type: string - type: 'null' title: Email display_name: type: string title: Display Name role: type: string enum: - operations_manager - rental_employee title: Role active: type: boolean title: Active type: object required: - public_ref - email - display_name - role - active title: UserOut ValidationError: properties: loc: items: anyOf: - type: string - type: integer type: array title: Location msg: type: string title: Message type: type: string title: Error Type input: title: Input ctx: type: object title: Context type: object required: - loc - msg - type title: ValidationError VehicleDetailOut: properties: public_ref: type: string title: Public Ref make: type: string title: Make model: type: string title: Model model_year: type: integer title: Model Year registration_number: type: string title: Registration Number location: type: string title: Location operational_status: type: string title: Operational Status odometer_km: type: integer title: Odometer Km next_service_km: type: integer title: Next Service Km active: type: boolean title: Active attention: type: boolean title: Attention default: false attention_reason: anyOf: - type: string - type: 'null' title: Attention Reason service_remaining_km: type: integer title: Service Remaining Km next_booking_ref: anyOf: - type: string - type: 'null' title: Next Booking Ref next_booking_at: anyOf: - type: string format: date-time - type: 'null' title: Next Booking At bookings: items: $ref: '#/components/schemas/BookingSummaryOut' type: array title: Bookings inspections: items: $ref: '#/components/schemas/InspectionOut' type: array title: Inspections maintenance: items: $ref: '#/components/schemas/MaintenanceOut' type: array title: Maintenance quality_issues: items: $ref: '#/components/schemas/DataQualityIssueOut' type: array title: Quality Issues type: object required: - public_ref - make - model - model_year - registration_number - location - operational_status - odometer_km - next_service_km - active - service_remaining_km title: VehicleDetailOut VehicleOut: properties: public_ref: type: string title: Public Ref make: type: string title: Make model: type: string title: Model model_year: type: integer title: Model Year registration_number: type: string title: Registration Number location: type: string title: Location operational_status: type: string title: Operational Status odometer_km: type: integer title: Odometer Km next_service_km: type: integer title: Next Service Km active: type: boolean title: Active attention: type: boolean title: Attention default: false attention_reason: anyOf: - type: string - type: 'null' title: Attention Reason service_remaining_km: type: integer title: Service Remaining Km next_booking_ref: anyOf: - type: string - type: 'null' title: Next Booking Ref next_booking_at: anyOf: - type: string format: date-time - type: 'null' title: Next Booking At type: object required: - public_ref - make - model - model_year - registration_number - location - operational_status - odometer_km - next_service_km - active - service_remaining_km title: VehicleOut VehiclePageOut: properties: items: items: $ref: '#/components/schemas/VehicleOut' type: array title: Items page: type: integer title: Page page_size: type: integer title: Page Size total: type: integer title: Total total_pages: type: integer title: Total Pages type: object required: - items - page - page_size - total - total_pages title: VehiclePageOut VehicleStatusFactsOut: properties: active_booking_refs: items: type: string type: array title: Active Booking Refs overlapping_booking_pairs: items: items: type: string type: array type: array title: Overlapping Booking Pairs service_threshold_reached: type: boolean title: Service Threshold Reached odometer_km: type: integer title: Odometer Km next_service_km: type: integer title: Next Service Km open_booking_overlap_issue_ref: anyOf: - type: string - type: 'null' title: Open Booking Overlap Issue Ref type: object required: - active_booking_refs - overlapping_booking_pairs - service_threshold_reached - odometer_km - next_service_km title: VehicleStatusFactsOut WorkflowErrorReportIn: properties: workflow_id: type: string maxLength: 120 title: Workflow Id workflow_name: type: string maxLength: 200 title: Workflow Name execution_id: type: string maxLength: 120 title: Execution Id failed_at: type: string format: date-time title: Failed At error_category: type: string enum: - timeout - authError - connectionError - httpError - validationError - unknown title: Error Category error_summary: type: string maxLength: 500 title: Error Summary trigger_context: anyOf: - type: string maxLength: 200 - type: 'null' title: Trigger Context correlation_id: anyOf: - type: string - type: 'null' title: Correlation Id attempt: type: integer maximum: 1000.0 minimum: 1.0 title: Attempt default: 1 retry_action: anyOf: - type: string maxLength: 200 - type: 'null' title: Retry Action type: object required: - workflow_id - workflow_name - execution_id - failed_at - error_category - error_summary title: WorkflowErrorReportIn WorkflowErrorReportResult: properties: status: type: string enum: - registered - already_registered title: Status execution_id: type: string title: Execution Id occurred_at: type: string format: date-time title: Occurred At type: object required: - status - execution_id - occurred_at title: WorkflowErrorReportResult servers: - url: http://localhost:8128