{"openapi":"3.1.0","info":{"title":"OCPPLab SDK","summary":"OCPPLab SDK for  deployments","description":"OCPPLab SDK :\n\n\nTenant-aware routes require `Authorization: Bearer api-key`.","version":"0.1.0"},"paths":{"/evcharger/catalog":{"get":{"tags":["Catalog"],"summary":"List catalog brands","description":"Retrieve the catalog of charger brands available to the platform.","operationId":"list_catalog_brands","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number for the paginated brand catalog.","examples":[1],"default":1,"title":"Page"},"description":"Page number for the paginated brand catalog.","examples":{"first_page":{"summary":"First results page","value":1},"second_page":{"summary":"Second results page","value":2}}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of brands returned in one page.","examples":[20],"default":20,"title":"Limit"},"description":"Maximum number of brands returned in one page.","examples":{"compact":{"summary":"Small page","value":10},"default":{"summary":"Default page size","value":20}}}],"responses":{"200":{"description":"Catalog brands retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppBrandListResponse"},"examples":{"catalog_page":{"summary":"A paginated list of charger brands","value":{"data":[{"id":"4","slug":"abb","name":"ABB","created_at":"2021-02-06T14:08:22Z"},{"id":"50","slug":"abl","name":"ABL","created_at":"2022-04-27T09:43:21Z"}],"total":266,"page":1,"limit":20}}}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Catalog source failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["evcharger","catalog"],"x-fern-sdk-method-name":"list_brands"}},"/evcharger/catalog/{brand_slug}/models":{"get":{"tags":["Catalog"],"summary":"List catalog brand models","description":"Retrieve charger model details for a specific brand slug.","operationId":"list_catalog_brand_models","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","description":"Brand slug (URL-safe identifier) used to scope model discovery.","examples":["abb"],"title":"Brand Slug"},"description":"Brand slug (URL-safe identifier) used to scope model discovery.","examples":{"abb":{"summary":"Industrial charger brand","value":"abb"},"abl":{"summary":"AC charger brand","value":"abl"}}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number for the paginated brand model list.","examples":[1],"default":1,"title":"Page"},"description":"Page number for the paginated brand model list.","examples":{"first_page":{"summary":"First results page","value":1},"third_page":{"summary":"Later page","value":3}}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of models returned in one page.","examples":[50],"default":50,"title":"Limit"},"description":"Maximum number of models returned in one page.","examples":{"default":{"summary":"Default page size","value":50},"large":{"summary":"Larger page size","value":100}}}],"responses":{"200":{"description":"Models retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppModelListResponse"},"examples":{"abb_models":{"summary":"A paginated list of ABB model details","value":{"data":[{"id":"9","slug":"abb_terra_ac_wallbox","name":"Terra AC Wallbox","brand_slug":"abb","brand_id":"4","connector_count":1,"current_type":"AC","supported_kwh":[7.4,22.0],"connector_types":["Type2"],"created_at":"2021-02-06T14:08:22Z"},{"id":"29","slug":"abb_evlunic_basic","name":"EVLunic Basic","brand_slug":"abb","brand_id":"4","connector_count":1,"current_type":"AC","supported_kwh":[7.4,22.0],"connector_types":["Type2"],"created_at":"2021-03-22T15:02:26Z"}],"total":13,"page":1,"limit":50}}}}}},"400":{"description":"Invalid catalog request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Brand not found","content":{"application/json":{"examples":{"missing_brand":{"summary":"Unknown brand slug","value":{"detail":"Entity unknown-brand not found in brands"}}},"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Catalog source failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["evcharger","catalog"],"x-fern-sdk-method-name":"list_models"}},"/evcharger/catalog/{brand_slug}/models/{model}":{"get":{"tags":["Catalog"],"summary":"Get catalog brand model","description":"Retrieve one charger model detail record by brand slug and model slug.","operationId":"get_catalog_brand_model","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","description":"Brand slug (URL-safe identifier) used to scope model discovery.","examples":["abb"],"title":"Brand Slug"},"description":"Brand slug (URL-safe identifier) used to scope model discovery.","examples":{"abb":{"summary":"Industrial charger brand","value":"abb"},"abl":{"summary":"AC charger brand","value":"abl"}}},{"name":"model","in":"path","required":true,"schema":{"type":"string","description":"Model slug (URL-safe identifier) scoped under one brand.","title":"Model"},"description":"Model slug (URL-safe identifier) scoped under one brand.","examples":{"terra_ac_wallbox":{"summary":"A known ABB model","value":"abb_terra_ac_wallbox"}}}],"responses":{"200":{"description":"Model retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppModelResponse"},"examples":{"abb_model":{"summary":"One ABB model detail record","value":{"id":"9","slug":"abb_terra_ac_wallbox","name":"Terra AC Wallbox","brand_slug":"abb","brand_id":"4","connector_count":1,"current_type":"AC","supported_kwh":[7.4,22.0],"connector_types":["Type2"],"created_at":"2021-02-06T14:08:22Z"}}}}}},"400":{"description":"Invalid catalog request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Brand or model not found","content":{"application/json":{"examples":{"missing_model":{"summary":"Unknown brand or model slug","value":{"detail":"Entity unknown-model not found in models"}}},"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Catalog source failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["evcharger","catalog"],"x-fern-sdk-method-name":"get_model"}},"/evcharger/templates/locations":{"get":{"tags":["OCPP Templates"],"summary":"List OCPP + OCPI location templates","description":"Return ready-to-use request body templates for creating an OCPP charger location with OCPI roaming metadata. The public API validates query filters with Pydantic, then the service layer reads the local template gallery from config JSON.","operationId":"list_location_templates","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ocpp_version","in":"query","required":false,"schema":{"anyOf":[{"enum":["ocpp1.6","ocpp2.0.1"],"type":"string"},{"type":"null"}],"description":"Filter to templates for one OCPP version.","examples":["ocpp2.0.1"],"title":"Ocpp Version"},"description":"Filter to templates for one OCPP version."},{"name":"ocpi_version","in":"query","required":false,"schema":{"anyOf":[{"enum":["2.1.1","2.2.1"],"type":"string"},{"type":"null"}],"description":"Filter to templates for one OCPI version.","examples":["2.2.1"],"title":"Ocpi Version"},"description":"Filter to templates for one OCPI version."},{"name":"connector_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to templates whose charger connector_type matches.","examples":["IEC_62196_T2_COMBO"],"title":"Connector Type"},"description":"Filter to templates whose charger connector_type matches."},{"name":"include_all","in":"query","required":false,"schema":{"type":"boolean","description":"When false, return the recommended four OCPP×OCPI templates. When true, return the extended gallery.","examples":[false],"default":false,"title":"Include All"},"description":"When false, return the recommended four OCPP×OCPI templates. When true, return the extended gallery."}],"responses":{"200":{"description":"Location templates retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationTemplateListResponse"},"example":{"count":1,"filters":{"ocpp_version":"ocpp1.6","ocpi_version":"2.2.1","connector_type":"IEC_62196_T2","include_all":false},"templates":[{"name":"Type 2 AC city charger — TotalEnergies — OCPP 1.6 + OCPI 2.2.1","slug":"ocpp-16-ocpi-221-totalenergies-type-2-ac-city-charger","description":"Ready-to-use OCPP + OCPI create body.","cpo_name":"TotalEnergies","cpo_slug":"totalenergies","party_id":"TEF","ocpp_version":"ocpp1.6","ocpi_version":"2.2.1","connector_type":"IEC_62196_T2","body":{"ocpp_version":"ocpp1.6","ocpi_version":"2.2.1"}}]}}}},"400":{"description":"Invalid template filter","content":{"application/json":{"examples":{"invalid_ocpp_version":{"summary":"Unknown OCPP version","value":{"detail":"Invalid ocpp_version 'ocpp3.0'"}}},"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Template gallery source failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["evcharger","templates"],"x-fern-sdk-method-name":"list"}},"/evcharger/deployment":{"post":{"tags":["Deployment"],"summary":"Create charger deployment","description":"Provision one virtual charger deployment for the authenticated organization.","operationId":"ocpp_create_deployment","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppVirtualDeploymentRequest"},"examples":{"ocpp16_wallbox":{"summary":"Create an OCPP 1.6 charger deployment","value":{"identity":"CP-TEST-001","model":"wallbox-pulsar-plus","ws_url":"wss://evcharger.example.com","ocpp_version":"OCPP1.6","charger_name":"Bay A01"}}}}}},"responses":{"201":{"description":"Charger deployment created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppVirtualDeploymentResponse"},"example":{"id":"9167af9e-5157-4c45-9694-ae8ede085fae","deployment_id":"vd-cp-zzz-test-001-1713411e-a568-402a-a5fe-22b8ce2d59e3","identity":"CP-ZZZ-TEST-001","ocpp_version":"ocpp1.6","provisioning_state":"READY"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["evcharger","deployment"],"x-fern-sdk-method-name":"create"},"delete":{"tags":["Deployment"],"summary":"Delete one charger deployment","description":"Deletes a single charger deployment, identified by deployment_id. Organization ID is derived from the Bearer JWT.","operationId":"ocpp_delete_deployment","security":[{"HTTPBearer":[]}],"parameters":[{"name":"deployment_id","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Deployment id to delete.","title":"Deployment Id"},"description":"Deployment id to delete."}],"responses":{"204":{"description":"Successful Response"},"404":{"description":"Deployment not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["evcharger","deployment"],"x-fern-sdk-method-name":"delete"}},"/evcharger/location":{"post":{"tags":["Location"],"summary":"Create location with chargers (async)","description":"Accept a location + chargers and deploy them in the background, returning 202 immediately because the per-charger fan-out is slow. Individual charger failures are logged and do not abort the batch. Background work is not durable across restarts.","operationId":"ocpp_create_location","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppVirtualDeploymentLocationRequest"},"examples":{"la_defense":{"summary":"Create a location with one charger","value":{"name":"La Defense Charging Hub","address":"1 Parvis de la Defense","city":"Puteaux","country":"FRA","coordinates":{"lat":48.892,"lng":2.238},"timezone":"Europe/Paris","chargers":[{"identity":"CP-001","brand_slug":"wallbox","model":"wallbox-pulsar-plus","connector_type":"Type2","ws_url":"wss://evcharger.example.com"}]}}}}}},"responses":{"202":{"description":"Location creation accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptedResponse"},"example":{"detail":"Location creation accepted; chargers are deploying in the background."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["evcharger","location"],"x-fern-sdk-method-name":"create"},"delete":{"tags":["Location"],"summary":"Delete a deployment location and its chargers","description":"Hard-deletes a runnable virtual location and its chargers, identified by location_id","operationId":"ocpp_delete_location","security":[{"HTTPBearer":[]}],"parameters":[{"name":"location_id","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Virtual location location_id to delete.","title":"Location Id"},"description":"Virtual location location_id to delete."}],"responses":{"204":{"description":"Successful Response"},"404":{"description":"Location not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["evcharger","location"],"x-fern-sdk-method-name":"delete"}},"/evcharger/deployment-runtime-ops":{"post":{"tags":["Runtime Ops"],"summary":"Stop, restart, or delete deployed charger runtimes","description":"A single deployment_id runs synchronously and returns per-charger results. A location_id fans out over every charger in the location, which is slow, so it runs in the background and returns 202 immediately. Background work is not durable across restarts.","operationId":"ocpp_operate_runtime","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppDeploymentRuntimeOpsRequest"},"examples":{"restart_deployment":{"summary":"Restart one charger deployment","value":{"action":"restart","deployment_id":"dep-123"}},"stop_location":{"summary":"Stop every charger in a location","value":{"action":"stop","location_id":"4090477f-a416-4515-a302-97aa344a0a2a"}}}}},"required":true},"responses":{"202":{"description":"Runtime operation accepted","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/OcppDeploymentRuntimeOpsResponse"},{"$ref":"#/components/schemas/AcceptedResponse"}],"title":"Response Ocpp Operate Runtime"},"example":{"action":"restart","target_type":"location","location_id":"4090477f-a416-4515-a302-97aa344a0a2a","accepted_count":2,"failed_count":0,"results":[{"deployment_id":"dep-123","status":"accepted","response":{"action":"restart","status":"PENDING"}}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","deployment_runtime_ops"],"x-fern-sdk-method-name":"operate"}},"/evcharger/commands/proxy-message":{"post":{"tags":["Commands"],"summary":"Send a raw OCPP proxy message","operationId":"ocpp_proxy_message","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppProxyMessageRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"proxy_message"}},"/evcharger/commands/configuration":{"post":{"tags":["Commands"],"summary":"Change charger configuration","operationId":"ocpp_change_configuration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppConfigurationCommandRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"change_configuration"}},"/evcharger/commands/cache/reset":{"post":{"tags":["Commands"],"summary":"Reset charger authorization cache","operationId":"ocpp_reset_cache","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppEmptyCommandRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"reset_cache"}},"/evcharger/commands/local-auth-list":{"post":{"tags":["Commands"],"summary":"Send a local authorization list","operationId":"ocpp_send_local_list","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocalAuthListCommandRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"send_local_list"}},"/evcharger/commands/clear-local-auth-list":{"post":{"tags":["Commands"],"summary":"Clear charger local authorization list","operationId":"ocpp_clear_local_list","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppEmptyCommandRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"clear_local_list"}},"/evcharger/commands/inject-fault":{"post":{"tags":["Commands"],"summary":"Inject a charger fault","operationId":"ocpp_inject_fault","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppFaultInjectionCommandRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"inject_fault"}},"/evcharger/commands/clear-fault":{"post":{"tags":["Commands"],"summary":"Clear a charger fault","operationId":"ocpp_clear_fault","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppFaultClearCommandRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"clear_fault"}},"/evcharger/commands/plug-connector":{"post":{"tags":["Commands"],"summary":"Plug a connector","operationId":"ocpp_plug_connector","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppConnectorCommandRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"plug_connector"}},"/evcharger/commands/unplug-connector":{"post":{"tags":["Commands"],"summary":"Unplug a connector","operationId":"ocpp_unplug_connector","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppConnectorCommandRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"unplug_connector"}},"/evcharger/commands/start-session":{"post":{"tags":["Commands"],"summary":"Start a charging session","operationId":"command_start_session","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppStartSessionCommandRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"start_session"}},"/evcharger/commands/stop-session":{"post":{"tags":["Commands"],"summary":"Stop a charging session","operationId":"ocpp_stop_session","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppStopSessionCommandRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"stop_session"}},"/evcharger/commands/authorize-id-tag":{"post":{"tags":["Commands"],"summary":"Authorize an id tag","operationId":"ocpp_authorize_id_tag","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppAuthorizeIdTagCommandRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"authorize_id_tag"}},"/evcharger/commands/ev-requests-energy":{"post":{"tags":["Commands"],"summary":"Signal that the EV requests energy","operationId":"ocpp_ev_requests_energy","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppConnectorCommandRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"ev_requests_energy"}},"/evcharger/commands/ev-stops-energy":{"post":{"tags":["Commands"],"summary":"Signal that the EV stops requesting energy","operationId":"ocpp_ev_stops_energy","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppConnectorCommandRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"ev_stops_energy"}},"/evcharger/commands/power-update":{"post":{"tags":["Commands"],"summary":"Update delivered power","operationId":"ocpp_power_update","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppPowerUpdateCommandRequest"}}},"required":true},"responses":{"202":{"description":"Command queued for the targeted chargers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLocationCommandResponse"},"example":{"targeted_count":2,"queued_count":2,"failed_count":0,"results":[{"charger_id":"dep-123","identity":"CP-TEST-001","command":{"id":"a1b2c3d4e5f6","event_type":"start_transaction","ocpp_version":"ocpp1.6","payload":{"id_tag":"TAG-RFID-001","evse_id":1,"connector_id":1}}}],"failed":[]}}}},"400":{"description":"Invalid command target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"404":{"description":"Charger not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"503":{"description":"MQTT producer is not started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-fern-sdk-group-name":["evcharger","commands"],"x-fern-sdk-method-name":"power_update"}},"/evcharger/logs":{"get":{"tags":["Logs"],"summary":"List charger OCPP logs","description":"Read paginated OCPP logs for one charger. Filter by identity (required). Organization ID is derived from the Bearer token — never from the request.","operationId":"ocpp_list_logs","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identity","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Charger identity to list logs for.","title":"Identity"},"description":"Charger identity to list logs for."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number.","default":1,"title":"Page"},"description":"1-based page number."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Logs per page (1..500).","default":100,"title":"Page Size"},"description":"Logs per page (1..500)."}],"responses":{"200":{"description":"Charger logs retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLogListResponse"},"example":{"data":[{"direction":"cp_to_csms","action":"BootNotification","message":"[2,\"boot-001\",\"BootNotification\",{\"charge_point_vendor\":\"OCPPLAB\",\"charge_point_model\":\"SDK-DC-50\"}]","timestamp":"2026-04-09T09:30:00Z"}],"total":1,"limit":1000,"offset":0}}}},"400":{"description":"Invalid log filter","content":{"application/json":{"examples":{"reversed_dates":{"summary":"date_start after date_end","value":{"detail":"date_start must be before or equal to date_end"}}},"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["evcharger","logs"],"x-fern-sdk-method-name":"list"},"delete":{"tags":["Logs"],"summary":"Delete charger OCPP logs","description":"Soft-deletes OCPP logs for one charger identity. Organization ID is derived from the Bearer token — never from the request.","operationId":"ocpp_delete_logs","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identity","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Charger identity to delete logs for.","title":"Identity"},"description":"Charger identity to delete logs for."}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Invalid log filter","content":{"application/json":{"examples":{"reversed_dates":{"summary":"date_start after date_end","value":{"detail":"date_start must be before or equal to date_end"}}},"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["evcharger","logs"],"x-fern-sdk-method-name":"delete"}},"/ocpi/templates/locations":{"get":{"tags":["OCPI Templates"],"summary":"List OCPI + OCPP location templates","description":"Return ready-to-use request body templates for creating an OCPI CPO location with OCPP charger metadata. Filter by ocpi_version, ocpp_version, or connector_type. The public API validates query filters with Pydantic, then the service layer reads the local template gallery from config JSON.","operationId":"list_ocpi_location_templates","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ocpp_version","in":"query","required":false,"schema":{"anyOf":[{"enum":["ocpp1.6","ocpp2.0.1"],"type":"string"},{"type":"null"}],"description":"Filter to templates for one OCPP version.","examples":["ocpp2.0.1"],"title":"Ocpp Version"},"description":"Filter to templates for one OCPP version."},{"name":"ocpi_version","in":"query","required":false,"schema":{"anyOf":[{"enum":["2.1.1","2.2.1"],"type":"string"},{"type":"null"}],"description":"Filter to templates for one OCPI version.","examples":["2.2.1"],"title":"Ocpi Version"},"description":"Filter to templates for one OCPI version."},{"name":"connector_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to templates whose charger connector_type matches.","examples":["IEC_62196_T2_COMBO"],"title":"Connector Type"},"description":"Filter to templates whose charger connector_type matches."},{"name":"include_all","in":"query","required":false,"schema":{"type":"boolean","description":"When false, return the recommended four OCPP×OCPI templates. When true, return the extended gallery.","examples":[false],"default":false,"title":"Include All"},"description":"When false, return the recommended four OCPP×OCPI templates. When true, return the extended gallery."}],"responses":{"200":{"description":"Location templates retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcpiLocationTemplateListResponse"},"example":{"count":1,"filters":{"ocpp_version":"ocpp1.6","ocpi_version":"2.2.1","connector_type":"IEC_62196_T2","include_all":false},"templates":[{"name":"Type 2 AC city charger — TotalEnergies — OCPP 1.6 + OCPI 2.2.1","slug":"ocpp-16-ocpi-221-totalenergies-type-2-ac-city-charger","description":"Ready-to-use OCPP + OCPI create body.","cpo_name":"TotalEnergies","cpo_slug":"totalenergies","party_id":"TEF","ocpp_version":"ocpp1.6","ocpi_version":"2.2.1","connector_type":"IEC_62196_T2","body":{"ocpp_version":"ocpp1.6","ocpi_version":"2.2.1"}}]}}}},"400":{"description":"Invalid template filter","content":{"application/json":{"examples":{"invalid_ocpi_version":{"summary":"Unknown OCPI version","value":{"detail":"Invalid ocpi_version '3.0'"}}},"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"401":{"description":"Missing or invalid bearer token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Template gallery source failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["ocpi","templates"],"x-fern-sdk-method-name":"list"}},"/ocpi/cpo":{"post":{"tags":["OCPI CPO Orchestration"],"summary":"Create an OCPI CPO roaming partner","description":"Creates only the OCPI CPO roaming partner. Use /ocpi/location to create location topology. Organization ID is derived from the Bearer JWT — never from the request body. Clients authenticate with Bearer JWT only.","operationId":"create_ocpi_cpo","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOcpiCpoRequest"},"examples":{"nl_abc":{"summary":"Create a Dutch CPO roaming partner","value":{"ocpi_version":"2.2.1","partner":{"business_details":{"logo_url":"https://abc-charging.example.com/logo.png","name":"ABC Charging B.V.","website":"https://abc-charging.example.com"},"country_code":"NL","name":"ABC Charging","ocpi_versions":["2.2.1"],"party_id":"ABC","role":"CPO"}}}}}}},"responses":{"201":{"description":"OCPI CPO roaming partner created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcpiPartnerResponse"},"example":{"id":42,"country_code":"NL","party_id":"ABC","name":"ABC Charging","role":"CPO","ocpi_versions":["2.2.1"],"status":"ACTIVE"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["ocpi","cpo"],"x-fern-sdk-method-name":"create"},"delete":{"tags":["OCPI CPO Orchestration"],"summary":"Delete an OCPI CPO roaming partner","description":"Deletes the OCPI CPO partner and its CPO operation, identified by country_code + party_id. Organization ID is derived from the Bearer JWT.","operationId":"delete_ocpi_cpo","security":[{"HTTPBearer":[]}],"parameters":[{"name":"country_code","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code.","examples":["NL"],"title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code.","examples":{"nl":{"summary":"Netherlands","value":"NL"},"fr":{"summary":"France","value":"FR"}}},{"name":"party_id","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":3,"description":"3-character OCPI party ID.","examples":["ABC"],"title":"Party Id"},"description":"3-character OCPI party ID.","examples":{"abc":{"summary":"ABC Charging party id","value":"ABC"}}}],"responses":{"204":{"description":"Successful Response"},"404":{"description":"Partner not found","content":{"application/json":{"examples":{"missing_partner":{"summary":"Unknown country_code + party_id","value":{"detail":"Entity NL-ABC not found in partners"}}},"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["ocpi","cpo"],"x-fern-sdk-method-name":"delete"}},"/ocpi/location":{"post":{"tags":["OCPI CPO Orchestration"],"summary":"Create an OCPI CPO location (async)","description":"Accept a flat body (ocpi_version, ocpp_version, country_code, party_id, locations) and create each virtual location with chargers in the background, returning 202 immediately because the per-charger fan-out is slow. Organization ID is derived from the Bearer JWT. Background work is not durable across restarts.","operationId":"create_ocpi_cpo_location","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOcpiCpoLocationRequest"},"examples":{"amsterdam_keizers":{"summary":"Create an Amsterdam location with one charger","value":{"ocpi_version":"2.2.1","ocpp_version":"ocpp1.6","country_code":"NL","party_id":"ABC","locations":[{"name":"Keizersgracht Parking","address":"Keizersgracht 100","city":"Amsterdam","postal_code":"1015CW","country":"NLD","coordinates":{"latitude":52.3676,"longitude":4.9041},"time_zone":"Europe/Amsterdam","chargers":[{"identity":"CP-KEIZERS-01","brand_slug":"wallbox","model":"pulsar-plus","connector_type":"IEC_62196_T2","ws_url":"wss://evcharger.example.com/CP-KEIZERS-01","ocpp_version":"ocpp1.6","evses":[{"evse_uid":"NL-ABC-CP-KEIZERS-01-1","connectors":[{"connector_id":"1","standard":"IEC_62196_T2","format":"SOCKET","power_type":"AC_3_PHASE","max_voltage":400,"max_amperage":32,"max_electric_power":22000}]}]}]}]}}}}}},"responses":{"202":{"description":"Location creation accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptedResponse"},"example":{"detail":"Location creation accepted; topology and chargers are being provisioned in the background."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["ocpi","location"],"x-fern-sdk-method-name":"create"},"delete":{"tags":["OCPI CPO Orchestration"],"summary":"Delete an OCPI location and its virtual deployment","description":"Tears down the runnable virtual location and its chargers. Identified by the OCPI location_id ({country_code}-{party_id}-{slug}). Organization ID is derived from the Bearer JWT.","operationId":"delete_ocpi_cpo_location","security":[{"HTTPBearer":[]}],"parameters":[{"name":"location_id","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"OCPI location_id, e.g. NL-ABC-amsterdam-keizers-ab12cd.","examples":["NL-ABC-amsterdam-keizers-ab12cd"],"title":"Location Id"},"description":"OCPI location_id, e.g. NL-ABC-amsterdam-keizers-ab12cd.","examples":{"amsterdam":{"summary":"A known OCPI location id","value":"NL-ABC-amsterdam-keizers-ab12cd"}}},{"name":"ocpi_version","in":"query","required":true,"schema":{"enum":["2.1.1","2.2.1"],"type":"string","description":"OCPI protocol version for the location topology.","title":"Ocpi Version"},"description":"OCPI protocol version for the location topology.","examples":{"v221":{"summary":"OCPI 2.2.1","value":"2.2.1"},"v211":{"summary":"OCPI 2.1.1","value":"2.1.1"}}}],"responses":{"204":{"description":"Successful Response"},"404":{"description":"Location not found","content":{"application/json":{"examples":{"missing_location":{"summary":"Unknown OCPI location_id","value":{"detail":"Entity NL-ABC-amsterdam-keizers-ab12cd not found in locations"}}},"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["ocpi","location"],"x-fern-sdk-method-name":"delete"}},"/ocpi/logs":{"get":{"tags":["OCPI Logs"],"summary":"List charge point logs","description":"Read paginated OCPP logs for one charge point. Filter by identity (required). Organization ID is derived from the Bearer token — never from the request.","operationId":"ocpi_list_charge_point_logs","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identity","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Charge point identity to list logs for.","title":"Identity"},"description":"Charge point identity to list logs for."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number.","default":1,"title":"Page"},"description":"1-based page number."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Logs per page (1..500).","default":100,"title":"Page Size"},"description":"Logs per page (1..500)."}],"responses":{"200":{"description":"Charge point logs retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcppLogListResponse"},"example":{"data":[{"direction":"INCOMING","action":"BootNotification","message":"[2,\"boot-001\",\"BootNotification\",{\"charge_point_vendor\":\"OCPPLAB\",\"charge_point_model\":\"SDK-DC-50\"}]","timestamp":"2026-04-09T09:30:00Z"}],"total":1,"limit":100,"offset":0}}}},"400":{"description":"Invalid log filter","content":{"application/json":{"examples":{"missing_identity":{"summary":"identity is required","value":{"detail":"identity is required"}}},"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-fern-sdk-group-name":["ocpi","logs"],"x-fern-sdk-method-name":"list"}},"/health":{"get":{"tags":["Health"],"summary":"Health Check","description":"Return a lightweight liveness probe for monitoring.","operationId":"Health-health_check","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthLiveResponse"}}}}}}},"/health/live":{"get":{"tags":["Health"],"summary":"Health Live","description":"Return the same liveness payload under the Kubernetes-style path.","operationId":"Health-health_live","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthLiveResponse"}}}}}}},"/health/ready":{"get":{"tags":["Health"],"summary":"Health Ready","description":"Return readiness of the database and MQTT producer.","operationId":"Health-health_ready","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthReadyResponse"}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthReadyResponse"}}}}}}},"/":{"get":{"tags":["Health"],"summary":"Landing Page","description":"Render a simple HTML landing page with API documentation links.\n\nReturns:\n    A static HTML page linking to the docs, schema, and health route.","operationId":"Health-landing_page","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"AcceptedResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Always 'accepted'.","default":"accepted"},"detail":{"type":"string","title":"Detail","description":"What was accepted and is running in the background."}},"type":"object","required":["detail"],"title":"AcceptedResponse","description":"202 acknowledgment for work handed off to a background task.\n\nLong-running fan-outs (location create, location runtime ops) return this\nimmediately; the actual work runs in the background and is not awaited.","example":{"detail":"Accepted; processing in the background.","status":"accepted"}},"AuthorizeIdTagPayload":{"properties":{"id_tag":{"type":"string","maxLength":20,"minLength":1,"title":"Id Tag","examples":["TAG-RFID-001"]}},"additionalProperties":false,"type":"object","required":["id_tag"],"title":"AuthorizeIdTagPayload","description":"Authorize one id tag payload."},"BrandResponse":{"properties":{"id":{"type":"string","title":"Id","examples":["4"]},"slug":{"type":"string","title":"Slug","examples":["abb"]},"name":{"type":"string","title":"Name","examples":["ABB"]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","examples":["2021-02-06T14:08:22Z"]}},"type":"object","required":["id","slug","name"],"title":"BrandResponse","description":"Brand catalog entry exposed by the API.","example":{"created_at":"2021-02-06T14:08:22Z","id":"4","name":"ABB","slug":"abb"}},"ChargerInput":{"properties":{"identity":{"type":"string","maxLength":36,"minLength":1,"title":"Identity"},"brand_slug":{"type":"string","minLength":1,"title":"Brand Slug"},"model":{"type":"string","minLength":1,"title":"Model"},"connector_type":{"type":"string","minLength":1,"title":"Connector Type"},"ws_url":{"type":"string","title":"Ws Url","description":"Must use ws:// or wss:// scheme."},"ocpp_version":{"anyOf":[{"type":"string","enum":["ocpp1.6","ocpp2.0.1"]},{"type":"null"}],"title":"Ocpp Version"},"charge_point_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Charge Point Name"},"evses":{"items":{"$ref":"#/components/schemas/EvseInput"},"type":"array","minItems":1,"title":"Evses"}},"additionalProperties":false,"type":"object","required":["identity","brand_slug","model","connector_type","ws_url","evses"],"title":"ChargerInput","description":"Charger with full OCPI EVSE / connector topology."},"ChargerLogEntry":{"properties":{"direction":{"type":"string","title":"Direction","examples":["cp_to_csms"]},"action":{"type":"string","title":"Action","examples":["BootNotification"]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","examples":["[2,\"boot-001\",\"BootNotification\",{}]"]},"timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Timestamp","examples":["2026-04-09T09:30:00Z"]}},"type":"object","required":["direction","action"],"title":"ChargerLogEntry","description":"One OCPP log entry returned by the charger logs endpoint.","example":{"action":"BootNotification","direction":"cp_to_csms","message":"[2,\"boot-001\",\"BootNotification\",{\"charge_point_vendor\":\"OCPPLAB\",\"charge_point_model\":\"SDK-DC-50\"}]","timestamp":"2026-04-09T09:30:00Z"}},"CommandTarget":{"properties":{"deployment_id":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Deployment Id","description":"One deployment or charger id to command. Mutually exclusive with location_id.","examples":["vd-cp-fast-201"]},"identity":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Identity","description":"One charger identity to command. Mutually exclusive with location_id.","examples":["CP-DEMO-001"]},"location_id":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Location Id","description":"Command all resolved chargers in this location.","examples":["loc-demo"]},"charger_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Charger Ids","description":"Optional narrowed deployment ids when targeting a location.","examples":[["vd-cp-fast-201"]]}},"additionalProperties":false,"type":"object","title":"CommandTarget","description":"Command target resolved in the service layer under the caller organization.","examples":[{"deployment_id":"vd-cp-fast-201"},{"identity":"CP-DEMO-001"},{"location_id":"loc-demo"}]},"ConfigurationChangePayload":{"properties":{"key":{"type":"string","maxLength":50,"minLength":1,"title":"Key","examples":["HeartbeatInterval"]},"value":{"type":"string","maxLength":500,"title":"Value","examples":["60"]}},"additionalProperties":false,"type":"object","required":["key","value"],"title":"ConfigurationChangePayload","description":"Configuration key/value payload."},"ConnectorInput":{"properties":{"connector_id":{"type":"string","maxLength":36,"minLength":1,"title":"Connector Id"},"standard":{"type":"string","title":"Standard","description":"Must equal the charger's connector_type."},"format":{"type":"string","enum":["SOCKET","CABLE"],"title":"Format"},"power_type":{"type":"string","enum":["AC_1_PHASE","AC_2_PHASE","AC_2_PHASE_SPLIT","AC_3_PHASE","DC"],"title":"Power Type"},"max_voltage":{"type":"integer","minimum":1.0,"title":"Max Voltage"},"max_amperage":{"type":"integer","minimum":1.0,"title":"Max Amperage"},"max_electric_power":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Electric Power"}},"additionalProperties":false,"type":"object","required":["connector_id","standard","format","power_type","max_voltage","max_amperage"],"title":"ConnectorInput","description":"OCPI connector within an EVSE."},"ConnectorPayload":{"properties":{"evse_id":{"type":"integer","minimum":1.0,"title":"Evse Id","default":1,"examples":[1]},"connector_id":{"type":"integer","minimum":1.0,"title":"Connector Id","default":1,"examples":[1]}},"additionalProperties":false,"type":"object","title":"ConnectorPayload","description":"Connector-scoped simulator action payload."},"CpoLocationDetailsInput":{"properties":{"location_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Slug","description":"Auto-generated unique slug. Do not set — any supplied value is overwritten. It is the shared identifier that links the OCPI location_id ({country_code}-{party_id}-{location_slug}) to its virtual deployment."},"name":{"type":"string","minLength":1,"title":"Name"},"address":{"type":"string","minLength":1,"title":"Address"},"city":{"type":"string","minLength":1,"title":"City"},"postal_code":{"type":"string","minLength":1,"title":"Postal Code"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"country":{"type":"string","maxLength":3,"minLength":3,"title":"Country","description":"ISO 3166-1 alpha-3 country code, for example NLD."},"coordinates":{"anyOf":[{"$ref":"#/components/schemas/OcpiCoordinates"},{"type":"null"}],"description":"GPS coordinates. Random valid coordinates are generated when omitted."},"time_zone":{"type":"string","minLength":1,"title":"Time Zone","description":"IANA timezone, e.g. Europe/Amsterdam."},"parking_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parking Type"},"facilities":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Facilities"},"opening_hours":{"title":"Opening Hours"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"chargers":{"items":{"$ref":"#/components/schemas/ChargerInput"},"type":"array","maxItems":100,"minItems":1,"title":"Chargers"}},"additionalProperties":false,"type":"object","required":["name","address","city","postal_code","country","time_zone","chargers"],"title":"CpoLocationDetailsInput","description":"Location with a required chargers array."},"CreateOcpiCpoLocationRequest":{"properties":{"ocpi_version":{"type":"string","enum":["2.1.1","2.2.1"],"title":"Ocpi Version","description":"OCPI protocol version for the CPO topology."},"ocpp_version":{"type":"string","enum":["ocpp1.6","ocpp2.0.1"],"title":"Ocpp Version","description":"OCPP protocol version for the chargers in this topology."},"country_code":{"type":"string","maxLength":2,"minLength":2,"title":"Country Code","description":"ISO 3166-1 alpha-2 OCPI country code, for example NL."},"party_id":{"type":"string","maxLength":3,"minLength":3,"title":"Party Id","description":"3-character OCPI party ID, for example ABC."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Optional CPO display name. Defaults to the party ID when omitted."},"locations":{"items":{"$ref":"#/components/schemas/CpoLocationDetailsInput"},"type":"array","maxItems":100,"minItems":1,"title":"Locations"}},"additionalProperties":false,"type":"object","required":["ocpi_version","ocpp_version","country_code","party_id","locations"],"title":"CreateOcpiCpoLocationRequest","description":"Flat body for ``POST /ocpi/location``.","example":{"country_code":"NL","locations":[{"address":"Keizersgracht 100","chargers":[{"brand_slug":"wallbox","connector_type":"IEC_62196_T2","evses":[{"connectors":[{"connector_id":"1","format":"SOCKET","max_amperage":32,"max_electric_power":22000,"max_voltage":400,"power_type":"AC_3_PHASE","standard":"IEC_62196_T2"}],"evse_uid":"NL-ABC-CP-KEIZERS-01-1"}],"identity":"CP-KEIZERS-01","model":"pulsar-plus","ocpp_version":"ocpp1.6","ws_url":"wss://evcharger.example.com/CP-KEIZERS-01"}],"city":"Amsterdam","coordinates":{"latitude":52.3676,"longitude":4.9041},"country":"NLD","name":"Keizersgracht Parking","postal_code":"1015CW","time_zone":"Europe/Amsterdam"}],"ocpi_version":"2.2.1","ocpp_version":"ocpp1.6","party_id":"ABC"}},"CreateOcpiCpoRequest":{"properties":{"partner":{"$ref":"#/components/schemas/OcpiPartnerInput"},"ocpi_version":{"type":"string","title":"Ocpi Version","description":"OCPI protocol version associated with this CPO partner."}},"additionalProperties":false,"type":"object","required":["partner","ocpi_version"],"title":"CreateOcpiCpoRequest","description":"Body for ``POST /ocpi/cpo``.\n\nThis endpoint creates the OCPI CPO partner only. It intentionally does not\nrequire OCPP fields or locations; charger/location topology belongs to\n``POST /ocpi/location``.","example":{"ocpi_version":"2.2.1","partner":{"business_details":{"logo_url":"https://abc-charging.example.com/logo.png","name":"ABC Charging B.V.","website":"https://abc-charging.example.com"},"country_code":"NL","name":"ABC Charging","ocpi_versions":["2.2.1"],"party_id":"ABC","role":"CPO"}}},"DeploymentRuntimeAction":{"type":"string","enum":["stop","restart","delete"],"title":"DeploymentRuntimeAction","description":"Runtime operations accepted by the deployment runtime-ops endpoint."},"DeploymentRuntimeOpsResult":{"properties":{"deployment_id":{"type":"string","title":"Deployment Id","examples":["dep-123"]},"status":{"type":"string","enum":["accepted","failed"],"title":"Status","examples":["accepted"]},"response":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Response","description":"JSON payload returned by the cluster runtime adapter."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","examples":["deployment_task_not_found"]}},"additionalProperties":true,"type":"object","required":["deployment_id","status"],"title":"DeploymentRuntimeOpsResult","description":"Per-deployment runtime operation result."},"EmptyCommandPayload":{"properties":{},"additionalProperties":false,"type":"object","title":"EmptyCommandPayload","description":"Empty payload for commands whose action is fully represented by the path.","example":{}},"EvseInput":{"properties":{"evse_uid":{"type":"string","maxLength":36,"minLength":1,"title":"Evse Uid"},"evse_id":{"anyOf":[{"type":"string","maxLength":48},{"type":"null"}],"title":"Evse Id"},"physical_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Physical Reference"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"connectors":{"items":{"$ref":"#/components/schemas/ConnectorInput"},"type":"array","minItems":1,"title":"Connectors"}},"additionalProperties":false,"type":"object","required":["evse_uid","connectors"],"title":"EvseInput","description":"OCPI EVSE inside a charger."},"FaultClearPayload":{"properties":{"evse_id":{"type":"integer","minimum":1.0,"title":"Evse Id","default":1,"examples":[1]},"connector_id":{"type":"integer","minimum":1.0,"title":"Connector Id","default":1,"examples":[1]}},"additionalProperties":false,"type":"object","title":"FaultClearPayload","description":"Fault clear payload."},"FaultInjectionPayload":{"properties":{"evse_id":{"type":"integer","minimum":1.0,"title":"Evse Id","default":1,"examples":[1]},"connector_id":{"type":"integer","minimum":1.0,"title":"Connector Id","default":1,"examples":[1]},"fault_type":{"type":"string","minLength":1,"title":"Fault Type","examples":["OverCurrent"]}},"additionalProperties":false,"type":"object","required":["fault_type"],"title":"FaultInjectionPayload","description":"Fault injection payload."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthLiveResponse":{"properties":{"status":{"type":"string","title":"Status","default":"ok"}},"additionalProperties":false,"type":"object","title":"HealthLiveResponse","description":"Liveness probe payload — process is up."},"HealthReadyResponse":{"properties":{"status":{"type":"string","title":"Status","description":"'ok' when every check passed, else 'not_ready'."},"database":{"type":"string","title":"Database","description":"'ok' or 'error'."},"mqtt":{"type":"string","title":"Mqtt","description":"'ok' or 'error'."}},"additionalProperties":false,"type":"object","required":["status","database","mqtt"],"title":"HealthReadyResponse","description":"Readiness probe payload — database and MQTT are reachable."},"HttpErrorResponse":{"properties":{"detail":{"type":"string","title":"Detail","description":"Human-readable error message returned by the API."}},"type":"object","required":["detail"],"title":"HttpErrorResponse","description":"Standard HTTP error payload returned by the API.\n\nReferenced by route ``responses`` via ``model=HttpErrorResponse`` so FastAPI\nregisters it under ``components.schemas`` and resolves the shared ``$ref``.","example":{"detail":"Entity loc-unknown not found in locations"}},"LocalAuthListEntry":{"properties":{"id_tag":{"type":"string","maxLength":20,"minLength":1,"title":"Id Tag","examples":["TAG-RFID-001"]},"expiry_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiry Date","examples":["2026-12-31T23:59:59Z"]},"parent_id_tag":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Parent Id Tag","examples":[null]}},"type":"object","required":["id_tag"],"title":"LocalAuthListEntry","description":"One local authorization list entry.","example":{"expiry_date":"2026-12-31T23:59:59Z","id_tag":"TAG-RFID-001"}},"LocalAuthListPayload":{"properties":{"list_version":{"type":"integer","minimum":0.0,"title":"List Version","examples":[1]},"update_type":{"type":"string","enum":["Full","Differential"],"title":"Update Type","examples":["Full"]},"entries":{"items":{"$ref":"#/components/schemas/LocalAuthListEntry"},"type":"array","title":"Entries"}},"additionalProperties":false,"type":"object","required":["list_version","update_type"],"title":"LocalAuthListPayload","description":"Local authorization list update payload."},"LocationCommandFailure":{"properties":{"identity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identity","examples":["CP-TEST-404"]},"error":{"type":"string","title":"Error","examples":["Charger not found"]}},"type":"object","required":["error"],"title":"LocationCommandFailure","description":"Failed charger result returned by location command endpoints.","example":{"error":"Charger not found","identity":"CP-TEST-404"}},"LocationQueuedCommandResult":{"properties":{"charger_id":{"type":"string","title":"Charger Id","examples":["dep-123"]},"identity":{"type":"string","title":"Identity","examples":["CP-TEST-001"]},"command":{"$ref":"#/components/schemas/QueuedCommandResponse"}},"type":"object","required":["charger_id","identity","command"],"title":"LocationQueuedCommandResult","description":"One queued command result item for a location-scoped command request.","example":{"charger_id":"dep-123","command":{"event_type":"start_transaction","id":"a1b2c3d4e5f6","ocpp_version":"ocpp1.6","payload":{"connector_id":1,"evse_id":1,"id_tag":"TAG-RFID-001"}},"identity":"CP-TEST-001"}},"OcpiBusinessDetails":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Registered business name."},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website","description":"Public website URL."},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"Public logo image URL."}},"additionalProperties":false,"type":"object","title":"OcpiBusinessDetails","description":"Optional OCPI business details for the partner."},"OcpiCoordinates":{"properties":{"latitude":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Latitude"},"longitude":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Longitude"}},"additionalProperties":false,"type":"object","required":["latitude","longitude"],"title":"OcpiCoordinates","description":"GPS coordinates as required by OCPI."},"OcpiLocationTemplateListResponse":{"properties":{"count":{"type":"integer","title":"Count","examples":[4]},"filters":{"$ref":"#/components/schemas/OcppTemplateFiltersResponse"},"templates":{"items":{"$ref":"#/components/schemas/OcppLocationTemplateResponse"},"type":"array","title":"Templates"}},"type":"object","required":["count","filters","templates"],"title":"OcpiLocationTemplateListResponse","description":"Template gallery returned by ``GET /ocpi/templates/locations``."},"OcpiPartnerInput":{"properties":{"country_code":{"type":"string","maxLength":2,"minLength":2,"title":"Country Code","description":"ISO 3166-1 alpha-2 country code."},"party_id":{"type":"string","maxLength":3,"minLength":3,"title":"Party Id","description":"3-character uppercase alphanumeric OCPI party ID."},"name":{"type":"string","title":"Name","description":"Human-readable partner name."},"role":{"type":"string","const":"CPO","title":"Role","description":"OCPI role. Only CPO is supported for this endpoint.","default":"CPO"},"ocpi_versions":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Ocpi Versions","description":"OCPI protocol versions supported by this partner."},"business_details":{"anyOf":[{"$ref":"#/components/schemas/OcpiBusinessDetails"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["country_code","party_id","name","ocpi_versions"],"title":"OcpiPartnerInput","description":"OCPI partner fields for ``POST /ocpi/cpo``."},"OcpiPartnerResponse":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"},"party_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Party Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"ocpi_versions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ocpi Versions"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"OcpiPartnerResponse","description":"Summary of the created OCPI partner."},"OcppAuthorizeIdTagCommandRequest":{"properties":{"target":{"$ref":"#/components/schemas/CommandTarget"},"payload":{"$ref":"#/components/schemas/AuthorizeIdTagPayload"}},"additionalProperties":false,"type":"object","required":["target","payload"],"title":"OcppAuthorizeIdTagCommandRequest"},"OcppBrandListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/BrandResponse"},"type":"array","title":"Data"},"total":{"type":"integer","title":"Total","examples":[266]},"page":{"type":"integer","title":"Page","examples":[1]},"limit":{"type":"integer","title":"Limit","examples":[20]}},"type":"object","required":["data","total","page","limit"],"title":"OcppBrandListResponse","description":"Paginated response containing charger brands.","example":{"data":[{"created_at":"2021-02-06T14:08:22Z","id":"4","name":"ABB","slug":"abb"}],"limit":20,"page":1,"total":266}},"OcppConfigurationCommandRequest":{"properties":{"target":{"$ref":"#/components/schemas/CommandTarget"},"payload":{"$ref":"#/components/schemas/ConfigurationChangePayload"}},"additionalProperties":false,"type":"object","required":["target","payload"],"title":"OcppConfigurationCommandRequest"},"OcppConnectorCommandRequest":{"properties":{"target":{"$ref":"#/components/schemas/CommandTarget"},"payload":{"$ref":"#/components/schemas/ConnectorPayload"}},"additionalProperties":false,"type":"object","required":["target"],"title":"OcppConnectorCommandRequest"},"OcppDeploymentRuntimeOpsRequest":{"properties":{"action":{"$ref":"#/components/schemas/DeploymentRuntimeAction","description":"Runtime operation to apply: stop, restart, or delete.","examples":["restart"]},"deployment_id":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Deployment Id","description":"One deployment id to operate on. Mutually exclusive with location_id.","examples":["dep-123"]},"location_id":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Location Id","description":"Operate on every deployment in this location. Mutually exclusive with deployment_id.","examples":["4090477f-a416-4515-a302-97aa344a0a2a"]}},"additionalProperties":false,"type":"object","required":["action"],"title":"OcppDeploymentRuntimeOpsRequest","description":"Request body for operational runtime actions.\n\nExactly one target is required:\n- ``deployment_id`` operates that one cluster deployment.\n- ``location_id`` lists deployments in the location and operates each.","examples":[{"action":"restart","deployment_id":"dep-123"},{"action":"stop","location_id":"4090477f-a416-4515-a302-97aa344a0a2a"}]},"OcppDeploymentRuntimeOpsResponse":{"properties":{"action":{"$ref":"#/components/schemas/DeploymentRuntimeAction"},"target_type":{"type":"string","enum":["deployment","location"],"title":"Target Type"},"deployment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deployment Id"},"location_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Id"},"accepted_count":{"type":"integer","title":"Accepted Count"},"failed_count":{"type":"integer","title":"Failed Count"},"results":{"items":{"$ref":"#/components/schemas/DeploymentRuntimeOpsResult"},"type":"array","title":"Results"}},"additionalProperties":true,"type":"object","required":["action","target_type","accepted_count","failed_count","results"],"title":"OcppDeploymentRuntimeOpsResponse","description":"Aggregated response for one operational runtime request.","example":{"accepted_count":2,"action":"restart","failed_count":0,"location_id":"4090477f-a416-4515-a302-97aa344a0a2a","results":[{"deployment_id":"dep-123","response":{"action":"restart","status":"PENDING"},"status":"accepted"}],"target_type":"location"}},"OcppEmptyCommandRequest":{"properties":{"target":{"$ref":"#/components/schemas/CommandTarget"},"payload":{"$ref":"#/components/schemas/EmptyCommandPayload"}},"additionalProperties":false,"type":"object","required":["target"],"title":"OcppEmptyCommandRequest"},"OcppFaultClearCommandRequest":{"properties":{"target":{"$ref":"#/components/schemas/CommandTarget"},"payload":{"$ref":"#/components/schemas/FaultClearPayload"}},"additionalProperties":false,"type":"object","required":["target"],"title":"OcppFaultClearCommandRequest"},"OcppFaultInjectionCommandRequest":{"properties":{"target":{"$ref":"#/components/schemas/CommandTarget"},"payload":{"$ref":"#/components/schemas/FaultInjectionPayload"}},"additionalProperties":false,"type":"object","required":["target","payload"],"title":"OcppFaultInjectionCommandRequest"},"OcppLocalAuthListCommandRequest":{"properties":{"target":{"$ref":"#/components/schemas/CommandTarget"},"payload":{"$ref":"#/components/schemas/LocalAuthListPayload"}},"additionalProperties":false,"type":"object","required":["target","payload"],"title":"OcppLocalAuthListCommandRequest"},"OcppLocationCommandResponse":{"properties":{"targeted_count":{"type":"integer","title":"Targeted Count","examples":[2]},"queued_count":{"type":"integer","title":"Queued Count","examples":[2]},"failed_count":{"type":"integer","title":"Failed Count","examples":[0]},"results":{"items":{"$ref":"#/components/schemas/LocationQueuedCommandResult"},"type":"array","title":"Results"},"failed":{"items":{"$ref":"#/components/schemas/LocationCommandFailure"},"type":"array","title":"Failed"}},"type":"object","required":["targeted_count","queued_count","failed_count","results","failed"],"title":"OcppLocationCommandResponse","description":"Response body returned by location-scoped charger command endpoints.","example":{"failed":[],"failed_count":0,"queued_count":2,"results":[{"charger_id":"dep-123","command":{"event_type":"start_transaction","id":"a1b2c3d4e5f6","ocpp_version":"ocpp1.6","payload":{"connector_id":1,"evse_id":1,"id_tag":"TAG-RFID-001"}},"identity":"CP-TEST-001"}],"targeted_count":2}},"OcppLocationTemplateListResponse":{"properties":{"count":{"type":"integer","title":"Count","examples":[4]},"filters":{"$ref":"#/components/schemas/OcppTemplateFiltersResponse"},"templates":{"items":{"$ref":"#/components/schemas/OcppLocationTemplateResponse"},"type":"array","title":"Templates"}},"type":"object","required":["count","filters","templates"],"title":"OcppLocationTemplateListResponse","description":"Template gallery returned by ``GET /evcharger/templates/locations``."},"OcppLocationTemplateResponse":{"properties":{"name":{"type":"string","title":"Name","examples":["Type 2 AC city charger — TotalEnergies"]},"slug":{"type":"string","title":"Slug","examples":["ocpp-16-ocpi-221-totalenergies-type-2"]},"description":{"type":"string","title":"Description","examples":["Ready-to-use OCPP + OCPI create body."]},"cpo_name":{"type":"string","title":"Cpo Name","examples":["TotalEnergies"]},"cpo_slug":{"type":"string","title":"Cpo Slug","examples":["totalenergies"]},"party_id":{"type":"string","title":"Party Id","examples":["TEF"]},"ocpp_version":{"type":"string","title":"Ocpp Version","examples":["ocpp1.6"]},"ocpi_version":{"type":"string","title":"Ocpi Version","examples":["2.2.1"]},"connector_type":{"type":"string","title":"Connector Type","examples":["IEC_62196_T2"]},"body":{"additionalProperties":true,"type":"object","title":"Body","description":"Request body directly usable with the OCPP + OCPI create endpoint."}},"additionalProperties":true,"type":"object","required":["name","slug","description","cpo_name","cpo_slug","party_id","ocpp_version","ocpi_version","connector_type","body"],"title":"OcppLocationTemplateResponse","description":"One ready-to-POST OCPP + OCPI location template.","example":{"body":{"ocpi_version":"2.2.1","ocpp_version":"ocpp1.6"},"connector_type":"IEC_62196_T2","cpo_name":"TotalEnergies","cpo_slug":"totalenergies","description":"Ready-to-use OCPP + OCPI create body.","name":"Type 2 AC city charger — TotalEnergies — OCPP 1.6 + OCPI 2.2.1","ocpi_version":"2.2.1","ocpp_version":"ocpp1.6","party_id":"TEF","slug":"ocpp-16-ocpi-221-totalenergies-type-2-ac-city-charger"}},"OcppLogListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ChargerLogEntry"},"type":"array","title":"Data"},"total":{"type":"integer","title":"Total","examples":[1]},"limit":{"type":"integer","title":"Limit","examples":[1000]},"offset":{"type":"integer","title":"Offset","examples":[0]}},"type":"object","required":["data","total","limit","offset"],"title":"OcppLogListResponse","description":"Paginated response returned by the charger logs endpoint.","example":{"data":[{"action":"BootNotification","direction":"cp_to_csms","message":"[2,\"boot-001\",\"BootNotification\",{\"charge_point_vendor\":\"OCPPLAB\",\"charge_point_model\":\"SDK-DC-50\"}]","timestamp":"2026-04-09T09:30:00Z"}],"limit":1000,"offset":0,"total":1}},"OcppModelListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/OcppModelResponse"},"type":"array","title":"Data"},"total":{"type":"integer","title":"Total","examples":[13]},"page":{"type":"integer","title":"Page","examples":[1]},"limit":{"type":"integer","title":"Limit","examples":[50]}},"type":"object","required":["data","total","page","limit"],"title":"OcppModelListResponse","description":"Paginated response containing charger models.","example":{"data":[{"brand_id":"4","brand_slug":"abb","connector_count":1,"connector_types":["Type2"],"created_at":"2021-02-06T14:08:22Z","current_type":"AC","id":"9","name":"Terra AC Wallbox","slug":"abb_terra_ac_wallbox","supported_kwh":[7.4,22.0]}],"limit":50,"page":1,"total":13}},"OcppModelResponse":{"properties":{"id":{"type":"string","title":"Id","examples":["9"]},"slug":{"type":"string","title":"Slug","examples":["abb_terra_ac_wallbox"]},"name":{"type":"string","title":"Name","examples":["Terra AC Wallbox"]},"brand_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Slug","examples":["abb"]},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Id","examples":["4"]},"connector_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Connector Count","examples":[1]},"current_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Type","examples":["AC"]},"supported_kwh":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Supported Kwh","examples":[[7.4,22.0]]},"connector_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Connector Types","examples":[["Type2"]]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","examples":["2021-02-06T14:08:22Z"]}},"type":"object","required":["id","slug","name"],"title":"OcppModelResponse","description":"Model catalog entry exposed by the API.","example":{"brand_id":"4","brand_slug":"abb","connector_count":1,"connector_types":["Type2"],"created_at":"2021-02-06T14:08:22Z","current_type":"AC","id":"9","name":"Terra AC Wallbox","slug":"abb_terra_ac_wallbox","supported_kwh":[7.4,22.0]}},"OcppPowerUpdateCommandRequest":{"properties":{"target":{"$ref":"#/components/schemas/CommandTarget"},"payload":{"$ref":"#/components/schemas/PowerUpdatePayload"}},"additionalProperties":false,"type":"object","required":["target","payload"],"title":"OcppPowerUpdateCommandRequest"},"OcppProxyMessageRequest":{"properties":{"target":{"$ref":"#/components/schemas/CommandTarget"},"payload":{"$ref":"#/components/schemas/ProxyMessagePayload"}},"additionalProperties":false,"type":"object","required":["target","payload"],"title":"OcppProxyMessageRequest"},"OcppStartSessionCommandRequest":{"properties":{"target":{"$ref":"#/components/schemas/CommandTarget"},"payload":{"$ref":"#/components/schemas/StartSessionPayload"}},"additionalProperties":false,"type":"object","required":["target","payload"],"title":"OcppStartSessionCommandRequest"},"OcppStopSessionCommandRequest":{"properties":{"target":{"$ref":"#/components/schemas/CommandTarget"},"payload":{"$ref":"#/components/schemas/StopSessionPayload"}},"additionalProperties":false,"type":"object","required":["target"],"title":"OcppStopSessionCommandRequest"},"OcppTemplateFiltersResponse":{"properties":{"ocpp_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ocpp Version","examples":["ocpp1.6"]},"ocpi_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ocpi Version","examples":["2.2.1"]},"connector_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connector Type","examples":["IEC_62196_T2"]},"include_all":{"type":"boolean","title":"Include All","default":false,"examples":[false]}},"type":"object","title":"OcppTemplateFiltersResponse","description":"Filters echoed by the local template gallery."},"OcppVirtualDeploymentLocationRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Location display name.","examples":["La Defense Charging Hub"]},"address":{"type":"string","minLength":1,"title":"Address","examples":["1 Parvis de la Defense"]},"city":{"type":"string","minLength":1,"title":"City","examples":["Puteaux"]},"country":{"type":"string","minLength":1,"title":"Country","examples":["FRA"]},"coordinates":{"$ref":"#/components/schemas/VirtualLocationCoordinates","description":"GPS coordinates; lat in [-90,90], lng in [-180,180]."},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","examples":["Europe/Paris"]},"owner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Name"},"public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Public"},"chargers":{"items":{"$ref":"#/components/schemas/VirtualLocationChargerItem"},"type":"array","minItems":1,"title":"Chargers","description":"Chargers to deploy at this location."}},"additionalProperties":true,"type":"object","required":["name","address","city","country","coordinates","chargers"],"title":"OcppVirtualDeploymentLocationRequest","description":"Public request body for POST /evcharger/deployment-location.\n\nMirrors the ``virtual-location`` Edge Function request shape (see\n``supabase/functions/virtual-location/schema.ts``). All location fields\nare validated here so we surface 422 at the API boundary rather than\nbouncing off the Edge Function with a 400.","example":{"address":"1 Parvis de la Defense","chargers":[{"brand_slug":"wallbox","connector_type":"Type2","identity":"CP-001","model":"wallbox-pulsar-plus","ws_url":"wss://evcharger.example.com"}],"city":"Puteaux","coordinates":{"lat":48.892,"lng":2.238},"country":"FRA","name":"La Defense Charging Hub","timezone":"Europe/Paris"}},"OcppVirtualDeploymentRequest":{"properties":{"identity":{"type":"string","title":"Identity","description":"Unique charge point identity.","examples":["CP-TEST-001"]},"model":{"type":"string","title":"Model","examples":["wallbox-pulsar-plus"]},"ws_url":{"type":"string","minLength":1,"title":"Ws Url","description":"OCPP WebSocket URL.","examples":["wss://evcharger.example.com"]},"ocpp_version":{"type":"string","title":"Ocpp Version","examples":["OCPP1.6"]},"charger_name":{"type":"string","title":"Charger Name","examples":["Bay A01"]},"location_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Id"},"security_profile":{"anyOf":[{"type":"integer","maximum":3.0,"minimum":0.0},{"type":"null"}],"title":"Security Profile"},"authorization_key":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Authorization Key"},"connector_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connector Type","examples":["Type2"]},"power_kwh":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Power Kwh","examples":[7.4]}},"type":"object","required":["identity","model","ws_url","ocpp_version","charger_name"],"title":"OcppVirtualDeploymentRequest","description":"Public request body for POST /evcharger/deployment.","example":{"charger_name":"Bay A01","identity":"CP-TEST-001","model":"wallbox-pulsar-plus","ocpp_version":"OCPP1.6","ws_url":"wss://evcharger.example.com"}},"OcppVirtualDeploymentResponse":{"properties":{"id":{"type":"string","title":"Id","examples":["9167af9e-5157-4c45-9694-ae8ede085fae"]},"deployment_id":{"type":"string","title":"Deployment Id","examples":["vd-cp-zzz-test-001-1713411e-a568-402a-a5fe-22b8ce2d59e3"]},"identity":{"type":"string","title":"Identity","examples":["CP-ZZZ-TEST-001"]},"ocpp_version":{"type":"string","title":"Ocpp Version","examples":["ocpp1.6"]},"provisioning_state":{"type":"string","title":"Provisioning State","examples":["READY"]}},"type":"object","required":["id","deployment_id","identity","ocpp_version","provisioning_state"],"title":"OcppVirtualDeploymentResponse","description":"Response from POST /evcharger/deployment — the created deployment resource.\n\nOnly the deployment record is exposed; the internal ``charger`` block and\n``organization_id`` are intentionally omitted. ``extra=\"ignore\"`` drops any\nother fields the Edge Function returns.","example":{"deployment_id":"vd-cp-zzz-test-001-1713411e-a568-402a-a5fe-22b8ce2d59e3","id":"9167af9e-5157-4c45-9694-ae8ede085fae","identity":"CP-ZZZ-TEST-001","ocpp_version":"ocpp1.6","provisioning_state":"READY"}},"PowerUpdatePayload":{"properties":{"evse_id":{"type":"integer","minimum":1.0,"title":"Evse Id","default":1,"examples":[1]},"connector_id":{"type":"integer","minimum":1.0,"title":"Connector Id","default":1,"examples":[1]},"power_w":{"type":"integer","minimum":0.0,"title":"Power W","examples":[7000]}},"additionalProperties":false,"type":"object","required":["power_w"],"title":"PowerUpdatePayload","description":"Power update payload."},"ProxyMessagePayload":{"properties":{"action":{"type":"string","minLength":1,"title":"Action","examples":["TriggerMessage"]},"payload":{"additionalProperties":true,"type":"object","title":"Payload","examples":[{"requestedMessage":"Heartbeat"}]}},"additionalProperties":false,"type":"object","required":["action"],"title":"ProxyMessagePayload","description":"Raw OCPP proxy message payload for one charger."},"QueuedCommandResponse":{"properties":{"id":{"type":"string","title":"Id","examples":["a1b2c3d4e5f6"]},"event_type":{"type":"string","title":"Event Type","examples":["start_transaction"]},"ocpp_version":{"type":"string","title":"Ocpp Version","examples":["ocpp1.6"]},"payload":{"additionalProperties":true,"type":"object","title":"Payload","description":"Command payload sent to the simulator queue."}},"type":"object","required":["id","event_type","ocpp_version","payload"],"title":"QueuedCommandResponse","description":"Queued command payload returned by simulator action endpoints.","example":{"event_type":"start_transaction","id":"a1b2c3d4e5f6","ocpp_version":"ocpp1.6","payload":{"connector_id":1,"evse_id":1,"id_tag":"RFID-001"}}},"StartSessionPayload":{"properties":{"id_tag":{"type":"string","maxLength":20,"minLength":1,"title":"Id Tag","examples":["TAG-RFID-001"]},"connector_id":{"type":"integer","minimum":1.0,"title":"Connector Id","default":1,"examples":[1]},"duration_seconds":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Duration Seconds","default":300,"examples":[300]},"target_energy_kwh":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Target Energy Kwh","default":20.0,"examples":[20.0]}},"additionalProperties":false,"type":"object","required":["id_tag"],"title":"StartSessionPayload","description":"High-level simulator session start payload."},"StopSessionPayload":{"properties":{"connector_id":{"type":"integer","minimum":1.0,"title":"Connector Id","default":1,"examples":[1]}},"additionalProperties":false,"type":"object","title":"StopSessionPayload","description":"High-level simulator session stop payload."},"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"},"VirtualLocationChargerItem":{"properties":{"identity":{"type":"string","title":"Identity","description":"Unique charge point identity.","examples":["CP-001"]},"brand_slug":{"type":"string","title":"Brand Slug","examples":["wallbox"]},"model":{"type":"string","title":"Model","examples":["wallbox-pulsar-plus"]},"connector_type":{"type":"string","title":"Connector Type","examples":["Type2"]},"ws_url":{"type":"string","minLength":1,"title":"Ws Url","examples":["wss://evcharger.example.com"]},"ocpp_version":{"type":"string","title":"Ocpp Version","default":"OCPP1.6","examples":["OCPP1.6"]},"security_profile":{"anyOf":[{"type":"integer","maximum":3.0,"minimum":0.0},{"type":"null"}],"title":"Security Profile"},"authorization_key":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Authorization Key"},"charge_point_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Charge Point Name"}},"additionalProperties":true,"type":"object","required":["identity","brand_slug","model","connector_type","ws_url"],"title":"VirtualLocationChargerItem","description":"One charger inside a deployment-location request."},"VirtualLocationCoordinates":{"properties":{"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat","examples":[48.892]},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng","examples":[2.238]}},"type":"object","required":["lat","lng"],"title":"VirtualLocationCoordinates","description":"GPS coordinates for a virtual-location request."}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}