-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathopenapi.json
More file actions
1 lines (1 loc) · 47.6 KB
/
Copy pathopenapi.json
File metadata and controls
1 lines (1 loc) · 47.6 KB
1
{"openapi":"3.1.0","info":{"title":"FuelIQ API","description":"FuelIQ — Vehicle Intelligence Platform API","version":"1.0.0"},"paths":{"/metrics":{"get":{"summary":"Metrics","description":"Endpoint that serves Prometheus metrics.","operationId":"metrics_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/sync-user":{"post":{"tags":["auth"],"summary":"Sync Firebase user to FuelIQ DB","description":"Called after first login. Creates user if not exists, updates profile if exists.","operationId":"sync_user_api_v1_auth_sync_user_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSyncRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_UserResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["auth"],"summary":"Invalidate user cache on logout","operationId":"logout_api_v1_auth_logout_post","responses":{"204":{"description":"Successful Response"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/fcm-token":{"put":{"tags":["auth"],"summary":"Update FCM device token","operationId":"update_fcm_token_api_v1_auth_fcm_token_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FCMTokenUpdateRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/me":{"get":{"tags":["users"],"summary":"Get Profile","operationId":"get_profile_api_v1_users_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_UserResponse_"}}}}},"security":[{"HTTPBearer":[]}]},"patch":{"tags":["users"],"summary":"Update Profile","operationId":"update_profile_api_v1_users_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_UserResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/vehicles":{"get":{"tags":["vehicles"],"summary":"List Vehicles","operationId":"list_vehicles_api_v1_vehicles_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_list_VehicleResponse__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["vehicles"],"summary":"Create Vehicle","operationId":"create_vehicle_api_v1_vehicles_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VehicleCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_VehicleResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vehicles/{vehicle_id}":{"get":{"tags":["vehicles"],"summary":"Get Vehicle","operationId":"get_vehicle_api_v1_vehicles__vehicle_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_VehicleResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["vehicles"],"summary":"Update Vehicle","operationId":"update_vehicle_api_v1_vehicles__vehicle_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VehicleUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_VehicleResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["vehicles"],"summary":"Delete Vehicle","operationId":"delete_vehicle_api_v1_vehicles__vehicle_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vehicles/{vehicle_id}/archive":{"post":{"tags":["vehicles"],"summary":"Archive Vehicle","operationId":"archive_vehicle_api_v1_vehicles__vehicle_id__archive_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vehicles/{vehicle_id}/fuel-logs":{"post":{"tags":["fuel"],"summary":"Log a fuel fill","description":"Create a new fuel log entry for a vehicle.\n \n - Validates vehicle ownership\n - Validates odometer progression \n - Automatically calculates fuel efficiency (L/100km and km/L) for full-tank fills\n - Updates vehicle's current odometer\n - Invalidates analytics cache","operationId":"create_fuel_log_api_v1_vehicles__vehicle_id__fuel_logs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Vehicle UUID","title":"Vehicle Id"},"description":"Vehicle UUID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FuelLogCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_FuelLogResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["fuel"],"summary":"List fuel logs for a vehicle","operationId":"list_fuel_logs_api_v1_vehicles__vehicle_id__fuel_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_PaginatedResponse_FuelLogResponse__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vehicles/{vehicle_id}/fuel-logs/{log_id}":{"get":{"tags":["fuel"],"summary":"Get a specific fuel log","operationId":"get_fuel_log_api_v1_vehicles__vehicle_id__fuel_logs__log_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}},{"name":"log_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Log Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_FuelLogResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["fuel"],"summary":"Update a fuel log","operationId":"update_fuel_log_api_v1_vehicles__vehicle_id__fuel_logs__log_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}},{"name":"log_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Log Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FuelLogUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_FuelLogResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["fuel"],"summary":"Delete a fuel log (soft delete)","operationId":"delete_fuel_log_api_v1_vehicles__vehicle_id__fuel_logs__log_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}},{"name":"log_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Log Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vehicles/{vehicle_id}/expenses":{"post":{"tags":["expenses"],"summary":"Create Expense","operationId":"create_expense_api_v1_vehicles__vehicle_id__expenses_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpenseCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ExpenseResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["expenses"],"summary":"List Expenses","operationId":"list_expenses_api_v1_vehicles__vehicle_id__expenses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_PaginatedResponse_ExpenseResponse__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vehicles/{vehicle_id}/expenses/{expense_id}":{"delete":{"tags":["expenses"],"summary":"Delete Expense","operationId":"delete_expense_api_v1_vehicles__vehicle_id__expenses__expense_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}},{"name":"expense_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Expense Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vehicles/{vehicle_id}/service-records":{"post":{"tags":["services"],"summary":"Create Service Record","operationId":"create_service_record_api_v1_vehicles__vehicle_id__service_records_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceRecordCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ServiceRecordResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["services"],"summary":"List Service Records","operationId":"list_service_records_api_v1_vehicles__vehicle_id__service_records_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_PaginatedResponse_ServiceRecordResponse__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vehicles/{vehicle_id}/reminders":{"post":{"tags":["services"],"summary":"Create Reminder","operationId":"create_reminder_api_v1_vehicles__vehicle_id__reminders_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReminderCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_ReminderResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["services"],"summary":"List Reminders","operationId":"list_reminders_api_v1_vehicles__vehicle_id__reminders_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_list_ReminderResponse__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vehicles/{vehicle_id}/reminders/{reminder_id}":{"delete":{"tags":["services"],"summary":"Delete Reminder","operationId":"delete_reminder_api_v1_vehicles__vehicle_id__reminders__reminder_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}},{"name":"reminder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Reminder Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vehicles/{vehicle_id}/analytics":{"get":{"tags":["analytics"],"summary":"Get Vehicle Analytics","operationId":"get_vehicle_analytics_api_v1_vehicles__vehicle_id__analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vehicle Id"}},{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"default":12,"title":"Months"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_VehicleAnalyticsSummary_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications":{"get":{"tags":["notifications"],"summary":"List Notifications","operationId":"list_notifications_api_v1_notifications_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"unread_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unread Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_PaginatedResponse_NotificationResponse__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/mark-all-read":{"post":{"tags":["notifications"],"summary":"Mark All Read","operationId":"mark_all_read_api_v1_notifications_mark_all_read_post","responses":{"204":{"description":"Successful Response"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/notifications/{notification_id}/read":{"patch":{"tags":["notifications"],"summary":"Mark Read","operationId":"mark_read_api_v1_notifications__notification_id__read_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ocr/presigned-receipt-upload":{"post":{"tags":["ocr"],"summary":"Get presigned URL for direct receipt upload","description":"Returns a presigned S3/MinIO URL for the Flutter client to upload a receipt image directly.\n Avoids routing large files through the API server.\n The client uploads directly to storage, then includes the object_key in the fuel log creation request.","operationId":"get_presigned_receipt_upload_api_v1_ocr_presigned_receipt_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"content_type","in":"query","required":false,"schema":{"type":"string","pattern":"^(image/jpeg|image/png|image/webp)$","description":"MIME type of the image to upload","default":"image/jpeg","title":"Content Type"},"description":"MIME type of the image to upload"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_PresignedUploadResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ocr/presigned-avatar-upload":{"post":{"tags":["ocr"],"summary":"Get presigned URL for avatar image upload","operationId":"get_presigned_avatar_upload_api_v1_ocr_presigned_avatar_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"content_type","in":"query","required":false,"schema":{"type":"string","default":"image/jpeg","title":"Content Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse_PresignedUploadResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"APIResponse_ExpenseResponse_":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"$ref":"#/components/schemas/ExpenseResponse"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"APIResponse[ExpenseResponse]"},"APIResponse_FuelLogResponse_":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"$ref":"#/components/schemas/FuelLogResponse"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"APIResponse[FuelLogResponse]"},"APIResponse_PaginatedResponse_ExpenseResponse__":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"$ref":"#/components/schemas/PaginatedResponse_ExpenseResponse_"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"APIResponse[PaginatedResponse[ExpenseResponse]]"},"APIResponse_PaginatedResponse_FuelLogResponse__":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"$ref":"#/components/schemas/PaginatedResponse_FuelLogResponse_"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"APIResponse[PaginatedResponse[FuelLogResponse]]"},"APIResponse_PaginatedResponse_NotificationResponse__":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"$ref":"#/components/schemas/PaginatedResponse_NotificationResponse_"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"APIResponse[PaginatedResponse[NotificationResponse]]"},"APIResponse_PaginatedResponse_ServiceRecordResponse__":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"$ref":"#/components/schemas/PaginatedResponse_ServiceRecordResponse_"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"APIResponse[PaginatedResponse[ServiceRecordResponse]]"},"APIResponse_PresignedUploadResponse_":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"$ref":"#/components/schemas/PresignedUploadResponse"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"APIResponse[PresignedUploadResponse]"},"APIResponse_ReminderResponse_":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"$ref":"#/components/schemas/ReminderResponse"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"APIResponse[ReminderResponse]"},"APIResponse_ServiceRecordResponse_":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"$ref":"#/components/schemas/ServiceRecordResponse"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"APIResponse[ServiceRecordResponse]"},"APIResponse_UserResponse_":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"$ref":"#/components/schemas/UserResponse"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"APIResponse[UserResponse]"},"APIResponse_VehicleAnalyticsSummary_":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"$ref":"#/components/schemas/VehicleAnalyticsSummary"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"APIResponse[VehicleAnalyticsSummary]"},"APIResponse_VehicleResponse_":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"$ref":"#/components/schemas/VehicleResponse"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"APIResponse[VehicleResponse]"},"APIResponse_list_ReminderResponse__":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/ReminderResponse"},"type":"array"},{"type":"null"}],"title":"Data"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"APIResponse[list[ReminderResponse]]"},"APIResponse_list_VehicleResponse__":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/VehicleResponse"},"type":"array"},{"type":"null"}],"title":"Data"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"APIResponse[list[VehicleResponse]]"},"DistanceUnit":{"type":"string","enum":["km","miles"],"title":"DistanceUnit"},"EfficiencyTrendPoint":{"properties":{"filled_at":{"type":"string","format":"date-time","title":"Filled At"},"efficiency_lper100km":{"type":"string","title":"Efficiency Lper100Km"},"efficiency_kmperliter":{"type":"string","title":"Efficiency Kmperliter"},"odometer_reading":{"type":"string","title":"Odometer Reading"}},"type":"object","required":["filled_at","efficiency_lper100km","efficiency_kmperliter","odometer_reading"],"title":"EfficiencyTrendPoint"},"ExpenseBreakdown":{"properties":{"category":{"$ref":"#/components/schemas/ExpenseCategory"},"total_amount":{"type":"string","title":"Total Amount"},"transaction_count":{"type":"integer","title":"Transaction Count"},"percentage":{"type":"number","title":"Percentage"}},"type":"object","required":["category","total_amount","transaction_count","percentage"],"title":"ExpenseBreakdown"},"ExpenseCategory":{"type":"string","enum":["fuel","maintenance","insurance","tax","toll","parking","accessories","repair","cleaning","other"],"title":"ExpenseCategory"},"ExpenseCreateRequest":{"properties":{"category":{"$ref":"#/components/schemas/ExpenseCategory"},"amount":{"anyOf":[{"type":"number","maximum":10000000.0,"exclusiveMinimum":0.0},{"type":"string"}],"title":"Amount"},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency","default":"INR"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"vendor_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Vendor Name"},"odometer_reading":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string"},{"type":"null"}],"title":"Odometer Reading"},"expense_date":{"type":"string","format":"date","title":"Expense Date"},"receipt_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Url"}},"type":"object","required":["category","amount"],"title":"ExpenseCreateRequest"},"ExpenseResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"vehicle_id":{"type":"string","format":"uuid","title":"Vehicle Id"},"category":{"$ref":"#/components/schemas/ExpenseCategory"},"amount":{"type":"string","title":"Amount"},"currency":{"type":"string","title":"Currency"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"vendor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Name"},"odometer_reading":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Odometer Reading"},"receipt_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Url"},"expense_date":{"type":"string","format":"date","title":"Expense Date"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","vehicle_id","category","amount","currency","description","vendor_name","odometer_reading","receipt_url","expense_date","created_at"],"title":"ExpenseResponse"},"FCMTokenUpdateRequest":{"properties":{"fcm_token":{"type":"string","minLength":10,"title":"Fcm Token"}},"type":"object","required":["fcm_token"],"title":"FCMTokenUpdateRequest"},"FuelLogCreateRequest":{"properties":{"odometer_reading":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string"}],"title":"Odometer Reading"},"volume_liters":{"anyOf":[{"type":"number","maximum":500.0,"exclusiveMinimum":0.0},{"type":"string"}],"title":"Volume Liters"},"price_per_liter":{"anyOf":[{"type":"number","maximum":1000.0,"exclusiveMinimum":0.0},{"type":"string"}],"title":"Price Per Liter"},"is_full_tank":{"type":"boolean","title":"Is Full Tank","default":true},"station_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Station Name"},"fuel_brand":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Fuel Brand"},"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes"},"filled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Filled At"},"receipt_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Url"},"logged_via":{"type":"string","title":"Logged Via","default":"manual"},"ocr_confidence":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"string"},{"type":"null"}],"title":"Ocr Confidence"}},"type":"object","required":["odometer_reading","volume_liters","price_per_liter"],"title":"FuelLogCreateRequest"},"FuelLogResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"vehicle_id":{"type":"string","format":"uuid","title":"Vehicle Id"},"odometer_reading":{"type":"string","title":"Odometer Reading"},"volume_liters":{"type":"string","title":"Volume Liters"},"price_per_liter":{"type":"string","title":"Price Per Liter"},"total_cost":{"type":"string","title":"Total Cost"},"efficiency_lper100km":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Efficiency Lper100Km"},"efficiency_kmperliter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Efficiency Kmperliter"},"distance_since_last":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Distance Since Last"},"is_full_tank":{"type":"boolean","title":"Is Full Tank"},"station_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Station Name"},"fuel_brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fuel Brand"},"receipt_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Url"},"logged_via":{"type":"string","title":"Logged Via"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"filled_at":{"type":"string","format":"date-time","title":"Filled At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","vehicle_id","odometer_reading","volume_liters","price_per_liter","total_cost","efficiency_lper100km","efficiency_kmperliter","distance_since_last","is_full_tank","station_name","fuel_brand","receipt_url","logged_via","notes","filled_at","created_at"],"title":"FuelLogResponse"},"FuelLogUpdateRequest":{"properties":{"odometer_reading":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string"},{"type":"null"}],"title":"Odometer Reading"},"volume_liters":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string"},{"type":"null"}],"title":"Volume Liters"},"price_per_liter":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string"},{"type":"null"}],"title":"Price Per Liter"},"is_full_tank":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Full Tank"},"station_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Station Name"},"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes"},"filled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Filled At"}},"type":"object","title":"FuelLogUpdateRequest"},"FuelType":{"type":"string","enum":["petrol","diesel","cng","electric","hybrid","lpg"],"title":"FuelType"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"MonthlyFuelStat":{"properties":{"month":{"type":"string","format":"date-time","title":"Month"},"total_cost":{"type":"string","title":"Total Cost"},"total_liters":{"type":"string","title":"Total Liters"},"avg_efficiency_lper100km":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avg Efficiency Lper100Km"},"fill_count":{"type":"integer","title":"Fill Count"}},"type":"object","required":["month","total_cost","total_liters","avg_efficiency_lper100km","fill_count"],"title":"MonthlyFuelStat"},"NotificationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"notification_type":{"$ref":"#/components/schemas/NotificationType"},"title":{"type":"string","title":"Title"},"body":{"type":"string","title":"Body"},"metadata":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Metadata"},"action_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Url"},"is_read":{"type":"boolean","title":"Is Read"},"read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Read At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","notification_type","title","body","action_url","is_read","read_at","created_at"],"title":"NotificationResponse"},"NotificationType":{"type":"string","enum":["service_reminder","service_overdue","weekly_summary","monthly_report","anomaly_alert","system"],"title":"NotificationType"},"PaginatedResponse_ExpenseResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ExpenseResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"PaginatedResponse[ExpenseResponse]"},"PaginatedResponse_FuelLogResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/FuelLogResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"PaginatedResponse[FuelLogResponse]"},"PaginatedResponse_NotificationResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/NotificationResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"PaginatedResponse[NotificationResponse]"},"PaginatedResponse_ServiceRecordResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ServiceRecordResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"PaginatedResponse[ServiceRecordResponse]"},"PresignedUploadResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"object_key":{"type":"string","title":"Object Key"},"expires_in":{"type":"integer","title":"Expires In"}},"type":"object","required":["upload_url","object_key","expires_in"],"title":"PresignedUploadResponse"},"ReminderCreateRequest":{"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"service_type":{"anyOf":[{"$ref":"#/components/schemas/ServiceType"},{"type":"null"}]},"reminder_type":{"$ref":"#/components/schemas/ReminderType","default":"date_based"},"remind_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Remind At"},"remind_at_odometer":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string"},{"type":"null"}],"title":"Remind At Odometer"},"is_recurring":{"type":"boolean","title":"Is Recurring","default":false},"recurrence_interval_days":{"anyOf":[{"type":"integer","maximum":3650.0,"minimum":1.0},{"type":"null"}],"title":"Recurrence Interval Days"}},"type":"object","required":["title"],"title":"ReminderCreateRequest"},"ReminderResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"vehicle_id":{"type":"string","format":"uuid","title":"Vehicle Id"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"service_type":{"anyOf":[{"$ref":"#/components/schemas/ServiceType"},{"type":"null"}]},"reminder_type":{"$ref":"#/components/schemas/ReminderType"},"remind_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Remind At"},"remind_at_odometer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remind At Odometer"},"status":{"$ref":"#/components/schemas/ReminderStatus"},"is_recurring":{"type":"boolean","title":"Is Recurring"},"recurrence_interval_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recurrence Interval Days"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","vehicle_id","title","description","service_type","reminder_type","remind_at","remind_at_odometer","status","is_recurring","recurrence_interval_days","completed_at","created_at"],"title":"ReminderResponse"},"ReminderStatus":{"type":"string","enum":["pending","notified","completed","dismissed","overdue"],"title":"ReminderStatus"},"ReminderType":{"type":"string","enum":["date_based","odometer_based"],"title":"ReminderType"},"ServiceRecordCreateRequest":{"properties":{"service_type":{"$ref":"#/components/schemas/ServiceType"},"service_date":{"type":"string","format":"date","title":"Service Date"},"odometer_reading":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string"},{"type":"null"}],"title":"Odometer Reading"},"cost":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string"},{"type":"null"}],"title":"Cost"},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency","default":"INR"},"shop_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Shop Name"},"shop_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shop Address"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"parts_replaced":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Parts Replaced"},"receipt_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Url"}},"type":"object","required":["service_type","service_date"],"title":"ServiceRecordCreateRequest"},"ServiceRecordResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"vehicle_id":{"type":"string","format":"uuid","title":"Vehicle Id"},"service_type":{"$ref":"#/components/schemas/ServiceType"},"service_date":{"type":"string","format":"date","title":"Service Date"},"odometer_reading":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Odometer Reading"},"cost":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost"},"currency":{"type":"string","title":"Currency"},"shop_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shop Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"parts_replaced":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Parts Replaced"},"receipt_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Url"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","vehicle_id","service_type","service_date","odometer_reading","cost","currency","shop_name","description","parts_replaced","receipt_url","created_at"],"title":"ServiceRecordResponse"},"ServiceType":{"type":"string","enum":["oil_change","tire_rotation","brake_service","air_filter","fuel_filter","spark_plugs","battery","coolant","transmission","general_inspection","ac_service","wheel_alignment","other"],"title":"ServiceType"},"UserPreferences":{"properties":{"distance_unit":{"$ref":"#/components/schemas/DistanceUnit","default":"km"},"volume_unit":{"$ref":"#/components/schemas/VolumeUnit","default":"liters"},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency","default":"INR"},"timezone":{"type":"string","title":"Timezone","default":"Asia/Kolkata"}},"type":"object","title":"UserPreferences"},"UserResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"clerk_id":{"type":"string","title":"Clerk Id"},"email":{"type":"string","title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"distance_unit":{"$ref":"#/components/schemas/DistanceUnit"},"volume_unit":{"$ref":"#/components/schemas/VolumeUnit"},"currency":{"type":"string","title":"Currency"},"timezone":{"type":"string","title":"Timezone"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","clerk_id","email","display_name","avatar_url","distance_unit","volume_unit","currency","timezone","created_at"],"title":"UserResponse"},"UserSyncRequest":{"properties":{"firebase_uid":{"type":"string","title":"Firebase Uid"},"email":{"type":"string","format":"email","title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["firebase_uid","email"],"title":"UserSyncRequest","description":"Called by Flutter after Firebase authentication to sync user profile."},"UserUpdateRequest":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Display Name"},"preferences":{"anyOf":[{"$ref":"#/components/schemas/UserPreferences"},{"type":"null"}]}},"type":"object","title":"UserUpdateRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VehicleAnalyticsSummary":{"properties":{"vehicle_id":{"type":"string","format":"uuid","title":"Vehicle Id"},"total_distance_km":{"type":"string","title":"Total Distance Km"},"total_fuel_cost":{"type":"string","title":"Total Fuel Cost"},"total_other_expenses":{"type":"string","title":"Total Other Expenses"},"total_service_cost":{"type":"string","title":"Total Service Cost"},"total_cost_of_ownership":{"type":"string","title":"Total Cost Of Ownership"},"avg_efficiency_lper100km":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avg Efficiency Lper100Km"},"cost_per_km":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cost Per Km"},"total_fills":{"type":"integer","title":"Total Fills"},"monthly_stats":{"items":{"$ref":"#/components/schemas/MonthlyFuelStat"},"type":"array","title":"Monthly Stats"},"efficiency_trend":{"items":{"$ref":"#/components/schemas/EfficiencyTrendPoint"},"type":"array","title":"Efficiency Trend"},"expense_breakdown":{"items":{"$ref":"#/components/schemas/ExpenseBreakdown"},"type":"array","title":"Expense Breakdown"}},"type":"object","required":["vehicle_id","total_distance_km","total_fuel_cost","total_other_expenses","total_service_cost","total_cost_of_ownership","avg_efficiency_lper100km","cost_per_km","total_fills","monthly_stats","efficiency_trend","expense_breakdown"],"title":"VehicleAnalyticsSummary"},"VehicleCreateRequest":{"properties":{"make":{"type":"string","maxLength":100,"minLength":1,"title":"Make"},"model":{"type":"string","maxLength":100,"minLength":1,"title":"Model"},"year":{"type":"integer","maximum":2030.0,"minimum":1900.0,"title":"Year"},"fuel_type":{"$ref":"#/components/schemas/FuelType"},"vehicle_type":{"$ref":"#/components/schemas/VehicleType","default":"car"},"license_plate":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"License Plate"},"vin":{"anyOf":[{"type":"string","maxLength":17,"minLength":17},{"type":"null"}],"title":"Vin"},"color":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Color"},"tank_capacity_liters":{"anyOf":[{"type":"number","maximum":500.0,"exclusiveMinimum":0.0},{"type":"string"},{"type":"null"}],"title":"Tank Capacity Liters"},"initial_odometer":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string"}],"title":"Initial Odometer","default":"0"},"is_primary":{"type":"boolean","title":"Is Primary","default":false}},"type":"object","required":["make","model","year","fuel_type"],"title":"VehicleCreateRequest"},"VehicleResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"make":{"type":"string","title":"Make"},"model":{"type":"string","title":"Model"},"year":{"type":"integer","title":"Year"},"fuel_type":{"$ref":"#/components/schemas/FuelType"},"vehicle_type":{"$ref":"#/components/schemas/VehicleType"},"license_plate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Plate"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"tank_capacity_liters":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tank Capacity Liters"},"initial_odometer":{"type":"string","title":"Initial Odometer"},"current_odometer":{"type":"string","title":"Current Odometer"},"photo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Photo Url"},"is_primary":{"type":"boolean","title":"Is Primary"},"is_archived":{"type":"boolean","title":"Is Archived"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"total_distance_km":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Distance Km"},"total_fuel_cost":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Fuel Cost"},"avg_efficiency_lper100km":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avg Efficiency Lper100Km"}},"type":"object","required":["id","make","model","year","fuel_type","vehicle_type","license_plate","color","tank_capacity_liters","initial_odometer","current_odometer","photo_url","is_primary","is_archived","created_at"],"title":"VehicleResponse"},"VehicleType":{"type":"string","enum":["car","motorcycle","scooter","truck","van","bus","other"],"title":"VehicleType"},"VehicleUpdateRequest":{"properties":{"make":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Make"},"model":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Model"},"year":{"anyOf":[{"type":"integer","maximum":2030.0,"minimum":1900.0},{"type":"null"}],"title":"Year"},"fuel_type":{"anyOf":[{"$ref":"#/components/schemas/FuelType"},{"type":"null"}]},"vehicle_type":{"anyOf":[{"$ref":"#/components/schemas/VehicleType"},{"type":"null"}]},"license_plate":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"License Plate"},"color":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Color"},"tank_capacity_liters":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string"},{"type":"null"}],"title":"Tank Capacity Liters"},"is_primary":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Primary"}},"type":"object","title":"VehicleUpdateRequest"},"VolumeUnit":{"type":"string","enum":["liters","gallons"],"title":"VolumeUnit"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}