{"openapi":"3.1.0","info":{"title":"附近充电 API","description":"附近充电微信小程序的公开查询、管理和数据摄取 API","version":"1.1.0"},"paths":{"/api/v1/stations":{"get":{"tags":["public"],"summary":"Nearby Stations","operationId":"nearby_stations_api_v1_stations_get","parameters":[{"name":"latitude","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"title":"Latitude"}},{"name":"longitude","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"title":"Longitude"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":50,"exclusiveMinimum":0,"default":10,"title":"Radius Km"}},{"name":"sort","in":"query","required":false,"schema":{"enum":["distance","latest","available","price"],"type":"string","default":"distance","title":"Sort"}},{"name":"fast_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Fast Only"}},{"name":"slow_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Slow Only"}},{"name":"available_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Available Only"}},{"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":30,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stations/{station_id}":{"get":{"tags":["public"],"summary":"Station Detail","operationId":"station_detail_api_v1_stations__station_id__get","parameters":[{"name":"station_id","in":"path","required":true,"schema":{"type":"integer","title":"Station Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicStationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["authentication"],"summary":"Login","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["authentication"],"summary":"Me","operationId":"me_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserOut"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["authentication"],"summary":"Logout","operationId":"logout_api_v1_auth_logout_post","parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/change-password":{"post":{"tags":["authentication"],"summary":"Change Password","operationId":"change_password_api_v1_auth_change_password_post","parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/stations":{"get":{"tags":["admin"],"summary":"Admin Stations","operationId":"admin_stations_api_v1_admin_stations_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","maxLength":100,"default":"","title":"Search"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Inactive"}},{"name":"status","in":"query","required":false,"schema":{"enum":["all","open","busy","maintenance","closed","inactive"],"type":"string","default":"all","title":"Status"}},{"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":25,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminStationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Create Station","operationId":"create_station_api_v1_admin_stations_post","parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StationCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/stats":{"get":{"tags":["admin"],"summary":"Admin Stats","operationId":"admin_stats_api_v1_admin_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminStats"}}}}}}},"/api/v1/admin/stations/{station_id}":{"put":{"tags":["admin"],"summary":"Update Station","operationId":"update_station_api_v1_admin_stations__station_id__put","parameters":[{"name":"station_id","in":"path","required":true,"schema":{"type":"integer","title":"Station Id"}},{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Deactivate Station","operationId":"deactivate_station_api_v1_admin_stations__station_id__delete","parameters":[{"name":"station_id","in":"path","required":true,"schema":{"type":"integer","title":"Station Id"}},{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ingestion/stations":{"post":{"tags":["admin"],"summary":"Ingest","operationId":"ingest_api_v1_ingestion_stations_post","parameters":[{"name":"X-Ingestion-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Ingestion-Key"}},{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ingestion/live-snapshots":{"post":{"tags":["admin"],"summary":"Ingest Live","operationId":"ingest_live_api_v1_ingestion_live_snapshots_post","parameters":[{"name":"X-Ingestion-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Ingestion-Key"}},{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiveSnapshotIngestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiveSnapshotIngestResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ingestion/station-targets":{"get":{"tags":["admin"],"summary":"Ingestion Station Targets","operationId":"ingestion_station_targets_api_v1_ingestion_station_targets_get","parameters":[{"name":"source","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":60,"title":"Source"}},{"name":"enrichment_source","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":60,"default":"amap-mobile-ui","title":"Enrichment Source"}},{"name":"region_adcodes","in":"query","required":false,"schema":{"type":"string","maxLength":700,"default":"","title":"Region Adcodes"}},{"name":"after_id","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"After Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"only_missing","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Only Missing"}},{"name":"X-Ingestion-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Ingestion-Key"}},{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestionStationTargetListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users":{"get":{"tags":["admin"],"summary":"List Admin Users","operationId":"list_admin_users_api_v1_admin_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserListResponse"}}}}}},"post":{"tags":["admin"],"summary":"Create Admin User","operationId":"create_admin_user_api_v1_admin_users_post","parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}":{"put":{"tags":["admin"],"summary":"Update Admin User","operationId":"update_admin_user_api_v1_admin_users__user_id__put","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/reset-password":{"post":{"tags":["admin"],"summary":"Reset Admin Password","operationId":"reset_admin_password_api_v1_admin_users__user_id__reset_password_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPasswordReset"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/api-keys":{"get":{"tags":["admin"],"summary":"List Api Keys","operationId":"list_api_keys_api_v1_admin_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyListResponse"}}}}}},"post":{"tags":["admin"],"summary":"Create Api Key","operationId":"create_api_key_api_v1_admin_api_keys_post","parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreated"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/api-keys/{key_id}":{"delete":{"tags":["admin"],"summary":"Revoke Api Key","operationId":"revoke_api_key_api_v1_admin_api_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}},{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ingestion-runs":{"get":{"tags":["admin"],"summary":"List Ingestion Runs","operationId":"list_ingestion_runs_api_v1_admin_ingestion_runs_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestionRunListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"tags":["system"],"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"}}}}}}}},"components":{"schemas":{"AdminPasswordReset":{"properties":{"new_password":{"type":"string","maxLength":128,"minLength":12,"title":"New Password"}},"type":"object","required":["new_password"],"title":"AdminPasswordReset"},"AdminStationListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/StationOut"},"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":"AdminStationListResponse"},"AdminStats":{"properties":{"total_stations":{"type":"integer","title":"Total Stations"},"active_stations":{"type":"integer","title":"Active Stations"},"available_connectors":{"type":"integer","title":"Available Connectors"},"available_fast_connectors":{"type":"integer","title":"Available Fast Connectors"},"available_slow_connectors":{"type":"integer","title":"Available Slow Connectors"},"stale_stations":{"type":"integer","title":"Stale Stations"}},"type":"object","required":["total_stations","active_stations","available_connectors","available_fast_connectors","available_slow_connectors","stale_stations"],"title":"AdminStats"},"AdminUserCreate":{"properties":{"username":{"type":"string","maxLength":40,"minLength":3,"pattern":"^[A-Za-z0-9._-]+$","title":"Username"},"display_name":{"type":"string","maxLength":60,"minLength":1,"title":"Display Name"},"password":{"type":"string","maxLength":128,"minLength":12,"title":"Password"},"role":{"type":"string","enum":["owner","operator"],"title":"Role","default":"operator"}},"type":"object","required":["username","display_name","password"],"title":"AdminUserCreate"},"AdminUserListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AdminUserOut"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"AdminUserListResponse"},"AdminUserOut":{"properties":{"id":{"type":"integer","title":"Id"},"username":{"type":"string","title":"Username"},"display_name":{"type":"string","title":"Display Name"},"role":{"type":"string","enum":["owner","operator"],"title":"Role"},"is_active":{"type":"boolean","title":"Is Active"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"},"password_changed_at":{"type":"string","format":"date-time","title":"Password Changed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","username","display_name","role","is_active","last_login_at","password_changed_at","created_at","updated_at"],"title":"AdminUserOut"},"AdminUserUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":60,"minLength":1},{"type":"null"}],"title":"Display Name"},"role":{"anyOf":[{"type":"string","enum":["owner","operator"]},{"type":"null"}],"title":"Role"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"AdminUserUpdate"},"ApiKeyCreate":{"properties":{"name":{"type":"string","maxLength":80,"minLength":2,"title":"Name"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["name"],"title":"ApiKeyCreate"},"ApiKeyCreated":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"is_active":{"type":"boolean","title":"Is Active"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"created_by":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created By"},"created_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"secret":{"type":"string","title":"Secret"}},"type":"object","required":["id","name","key_prefix","scopes","is_active","expires_at","last_used_at","created_by","created_by_name","created_at","revoked_at","secret"],"title":"ApiKeyCreated"},"ApiKeyListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ApiKeyOut"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"ApiKeyListResponse"},"ApiKeyOut":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"is_active":{"type":"boolean","title":"Is Active"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"created_by":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created By"},"created_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"}},"type":"object","required":["id","name","key_prefix","scopes","is_active","expires_at","last_used_at","created_by","created_by_name","created_at","revoked_at"],"title":"ApiKeyOut"},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","maxLength":128,"minLength":1,"title":"Current Password"},"new_password":{"type":"string","maxLength":128,"minLength":12,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IngestError":{"properties":{"index":{"type":"integer","title":"Index"},"external_id":{"type":"string","title":"External Id"},"message":{"type":"string","title":"Message"}},"type":"object","required":["index","external_id","message"],"title":"IngestError"},"IngestRequest":{"properties":{"source":{"type":"string","maxLength":60,"minLength":1,"title":"Source"},"stations":{"items":{"$ref":"#/components/schemas/IngestStation"},"type":"array","maxItems":1000,"minItems":1,"title":"Stations"}},"type":"object","required":["source","stations"],"title":"IngestRequest"},"IngestResult":{"properties":{"source":{"type":"string","title":"Source"},"received":{"type":"integer","title":"Received"},"created":{"type":"integer","title":"Created"},"updated":{"type":"integer","title":"Updated"},"failed":{"type":"integer","title":"Failed"},"errors":{"items":{"$ref":"#/components/schemas/IngestError"},"type":"array","title":"Errors"}},"type":"object","required":["source","received","created","updated","failed","errors"],"title":"IngestResult"},"IngestStation":{"properties":{"name":{"type":"string","maxLength":100,"minLength":2,"title":"Name"},"operator":{"type":"string","maxLength":100,"title":"Operator","default":""},"phone":{"type":"string","maxLength":100,"title":"Phone","default":""},"address":{"type":"string","maxLength":300,"minLength":3,"title":"Address"},"latitude":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Latitude"},"longitude":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Longitude"},"status":{"type":"string","enum":["open","busy","maintenance","closed"],"title":"Status","default":"open"},"opening_hours":{"type":"string","maxLength":100,"title":"Opening Hours","default":"24小时"},"total_connectors":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Total Connectors","default":0},"available_connectors":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Available Connectors","default":0},"fast_connectors":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Fast Connectors","default":0},"available_fast_connectors":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Available Fast Connectors","default":0},"max_power_kw":{"anyOf":[{"type":"number","maximum":2000.0,"minimum":0.0},{"type":"null"}],"title":"Max Power Kw"},"price_per_kwh":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Price Per Kwh"},"service_fee_per_kwh":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Service Fee Per Kwh"},"total_price_per_kwh":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Total Price Per Kwh"},"price_periods":{"items":{"$ref":"#/components/schemas/PricePeriod"},"type":"array","maxItems":96,"title":"Price Periods"},"parking_fee":{"type":"string","maxLength":200,"title":"Parking Fee","default":"以现场为准"},"price_description":{"type":"string","maxLength":500,"title":"Price Description","default":""},"facilities":{"items":{"type":"string"},"type":"array","maxItems":30,"title":"Facilities"},"tags":{"items":{"type":"string"},"type":"array","maxItems":30,"title":"Tags"},"data_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Data Updated At"},"is_active":{"type":"boolean","title":"Is Active","default":true},"external_id":{"type":"string","maxLength":120,"minLength":1,"title":"External Id"},"region_adcode":{"anyOf":[{"type":"string","pattern":"^\\d{6}$"},{"type":"null"}],"title":"Region Adcode"}},"type":"object","required":["name","address","latitude","longitude","external_id"],"title":"IngestStation"},"IngestionRunListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/IngestionRunOut"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"IngestionRunListResponse"},"IngestionRunOut":{"properties":{"id":{"type":"integer","title":"Id"},"provider":{"type":"string","title":"Provider"},"source":{"type":"string","title":"Source"},"status":{"type":"string","enum":["running","success","partial","failed"],"title":"Status"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"received":{"type":"integer","title":"Received"},"created":{"type":"integer","title":"Created"},"updated":{"type":"integer","title":"Updated"},"failed":{"type":"integer","title":"Failed"},"error_message":{"type":"string","title":"Error Message"}},"type":"object","required":["id","provider","source","status","started_at","finished_at","received","created","updated","failed","error_message"],"title":"IngestionRunOut"},"IngestionStationTarget":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"address":{"type":"string","title":"Address"},"latitude":{"type":"number","title":"Latitude"},"longitude":{"type":"number","title":"Longitude"},"source":{"type":"string","title":"Source"},"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id"},"missing_fields":{"items":{"type":"string"},"type":"array","title":"Missing Fields"},"latest_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Latest Observed At"}},"type":"object","required":["id","name","address","latitude","longitude","source","external_id","missing_fields"],"title":"IngestionStationTarget"},"IngestionStationTargetListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/IngestionStationTarget"},"type":"array","title":"Items"},"next_after_id":{"type":"integer","title":"Next After Id"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["items","next_after_id","has_more"],"title":"IngestionStationTargetListResponse"},"LiveSnapshotIn":{"properties":{"station_id":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Station Id"},"station_source":{"anyOf":[{"type":"string","maxLength":60,"minLength":1},{"type":"null"}],"title":"Station Source"},"station_external_id":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Station External Id"},"provider_station_id":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Provider Station Id"},"operator":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Operator"},"total_connectors":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Total Connectors"},"available_connectors":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Available Connectors"},"fast_connectors":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Fast Connectors"},"available_fast_connectors":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Available Fast Connectors"},"max_power_kw":{"anyOf":[{"type":"number","maximum":2000.0,"minimum":0.0},{"type":"null"}],"title":"Max Power Kw"},"price_per_kwh":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Price Per Kwh"},"service_fee_per_kwh":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Service Fee Per Kwh"},"total_price_per_kwh":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Total Price Per Kwh"},"price_periods":{"items":{"$ref":"#/components/schemas/PricePeriod"},"type":"array","maxItems":96,"title":"Price Periods"},"opening_hours":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Opening Hours"},"parking_fee":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Parking Fee"},"facilities":{"items":{"type":"string"},"type":"array","maxItems":30,"title":"Facilities"},"tags":{"items":{"type":"string"},"type":"array","maxItems":30,"title":"Tags"},"price_description":{"type":"string","maxLength":500,"title":"Price Description","default":""},"observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Observed At"},"is_simulated":{"type":"boolean","title":"Is Simulated","default":false}},"type":"object","title":"LiveSnapshotIn"},"LiveSnapshotIngestError":{"properties":{"index":{"type":"integer","title":"Index"},"station_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Station Id"},"station_external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Station External Id"},"message":{"type":"string","title":"Message"}},"type":"object","required":["index","message"],"title":"LiveSnapshotIngestError"},"LiveSnapshotIngestRequest":{"properties":{"source":{"type":"string","maxLength":60,"minLength":1,"title":"Source"},"ttl_seconds":{"type":"integer","maximum":86400.0,"minimum":30.0,"title":"Ttl Seconds","default":600},"snapshots":{"items":{"$ref":"#/components/schemas/LiveSnapshotIn"},"type":"array","maxItems":1000,"minItems":1,"title":"Snapshots"}},"type":"object","required":["source","snapshots"],"title":"LiveSnapshotIngestRequest"},"LiveSnapshotIngestResult":{"properties":{"source":{"type":"string","title":"Source"},"received":{"type":"integer","title":"Received"},"created":{"type":"integer","title":"Created"},"updated":{"type":"integer","title":"Updated"},"ignored":{"type":"integer","title":"Ignored"},"failed":{"type":"integer","title":"Failed"},"errors":{"items":{"$ref":"#/components/schemas/LiveSnapshotIngestError"},"type":"array","title":"Errors"}},"type":"object","required":["source","received","created","updated","ignored","failed","errors"],"title":"LiveSnapshotIngestResult"},"LoginRequest":{"properties":{"username":{"type":"string","maxLength":40,"minLength":3,"title":"Username"},"password":{"type":"string","maxLength":128,"minLength":1,"title":"Password"}},"type":"object","required":["username","password"],"title":"LoginRequest"},"LoginResponse":{"properties":{"user":{"$ref":"#/components/schemas/AdminUserOut"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["user","expires_at"],"title":"LoginResponse"},"NearbySummary":{"properties":{"station_count":{"type":"integer","title":"Station Count"},"available_connectors":{"type":"integer","title":"Available Connectors"},"fast_station_count":{"type":"integer","title":"Fast Station Count"}},"type":"object","required":["station_count","available_connectors","fast_station_count"],"title":"NearbySummary"},"PricePeriod":{"properties":{"connector_type":{"type":"string","maxLength":20,"title":"Connector Type","default":""},"start_time":{"type":"string","maxLength":5,"minLength":5,"title":"Start Time"},"end_time":{"type":"string","maxLength":5,"minLength":5,"title":"End Time"},"total_price_per_kwh":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Total Price Per Kwh"},"price_per_kwh":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Price Per Kwh"},"service_fee_per_kwh":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Service Fee Per Kwh"}},"type":"object","required":["start_time","end_time","total_price_per_kwh"],"title":"PricePeriod"},"PublicStationOut":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"operator":{"type":"string","title":"Operator"},"phone":{"type":"string","title":"Phone"},"address":{"type":"string","title":"Address"},"latitude":{"type":"number","title":"Latitude"},"longitude":{"type":"number","title":"Longitude"},"distance_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distance Km"},"status":{"type":"string","enum":["open","busy","maintenance","closed"],"title":"Status"},"opening_hours":{"type":"string","title":"Opening Hours"},"total_connectors":{"type":"integer","title":"Total Connectors"},"available_connectors":{"type":"integer","title":"Available Connectors"},"fast_connectors":{"type":"integer","title":"Fast Connectors"},"available_fast_connectors":{"type":"integer","title":"Available Fast Connectors"},"slow_connectors":{"type":"integer","title":"Slow Connectors"},"available_slow_connectors":{"type":"integer","title":"Available Slow Connectors"},"has_fast_charge":{"type":"boolean","title":"Has Fast Charge"},"has_slow_charge":{"type":"boolean","title":"Has Slow Charge"},"max_power_kw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Power Kw"},"price_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Per Kwh"},"service_fee_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Service Fee Per Kwh"},"total_price_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Price Per Kwh"},"price_summary":{"type":"string","title":"Price Summary"},"price_is_known":{"type":"boolean","title":"Price Is Known","default":false},"price_periods":{"items":{"$ref":"#/components/schemas/PricePeriod"},"type":"array","title":"Price Periods"},"active_price_periods":{"items":{"$ref":"#/components/schemas/PricePeriod"},"type":"array","title":"Active Price Periods"},"current_price_min_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Price Min Per Kwh"},"current_price_max_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Price Max Per Kwh"},"price_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Price Observed At"},"price_freshness_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Freshness Minutes"},"price_is_stale":{"type":"boolean","title":"Price Is Stale","default":false},"availability_is_known":{"type":"boolean","title":"Availability Is Known","default":false},"availability_is_stale":{"type":"boolean","title":"Availability Is Stale","default":false},"availability_freshness_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Availability Freshness Minutes"},"parking_fee":{"type":"string","title":"Parking Fee"},"price_description":{"type":"string","title":"Price Description"},"facilities":{"items":{"type":"string"},"type":"array","title":"Facilities"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"data_updated_at":{"type":"string","format":"date-time","title":"Data Updated At"},"freshness_minutes":{"type":"integer","title":"Freshness Minutes"},"has_live_data":{"type":"boolean","title":"Has Live Data","default":false},"live_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Live Observed At"},"live_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Live Expires At"},"live_freshness_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Live Freshness Minutes"},"live_is_stale":{"type":"boolean","title":"Live Is Stale","default":false}},"type":"object","required":["id","name","operator","phone","address","latitude","longitude","status","opening_hours","total_connectors","available_connectors","fast_connectors","available_fast_connectors","slow_connectors","available_slow_connectors","has_fast_charge","has_slow_charge","price_per_kwh","service_fee_per_kwh","price_summary","parking_fee","price_description","facilities","tags","data_updated_at","freshness_minutes"],"title":"PublicStationOut","description":"Public station projection without provider or ingestion provenance."},"StationCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":2,"title":"Name"},"operator":{"type":"string","maxLength":100,"title":"Operator","default":""},"phone":{"type":"string","maxLength":100,"title":"Phone","default":""},"address":{"type":"string","maxLength":300,"minLength":3,"title":"Address"},"latitude":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Latitude"},"longitude":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Longitude"},"status":{"type":"string","enum":["open","busy","maintenance","closed"],"title":"Status","default":"open"},"opening_hours":{"type":"string","maxLength":100,"title":"Opening Hours","default":"24小时"},"total_connectors":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Total Connectors","default":0},"available_connectors":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Available Connectors","default":0},"fast_connectors":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Fast Connectors","default":0},"available_fast_connectors":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Available Fast Connectors","default":0},"max_power_kw":{"anyOf":[{"type":"number","maximum":2000.0,"minimum":0.0},{"type":"null"}],"title":"Max Power Kw"},"price_per_kwh":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Price Per Kwh"},"service_fee_per_kwh":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Service Fee Per Kwh"},"total_price_per_kwh":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Total Price Per Kwh"},"price_periods":{"items":{"$ref":"#/components/schemas/PricePeriod"},"type":"array","maxItems":96,"title":"Price Periods"},"parking_fee":{"type":"string","maxLength":200,"title":"Parking Fee","default":"以现场为准"},"price_description":{"type":"string","maxLength":500,"title":"Price Description","default":""},"facilities":{"items":{"type":"string"},"type":"array","maxItems":30,"title":"Facilities"},"tags":{"items":{"type":"string"},"type":"array","maxItems":30,"title":"Tags"},"data_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Data Updated At"},"is_active":{"type":"boolean","title":"Is Active","default":true},"source":{"type":"string","maxLength":60,"minLength":1,"title":"Source","default":"manual"},"external_id":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"External Id"}},"type":"object","required":["name","address","latitude","longitude"],"title":"StationCreate"},"StationListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PublicStationOut"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"center":{"additionalProperties":{"type":"number"},"type":"object","title":"Center"},"summary":{"$ref":"#/components/schemas/NearbySummary"}},"type":"object","required":["items","total","page","page_size","center","summary"],"title":"StationListResponse"},"StationOut":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"operator":{"type":"string","title":"Operator"},"phone":{"type":"string","title":"Phone"},"address":{"type":"string","title":"Address"},"latitude":{"type":"number","title":"Latitude"},"longitude":{"type":"number","title":"Longitude"},"distance_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distance Km"},"status":{"type":"string","enum":["open","busy","maintenance","closed"],"title":"Status"},"opening_hours":{"type":"string","title":"Opening Hours"},"total_connectors":{"type":"integer","title":"Total Connectors"},"available_connectors":{"type":"integer","title":"Available Connectors"},"fast_connectors":{"type":"integer","title":"Fast Connectors"},"available_fast_connectors":{"type":"integer","title":"Available Fast Connectors"},"slow_connectors":{"type":"integer","title":"Slow Connectors"},"available_slow_connectors":{"type":"integer","title":"Available Slow Connectors"},"has_fast_charge":{"type":"boolean","title":"Has Fast Charge"},"has_slow_charge":{"type":"boolean","title":"Has Slow Charge"},"max_power_kw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Power Kw"},"price_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Per Kwh"},"service_fee_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Service Fee Per Kwh"},"total_price_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Price Per Kwh"},"price_summary":{"type":"string","title":"Price Summary"},"price_is_known":{"type":"boolean","title":"Price Is Known","default":false},"price_periods":{"items":{"$ref":"#/components/schemas/PricePeriod"},"type":"array","title":"Price Periods"},"active_price_periods":{"items":{"$ref":"#/components/schemas/PricePeriod"},"type":"array","title":"Active Price Periods"},"current_price_min_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Price Min Per Kwh"},"current_price_max_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Price Max Per Kwh"},"price_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Price Observed At"},"price_freshness_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Freshness Minutes"},"price_is_stale":{"type":"boolean","title":"Price Is Stale","default":false},"availability_is_known":{"type":"boolean","title":"Availability Is Known","default":false},"availability_is_stale":{"type":"boolean","title":"Availability Is Stale","default":false},"availability_freshness_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Availability Freshness Minutes"},"parking_fee":{"type":"string","title":"Parking Fee"},"price_description":{"type":"string","title":"Price Description"},"facilities":{"items":{"type":"string"},"type":"array","title":"Facilities"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"source":{"type":"string","title":"Source"},"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id"},"data_updated_at":{"type":"string","format":"date-time","title":"Data Updated At"},"freshness_minutes":{"type":"integer","title":"Freshness Minutes"},"has_live_data":{"type":"boolean","title":"Has Live Data","default":false},"live_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Live Source"},"live_provider_station_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Live Provider Station Id"},"live_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Live Observed At"},"live_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Live Expires At"},"live_freshness_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Live Freshness Minutes"},"live_is_stale":{"type":"boolean","title":"Live Is Stale","default":false},"live_is_simulated":{"type":"boolean","title":"Live Is Simulated","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"is_active":{"type":"boolean","title":"Is Active"},"catalog":{"$ref":"#/components/schemas/StationCreate"}},"type":"object","required":["id","name","operator","phone","address","latitude","longitude","status","opening_hours","total_connectors","available_connectors","fast_connectors","available_fast_connectors","slow_connectors","available_slow_connectors","has_fast_charge","has_slow_charge","price_per_kwh","service_fee_per_kwh","price_summary","parking_fee","price_description","facilities","tags","source","external_id","data_updated_at","freshness_minutes","created_at","updated_at","is_active","catalog"],"title":"StationOut"},"StationUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":2},{"type":"null"}],"title":"Name"},"operator":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Operator"},"phone":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Phone"},"address":{"anyOf":[{"type":"string","maxLength":300,"minLength":3},{"type":"null"}],"title":"Address"},"latitude":{"anyOf":[{"type":"number","maximum":90.0,"minimum":-90.0},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Longitude"},"status":{"anyOf":[{"type":"string","enum":["open","busy","maintenance","closed"]},{"type":"null"}],"title":"Status"},"opening_hours":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Opening Hours"},"total_connectors":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Total Connectors"},"available_connectors":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Available Connectors"},"fast_connectors":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Fast Connectors"},"available_fast_connectors":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Available Fast Connectors"},"max_power_kw":{"anyOf":[{"type":"number","maximum":2000.0,"minimum":0.0},{"type":"null"}],"title":"Max Power Kw"},"price_per_kwh":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Price Per Kwh"},"service_fee_per_kwh":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Service Fee Per Kwh"},"total_price_per_kwh":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Total Price Per Kwh"},"price_periods":{"anyOf":[{"items":{"$ref":"#/components/schemas/PricePeriod"},"type":"array","maxItems":96},{"type":"null"}],"title":"Price Periods"},"parking_fee":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Parking Fee"},"price_description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Price Description"},"facilities":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":30},{"type":"null"}],"title":"Facilities"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":30},{"type":"null"}],"title":"Tags"},"source":{"anyOf":[{"type":"string","maxLength":60,"minLength":1},{"type":"null"}],"title":"Source"},"external_id":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"External Id"},"data_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Data Updated At"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"StationUpdate"},"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"}}}}