{"openapi":"3.1.0","info":{"title":"AskaCharge API","version":"0.1.0"},"paths":{"/api/auth/login":{"post":{"tags":["auth"],"summary":"Login","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login_api_auth_login_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/SessionInfo"},{"$ref":"#/components/schemas/Pending2FA"}],"title":"Response Login Api Auth Login Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login/2fa":{"post":{"tags":["auth"],"summary":"Login 2Fa","description":"Segundo paso del login para brand_admins con 2FA activado (ver /auth/login).","operationId":"login_2fa_api_auth_login_2fa_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Complete2FALogin"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/refresh":{"post":{"tags":["auth"],"summary":"Refresh","description":"Rota el refresh token (cookie httpOnly) y emite un access token nuevo.","operationId":"refresh_api_auth_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionInfo"}}}}}}},"/api/auth/session":{"get":{"tags":["auth"],"summary":"Session Info","description":"Identidad real de la sesión, leída de la cookie httpOnly.\n\nEl frontend sacaba rol y brand_id del parámetro `_m` de la URL del magic\nlink (ver _readMagicMeta en AuthContext.jsx), así que cualquiera podía\nmontarse un `?_m=` con role=superadmin y cargar la carcasa del panel de\nadministración. El backend rechazaba todas las llamadas, pero la UI no\ndebería fiarse de la barra de direcciones para nada.","operationId":"session_info_api_auth_session_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionInfo"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auth/change-password":{"put":{"tags":["auth"],"summary":"Change Password","operationId":"change_password_api_auth_change_password_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auth/logout":{"post":{"tags":["auth"],"summary":"Logout","operationId":"logout_api_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/brands":{"get":{"tags":["superadmin"],"summary":"List Brands","operationId":"list_brands_api_admin_brands_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["superadmin"],"summary":"Create Brand","operationId":"create_brand_api_admin_brands_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/brands/{brand_id}":{"get":{"tags":["superadmin"],"summary":"Get Brand","operationId":"get_brand_api_admin_brands__brand_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["superadmin"],"summary":"Update Brand","operationId":"update_brand_api_admin_brands__brand_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["superadmin"],"summary":"Delete Brand","operationId":"delete_brand_api_admin_brands__brand_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/brands/{brand_id}/users":{"post":{"tags":["superadmin"],"summary":"Create Brand User","operationId":"create_brand_user_api_admin_brands__brand_id__users_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandAdminCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/brands/{brand_id}/extend-trial":{"post":{"tags":["superadmin"],"summary":"Extend Trial","operationId":"extend_trial_api_admin_brands__brand_id__extend_trial_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/brands/{brand_id}/activate":{"post":{"tags":["superadmin"],"summary":"Activate Brand","operationId":"activate_brand_api_admin_brands__brand_id__activate_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/brands/{brand_id}/suspend":{"post":{"tags":["superadmin"],"summary":"Suspend Brand","operationId":"suspend_brand_api_admin_brands__brand_id__suspend_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/confirm-email/{email}":{"post":{"tags":["superadmin"],"summary":"Confirm Email Manual","description":"Confirmación manual de email — solo para superadmin / entornos de desarrollo.","operationId":"confirm_email_manual_api_admin_confirm_email__email__post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/brands/{brand_id}/impersonate":{"post":{"tags":["superadmin"],"summary":"Impersonate Brand","description":"Genera token JWT para el admin de la marca (soporte técnico).","operationId":"impersonate_brand_api_admin_brands__brand_id__impersonate_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/invoices":{"get":{"tags":["superadmin"],"summary":"List All Invoices","operationId":"list_all_invoices_api_admin_invoices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/brands/{brand_id}/invoices":{"get":{"tags":["superadmin"],"summary":"List Brand Invoices","operationId":"list_brand_invoices_api_admin_brands__brand_id__invoices_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["superadmin"],"summary":"Create Brand Invoice","operationId":"create_brand_invoice_api_admin_brands__brand_id__invoices_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/invoices/{invoice_id}":{"put":{"tags":["superadmin"],"summary":"Update Invoice","operationId":"update_invoice_api_admin_invoices__invoice_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["superadmin"],"summary":"Delete Invoice","operationId":"delete_invoice_api_admin_invoices__invoice_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/invoices/{invoice_id}/pdf":{"get":{"tags":["superadmin"],"summary":"Download Brand Invoice Pdf","operationId":"download_brand_invoice_pdf_api_admin_invoices__invoice_id__pdf_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/invoices/{invoice_id}/charge":{"post":{"tags":["superadmin"],"summary":"Charge Invoice","description":"Cobra una factura pendiente cargando el método de pago por defecto de la marca.","operationId":"charge_invoice_api_admin_invoices__invoice_id__charge_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/contactados":{"get":{"tags":["superadmin"],"summary":"List Contactados","description":"Lista de contactados: direcciones (y dominios) que lleva Javier en persona y a\nlos que ningún agente escribe. Las altas las hace Olga cuando Javier le dice\n\"no mandes más emails a X\"; desde aquí se consultan y se dan de baja.","operationId":"list_contactados_api_admin_contactados_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["superadmin"],"summary":"Add Contactado","description":"Alta manual desde el panel; el mismo alta que hace Olga por Telegram.","operationId":"add_contactado_api_admin_contactados_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactadoCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/contactados/{valor}":{"delete":{"tags":["superadmin"],"summary":"Delete Contactado","description":"Saca a alguien de la lista: los agentes vuelven a poder escribirle. `valor` es\nel email o el dominio ('@ejemplo.com') tal y como aparece en la lista.","operationId":"delete_contactado_api_admin_contactados__valor__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"valor","in":"path","required":true,"schema":{"type":"string","title":"Valor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/tbai/info":{"get":{"tags":["superadmin"],"summary":"Tbai Software Info","description":"Consulta en pantalla del software garante TicketBAI (Orden Foral 1482/2020,\nart. 9): identificación del software y del desarrollador, sin necesidad de\nemitir ninguna factura. Pensada para mostrarse durante una inspección\npresencial de Batuz.","operationId":"tbai_software_info_api_admin_tbai_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/charge-points":{"get":{"tags":["brand"],"summary":"List Charge Points","operationId":"list_charge_points_api_brand_charge_points_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["brand"],"summary":"Register Charge Point","operationId":"register_charge_point_api_brand_charge_points_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChargePointCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/charge-points/{cp_id}":{"get":{"tags":["brand"],"summary":"Get Charge Point","operationId":"get_charge_point_api_brand_charge_points__cp_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"cp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["brand"],"summary":"Delete Charge Point","operationId":"delete_charge_point_api_brand_charge_points__cp_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"cp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["brand"],"summary":"Update Charge Point","operationId":"update_charge_point_api_brand_charge_points__cp_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"cp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChargePointUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/charge-points/{cp_id}/access":{"patch":{"tags":["brand"],"summary":"Update Chargepoint Access","operationId":"update_chargepoint_access_api_brand_charge_points__cp_id__access_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"cp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/charge-points/{cp_id}/mid":{"patch":{"tags":["brand"],"summary":"Update Chargepoint Mid","description":"Estado de certificación MID (Directiva 2014/32/UE), usado en el Informe de Cumplimiento.","operationId":"update_chargepoint_mid_api_brand_charge_points__cp_id__mid_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"cp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/charge-points/{cp_id}/client":{"patch":{"tags":["brand"],"summary":"Update Chargepoint Client","description":"Asigna o desasigna un cliente a un cargador. El cliente debe pertenecer a la misma marca.","operationId":"update_chargepoint_client_api_brand_charge_points__cp_id__client_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"cp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/charge-points/{cp_id}/terminal":{"put":{"tags":["brand"],"summary":"Configure Terminal","operationId":"configure_terminal_api_brand_charge_points__cp_id__terminal_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"cp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/charge-points/{cp_id}/ws-auth":{"put":{"tags":["brand"],"summary":"Configure Ws Auth","description":"Genera/rota la credencial Basic Auth (Security Profile 2) que el cargador debe\nenviar en el handshake del WebSocket OCPP. Es obligatoria: mientras ws_secret sea\nNULL el cargador registrado no puede conectarse, así que hay que llamar aquí antes\nde ponerlo en marcha (y `clear` lo deja fuera de servicio a propósito).","operationId":"configure_ws_auth_api_brand_charge_points__cp_id__ws_auth_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"cp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Id"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/transactions":{"get":{"tags":["brand"],"summary":"List Transactions","operationId":"list_transactions_api_brand_transactions_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period"}},{"name":"cp_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cp Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/transactions/export.csv":{"get":{"tags":["brand"],"summary":"Export Transactions Csv","operationId":"export_transactions_csv_api_brand_transactions_export_csv_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"month","title":"Period"}},{"name":"cp_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cp Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/transactions/export.xlsx":{"get":{"tags":["brand"],"summary":"Export Transactions Xlsx","operationId":"export_transactions_xlsx_api_brand_transactions_export_xlsx_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period"}},{"name":"cp_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cp Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/transactions/{tx_id}":{"get":{"tags":["brand"],"summary":"Get Transaction","operationId":"get_transaction_api_brand_transactions__tx_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tx_id","in":"path","required":true,"schema":{"type":"string","title":"Tx Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/transactions/{tx_id}/timeline":{"get":{"tags":["brand"],"summary":"Get Transaction Timeline","operationId":"get_transaction_timeline_api_brand_transactions__tx_id__timeline_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tx_id","in":"path","required":true,"schema":{"type":"string","title":"Tx Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/id-tags":{"get":{"tags":["brand"],"summary":"List Id Tags","operationId":"list_id_tags_api_brand_id_tags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["brand"],"summary":"Create Id Tag","operationId":"create_id_tag_api_brand_id_tags_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdTagCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/id-tags/{tag_id}":{"put":{"tags":["brand"],"summary":"Update Id Tag","operationId":"update_id_tag_api_brand_id_tags__tag_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","title":"Tag Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdTagUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["brand"],"summary":"Delete Id Tag","operationId":"delete_id_tag_api_brand_id_tags__tag_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","title":"Tag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/dashboard/stats":{"get":{"tags":["brand"],"summary":"Dashboard Stats","operationId":"dashboard_stats_api_brand_dashboard_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/chargers/performance":{"get":{"tags":["analytics"],"summary":"Chargers Performance","operationId":"chargers_performance_api_brand_chargers_performance_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"month","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/dashboard/live":{"get":{"tags":["analytics"],"summary":"Dashboard Live","operationId":"dashboard_live_api_brand_dashboard_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/public-page":{"get":{"tags":["brand"],"summary":"Get Public Page","operationId":"get_public_page_api_brand_public_page_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["brand"],"summary":"Update Public Page","operationId":"update_public_page_api_brand_public_page_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/hero-image":{"post":{"tags":["brand"],"summary":"Upload Hero Image","operationId":"upload_hero_image_api_brand_hero_image_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_hero_image_api_brand_hero_image_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/logo":{"post":{"tags":["brand"],"summary":"Upload Logo","operationId":"upload_logo_api_brand_logo_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_logo_api_brand_logo_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/dashboard/alerts":{"get":{"tags":["brand"],"summary":"Dashboard Alerts","operationId":"dashboard_alerts_api_brand_dashboard_alerts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/dashboard/alerts/{anomaly_id}/acknowledge":{"post":{"tags":["brand"],"summary":"Acknowledge Anomaly","operationId":"acknowledge_anomaly_api_brand_dashboard_alerts__anomaly_id__acknowledge_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"anomaly_id","in":"path","required":true,"schema":{"type":"string","title":"Anomaly Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/ocpi/parties":{"get":{"tags":["brand"],"summary":"List Ocpi Parties","operationId":"list_ocpi_parties_api_brand_ocpi_parties_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["brand"],"summary":"Create Ocpi Party","description":"Añade una conexión OCPI (hub o eMSP bilateral). TOKEN_A = su token para llamarles.","operationId":"create_ocpi_party_api_brand_ocpi_parties_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/ocpi/parties/{party_id}":{"delete":{"tags":["brand"],"summary":"Delete Ocpi Party","operationId":"delete_ocpi_party_api_brand_ocpi_parties__party_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"party_id","in":"path","required":true,"schema":{"type":"string","title":"Party Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/location-limits":{"get":{"tags":["brand"],"summary":"List Location Limits","operationId":"list_location_limits_api_brand_location_limits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["brand"],"summary":"Upsert Location Limit","operationId":"upsert_location_limit_api_brand_location_limits_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/location-limits/{limit_id}":{"delete":{"tags":["brand"],"summary":"Delete Location Limit","operationId":"delete_location_limit_api_brand_location_limits__limit_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit_id","in":"path","required":true,"schema":{"type":"string","title":"Limit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/revenue-shares":{"get":{"tags":["brand"],"summary":"List Revenue Shares","operationId":"list_revenue_shares_api_brand_revenue_shares_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["brand"],"summary":"Create Revenue Share","operationId":"create_revenue_share_api_brand_revenue_shares_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/revenue-shares/{share_id}":{"delete":{"tags":["brand"],"summary":"Delete Revenue Share","operationId":"delete_revenue_share_api_brand_revenue_shares__share_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"share_id","in":"path","required":true,"schema":{"type":"string","title":"Share Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/webhooks":{"get":{"tags":["brand"],"summary":"List Webhooks","operationId":"list_webhooks_api_brand_webhooks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["brand"],"summary":"Create Webhook","operationId":"create_webhook_api_brand_webhooks_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/webhooks/{wh_id}":{"put":{"tags":["brand"],"summary":"Update Webhook","operationId":"update_webhook_api_brand_webhooks__wh_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"wh_id","in":"path","required":true,"schema":{"type":"string","title":"Wh Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["brand"],"summary":"Delete Webhook","operationId":"delete_webhook_api_brand_webhooks__wh_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"wh_id","in":"path","required":true,"schema":{"type":"string","title":"Wh Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/webhooks/{wh_id}/deliveries":{"get":{"tags":["brand"],"summary":"Webhook Deliveries","operationId":"webhook_deliveries_api_brand_webhooks__wh_id__deliveries_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"wh_id","in":"path","required":true,"schema":{"type":"string","title":"Wh Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/charge-points/{cp_id}/connectors":{"get":{"tags":["brand"],"summary":"List Connectors","operationId":"list_connectors_api_brand_charge_points__cp_id__connectors_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"cp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/commands/remote-start":{"post":{"tags":["brand"],"summary":"Remote Start","operationId":"remote_start_api_brand_commands_remote_start_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/remote-stop":{"post":{"tags":["brand"],"summary":"Remote Stop","operationId":"remote_stop_api_brand_commands_remote_stop_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/reset":{"post":{"tags":["brand"],"summary":"Reset Cp","operationId":"reset_cp_api_brand_commands_reset_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/change-availability":{"post":{"tags":["brand"],"summary":"Change Availability","operationId":"change_availability_api_brand_commands_change_availability_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/get-configuration":{"post":{"tags":["brand"],"summary":"Get Configuration","operationId":"get_configuration_api_brand_commands_get_configuration_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/change-configuration":{"post":{"tags":["brand"],"summary":"Change Configuration","operationId":"change_configuration_api_brand_commands_change_configuration_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/get-diagnostics":{"post":{"tags":["brand"],"summary":"Get Diagnostics","operationId":"get_diagnostics_api_brand_commands_get_diagnostics_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/update-firmware":{"post":{"tags":["brand"],"summary":"Update Firmware","operationId":"update_firmware_api_brand_commands_update_firmware_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/set-charging-profile":{"post":{"tags":["brand"],"summary":"Set Charging Profile","operationId":"set_charging_profile_api_brand_commands_set_charging_profile_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/clear-charging-profile":{"post":{"tags":["brand"],"summary":"Clear Charging Profile","operationId":"clear_charging_profile_api_brand_commands_clear_charging_profile_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/send-local-list":{"post":{"tags":["brand"],"summary":"Send Local List","operationId":"send_local_list_api_brand_commands_send_local_list_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/install-certificate":{"post":{"tags":["brand"],"summary":"Install Certificate","operationId":"install_certificate_api_brand_commands_install_certificate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/get-log":{"post":{"tags":["brand"],"summary":"Get Log","operationId":"get_log_api_brand_commands_get_log_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/signed-update-firmware":{"post":{"tags":["brand"],"summary":"Signed Update Firmware","operationId":"signed_update_firmware_api_brand_commands_signed_update_firmware_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/analytics/co2":{"get":{"tags":["brand"],"summary":"Co2 Stats","operationId":"co2_stats_api_brand_analytics_co2_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/fleet-invoices":{"get":{"tags":["brand"],"summary":"List Fleet Invoices","operationId":"list_fleet_invoices_api_brand_fleet_invoices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/fleet-invoices/generate":{"post":{"tags":["brand"],"summary":"Trigger Fleet Invoicing","description":"Genera facturas fleet manualmente para un período concreto.","operationId":"trigger_fleet_invoicing_api_brand_fleet_invoices_generate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body","default":{}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/fleet/home-reimbursements":{"get":{"tags":["brand"],"summary":"List Home Reimbursements","operationId":"list_home_reimbursements_api_brand_fleet_home_reimbursements_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"pending","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/fleet/home-reimbursements/{session_id}":{"put":{"tags":["brand"],"summary":"Review Home Reimbursement","operationId":"review_home_reimbursement_api_brand_fleet_home_reimbursements__session_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/clients/{client_id}/gdpr-export":{"get":{"tags":["brand"],"summary":"Gdpr Export Client","description":"Exporta todos los datos de un cliente en JSON (cumplimiento GDPR Art. 20).","operationId":"gdpr_export_client_api_brand_clients__client_id__gdpr_export_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/clients/{client_id}/gdpr-delete":{"delete":{"tags":["brand"],"summary":"Gdpr Delete Client","description":"Anonimiza los datos personales del cliente (Art. 17 GDPR — derecho al olvido).","operationId":"gdpr_delete_client_api_brand_clients__client_id__gdpr_delete_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/clients/{client_id}/wallet":{"get":{"tags":["brand"],"summary":"Get Client Wallet","operationId":"get_client_wallet_api_brand_clients__client_id__wallet_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/clients/{client_id}/wallet/adjust":{"post":{"tags":["brand"],"summary":"Adjust Client Wallet","description":"Ajuste manual de saldo (recarga o descuento) por el operador.","operationId":"adjust_client_wallet_api_brand_clients__client_id__wallet_adjust_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/commands/request-start-transaction":{"post":{"tags":["brand"],"summary":"Request Start Transaction","description":"OCPP 2.0.1 — inicia sesión de carga remotamente.","operationId":"request_start_transaction_api_brand_commands_request_start_transaction_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/request-stop-transaction":{"post":{"tags":["brand"],"summary":"Request Stop Transaction","description":"OCPP 2.0.1 — detiene sesión de carga remotamente.","operationId":"request_stop_transaction_api_brand_commands_request_stop_transaction_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/get-variables":{"post":{"tags":["brand"],"summary":"Get Variables","description":"OCPP 2.0.1 — obtiene variables del cargador (reemplaza GetConfiguration de v1.6).","operationId":"get_variables_api_brand_commands_get_variables_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/set-variables":{"post":{"tags":["brand"],"summary":"Set Variables","description":"OCPP 2.0.1 — configura variables del cargador (reemplaza ChangeConfiguration de v1.6).","operationId":"set_variables_api_brand_commands_set_variables_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/get-base-report":{"post":{"tags":["brand"],"summary":"Get Base Report","description":"OCPP 2.0.1 — solicita informe completo del cargador (TC_B_13).","operationId":"get_base_report_api_brand_commands_get_base_report_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/reset-v2":{"post":{"tags":["brand"],"summary":"Reset V2","description":"OCPP 2.0.1 — reinicia el cargador (TC_B_20, TC_B_22).","operationId":"reset_v2_api_brand_commands_reset_v2_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/set-network-profile":{"post":{"tags":["brand"],"summary":"Set Network Profile","description":"OCPP 2.0.1 — establece perfil de conexión de red (TC_B_42).","operationId":"set_network_profile_api_brand_commands_set_network_profile_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/trigger-message-v2":{"post":{"tags":["brand"],"summary":"Trigger Message V2","description":"OCPP 2.0.1 — solicita un mensaje específico al cargador (TC_F_23).","operationId":"trigger_message_v2_api_brand_commands_trigger_message_v2_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/change-availability-v2":{"post":{"tags":["brand"],"summary":"Change Availability V2","description":"OCPP 2.0.1 — cambia disponibilidad de EVSE/conector (TC_G_07, TC_G_08).","operationId":"change_availability_v2_api_brand_commands_change_availability_v2_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/update-firmware-v2":{"post":{"tags":["brand"],"summary":"Update Firmware V2","description":"OCPP 2.0.1 — actualización segura de firmware (TC_L_01).","operationId":"update_firmware_v2_api_brand_commands_update_firmware_v2_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/commands/get-log-v2":{"post":{"tags":["brand"],"summary":"Get Log V2","description":"OCPP 2.0.1 — solicita log de diagnóstico o seguridad (TC_N_25, TC_N_35).","operationId":"get_log_v2_api_brand_commands_get_log_v2_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/push/subscribe":{"post":{"tags":["brand"],"summary":"Brand Push Subscribe","operationId":"brand_push_subscribe_api_brand_push_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/push/unsubscribe":{"post":{"tags":["brand"],"summary":"Brand Push Unsubscribe","operationId":"brand_push_unsubscribe_api_brand_push_unsubscribe_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/notifications/config":{"get":{"tags":["brand"],"summary":"Get Notifications Config","operationId":"get_notifications_config_api_brand_notifications_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["brand"],"summary":"Put Notifications Config","operationId":"put_notifications_config_api_brand_notifications_config_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/notifications/telegram/verify":{"post":{"tags":["brand"],"summary":"Verify Telegram","operationId":"verify_telegram_api_brand_notifications_telegram_verify_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/notifications/test":{"post":{"tags":["brand"],"summary":"Test Notification","operationId":"test_notification_api_brand_notifications_test_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/pnc/ca":{"get":{"tags":["brand"],"summary":"Get Pnc Ca","operationId":"get_pnc_ca_api_brand_pnc_ca_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/pnc/ca/generate":{"post":{"tags":["brand"],"summary":"Generate Pnc Ca","operationId":"generate_pnc_ca_api_brand_pnc_ca_generate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/pnc/contracts":{"get":{"tags":["brand"],"summary":"List Pnc Contracts","operationId":"list_pnc_contracts_api_brand_pnc_contracts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["brand"],"summary":"Issue Pnc Contract","operationId":"issue_pnc_contract_api_brand_pnc_contracts_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/pnc/contracts/{contract_id}/renew":{"post":{"tags":["brand"],"summary":"Renew Pnc Contract","description":"Emite un nuevo certificado para el mismo eMAID y revoca el anterior.","operationId":"renew_pnc_contract_api_brand_pnc_contracts__contract_id__renew_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contract_id","in":"path","required":true,"schema":{"type":"string","title":"Contract Id"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/pnc/contracts/{contract_id}":{"delete":{"tags":["brand"],"summary":"Revoke Pnc Contract","operationId":"revoke_pnc_contract_api_brand_pnc_contracts__contract_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"contract_id","in":"path","required":true,"schema":{"type":"string","title":"Contract Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/pnc/commands/install-ca":{"post":{"tags":["brand"],"summary":"Pnc Install Ca","description":"Instala la CA Plug & Charge de la marca en un cargador OCPP 2.0.1 via InstallCertificate.\nEl cargador necesita la CA para validar el certificado de contrato del EV durante el TLS.","operationId":"pnc_install_ca_api_brand_pnc_commands_install_ca_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/incidents":{"get":{"tags":["brand"],"summary":"List Incidents","operationId":"list_incidents_api_brand_incidents_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"priority","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["brand"],"summary":"Create Incident","operationId":"create_incident_api_brand_incidents_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/incidents/{incident_id}":{"put":{"tags":["brand"],"summary":"Update Incident","operationId":"update_incident_api_brand_incidents__incident_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["brand"],"summary":"Delete Incident","operationId":"delete_incident_api_brand_incidents__incident_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/modules":{"get":{"tags":["brand"],"summary":"Get Modules","operationId":"get_modules_api_brand_modules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["brand"],"summary":"Update Modules","operationId":"update_modules_api_brand_modules_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModulesIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/fiscal-cert":{"post":{"tags":["brand"],"summary":"Upload Fiscal Cert","operationId":"upload_fiscal_cert_api_brand_fiscal_cert_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_fiscal_cert_api_brand_fiscal_cert_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"delete":{"tags":["brand"],"summary":"Delete Fiscal Cert","operationId":"delete_fiscal_cert_api_brand_fiscal_cert_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/fiscal-config":{"get":{"tags":["brand"],"summary":"Get Fiscal Config","operationId":"get_fiscal_config_api_brand_fiscal_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["brand"],"summary":"Update Fiscal Config","operationId":"update_fiscal_config_api_brand_fiscal_config_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/map":{"get":{"tags":["brand"],"summary":"Brand Map","description":"Mapa operativo: ubicaciones agrupadas con estado OCPP, sesiones y reservas por conector.","operationId":"brand_map_api_brand_map_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/locations":{"post":{"tags":["brand"],"summary":"Create Location","description":"Crea una ubicación lógica asignándole cargadores.\n\nUna \"ubicación\" no es una tabla: es el location_name compartido por varios\ncharge_points. Antes este endpoint devolvía 201 sin escribir nada —y sin\ntocar la latitud/longitud que le mandaran—, así que crear una ubicación\ndesde la interfaz no tenía ningún efecto y las coordenadas se perdían.","operationId":"create_location_api_brand_locations_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/locations/{loc_id}":{"put":{"tags":["brand"],"summary":"Update Location","description":"Renombra o mueve una ubicación actualizando todos sus cargadores.","operationId":"update_location_api_brand_locations__loc_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"loc_id","in":"path","required":true,"schema":{"type":"string","title":"Loc Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["brand"],"summary":"Delete Location","description":"Elimina una ubicación lógica (desvincula los cargadores, no los borra).","operationId":"delete_location_api_brand_locations__loc_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"loc_id","in":"path","required":true,"schema":{"type":"string","title":"Loc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/locations/{loc_id}/assign-charger":{"post":{"tags":["brand"],"summary":"Assign Charger To Location","description":"Asigna un cargador a una ubicación.","operationId":"assign_charger_to_location_api_brand_locations__loc_id__assign_charger_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"loc_id","in":"path","required":true,"schema":{"type":"string","title":"Loc Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/chargers/unassign":{"post":{"tags":["brand"],"summary":"Unassign Charger","description":"Desvincula un cargador de su ubicación.","operationId":"unassign_charger_api_brand_chargers_unassign_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/diagnostics/upload-url":{"get":{"tags":["brand"],"summary":"Diag Upload Url","description":"Devuelve la URL base de subida de diagnósticos para esta marca.","operationId":"diag_upload_url_api_brand_diagnostics_upload_url_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/diagnostics":{"get":{"tags":["brand"],"summary":"List Diagnostics","description":"Lista los archivos de diagnóstico recibidos, agrupados por cargador.","operationId":"list_diagnostics_api_brand_diagnostics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/diagnostics/{cp_id}/{filename}":{"get":{"tags":["brand"],"summary":"Download Diagnostic","description":"Descarga un archivo de diagnóstico.","operationId":"download_diagnostic_api_brand_diagnostics__cp_id___filename__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"cp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Id"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/register":{"post":{"tags":["onboarding"],"summary":"Register","operationId":"register_api_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/confirm-email":{"get":{"tags":["onboarding"],"summary":"Confirm Email","operationId":"confirm_email_api_auth_confirm_email_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/resend-confirmation":{"post":{"tags":["onboarding"],"summary":"Resend Confirmation","operationId":"resend_confirmation_api_auth_resend_confirmation_post","parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/onboarding/step1":{"put":{"tags":["onboarding"],"summary":"Onboarding Step1","operationId":"onboarding_step1_api_brand_onboarding_step1_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandConfigStep1"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/onboarding/upload-logo":{"post":{"tags":["onboarding"],"summary":"Upload Logo","operationId":"upload_logo_api_brand_onboarding_upload_logo_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_logo_api_brand_onboarding_upload_logo_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/logo/{filename}":{"get":{"tags":["onboarding"],"summary":"Serve Logo","operationId":"serve_logo_api_brand_logo__filename__get","parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/onboarding/slug-check":{"get":{"tags":["onboarding"],"summary":"Check Slug","description":"Verifica disponibilidad de un slug y sugiere alternativa si está tomado.","operationId":"check_slug_api_brand_onboarding_slug_check_get","parameters":[{"name":"slug","in":"query","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/onboarding/services-catalog":{"get":{"tags":["onboarding"],"summary":"Services Catalog","operationId":"services_catalog_api_brand_onboarding_services_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/brand/services/config-request":{"post":{"tags":["onboarding"],"summary":"Config Service Request","operationId":"config_service_request_api_brand_services_config_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigServiceRequestIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/onboarding/skip-payment":{"post":{"tags":["onboarding"],"summary":"Skip Payment","description":"Continuar sin pago — marca queda en trial.","operationId":"skip_payment_api_brand_onboarding_skip_payment_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/onboarding/complete":{"post":{"tags":["onboarding"],"summary":"Complete Onboarding","operationId":"complete_onboarding_api_brand_onboarding_complete_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/me":{"get":{"tags":["onboarding"],"summary":"Brand Me","operationId":"brand_me_api_brand_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/international-config":{"put":{"tags":["onboarding"],"summary":"Update International Config","operationId":"update_international_config_api_brand_international_config_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternationalConfigIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/public/international":{"get":{"tags":["onboarding"],"summary":"Get International Config","operationId":"get_international_config_api_public_international_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/brand/energy-config":{"put":{"tags":["onboarding"],"summary":"Update Energy Config","operationId":"update_energy_config_api_brand_energy_config_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnergyConfigIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/roaming-config":{"put":{"tags":["onboarding"],"summary":"Update Roaming Config","operationId":"update_roaming_config_api_brand_roaming_config_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoamingConfigIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/agent/register":{"post":{"tags":["onboarding","agent"],"summary":"Agent Register","description":"Registro sin fricción para agentes IA.\n- Email auto-confirmado (sin clic humano requerido)\n- Devuelve JWT listo para usar en la misma respuesta\n- El portero registra la IP, el agente y la marca sin bloquear","operationId":"agent_register_api_agent_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRegisterRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/fleet-billing-config":{"get":{"tags":["onboarding"],"summary":"Get Fleet Billing Config","operationId":"get_fleet_billing_config_api_brand_fleet_billing_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["onboarding"],"summary":"Update Fleet Billing Config","operationId":"update_fleet_billing_config_api_brand_fleet_billing_config_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetBillingConfigIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/payments/checkout":{"post":{"tags":["payments"],"summary":"Create Checkout","operationId":"create_checkout_api_brand_payments_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/payments/portal":{"post":{"tags":["payments"],"summary":"Billing Portal","operationId":"billing_portal_api_brand_payments_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/payments/services":{"get":{"tags":["payments"],"summary":"My Services","operationId":"my_services_api_brand_payments_services_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/payments/config":{"get":{"tags":["payments"],"summary":"Payments Config","operationId":"payments_config_api_payments_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/brand/payments/connect-onboarding":{"post":{"tags":["payments"],"summary":"Connect Onboarding","description":"Crea (o recupera) una cuenta conectada Express con V2 API\ny devuelve la URL de onboarding de Stripe.\n\nV2 diferencias clave:\n  - Sin type: 'express' en el top level\n  - fees_collector/losses_collector: 'application' → la plataforma retiene comisiones\n  - Capability: stripe_balance.stripe_transfers (destination charges)","operationId":"connect_onboarding_api_brand_payments_connect_onboarding_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/payments/connect-status":{"get":{"tags":["payments"],"summary":"Connect Status","description":"Consulta el estado actual de la cuenta Connect directamente en Stripe (V2).\nNo cachea en BD — siempre refleja la realidad de Stripe.","operationId":"connect_status_api_brand_payments_connect_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/stripe/webhook":{"post":{"tags":["payments"],"summary":"Stripe Webhook","description":"Recibe eventos V1 de Stripe (checkout, suscripciones, pagos).","operationId":"stripe_webhook_api_stripe_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/stripe/webhook/v2":{"post":{"tags":["payments"],"summary":"Stripe Webhook V2","description":"Recibe thin events V2 de Stripe para cuentas Connect.\n\nEventos esperados:\n  - v2.core.account[requirements].updated\n  - v2.core.account[configuration.recipient].capability_status_updated\n\nEstos eventos son \"thin\" (sin payload completo) — hay que hacer\nfetch del evento completo para obtener los datos.","operationId":"stripe_webhook_v2_api_stripe_webhook_v2_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/brand/tariffs":{"get":{"tags":["tariffs"],"summary":"List Tariffs","operationId":"list_tariffs_api_brand_tariffs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["tariffs"],"summary":"Create Tariff","operationId":"create_tariff_api_brand_tariffs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TariffGroupCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/tariffs/{tariff_id}":{"put":{"tags":["tariffs"],"summary":"Update Tariff","operationId":"update_tariff_api_brand_tariffs__tariff_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tariff_id","in":"path","required":true,"schema":{"type":"string","title":"Tariff Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TariffGroupUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["tariffs"],"summary":"Delete Tariff","operationId":"delete_tariff_api_brand_tariffs__tariff_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tariff_id","in":"path","required":true,"schema":{"type":"string","title":"Tariff Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/energy-costs":{"get":{"tags":["tariffs"],"summary":"Get Energy Costs","operationId":"get_energy_costs_api_brand_energy_costs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["tariffs"],"summary":"Set Energy Costs","description":"Reemplaza los costes de energía vigentes con los nuevos. Cierra los anteriores.","operationId":"set_energy_costs_api_brand_energy_costs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnergyCostList"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/fixed-costs":{"get":{"tags":["tariffs"],"summary":"List Fixed Costs","operationId":"list_fixed_costs_api_brand_fixed_costs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["tariffs"],"summary":"Create Fixed Cost","operationId":"create_fixed_cost_api_brand_fixed_costs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FixedCostCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/fixed-costs/{cost_id}":{"put":{"tags":["tariffs"],"summary":"Update Fixed Cost","operationId":"update_fixed_cost_api_brand_fixed_costs__cost_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"cost_id","in":"path","required":true,"schema":{"type":"string","title":"Cost Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FixedCostUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["tariffs"],"summary":"Delete Fixed Cost","operationId":"delete_fixed_cost_api_brand_fixed_costs__cost_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"cost_id","in":"path","required":true,"schema":{"type":"string","title":"Cost Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/clients/groups":{"get":{"tags":["clients"],"summary":"List Groups","operationId":"list_groups_api_brand_clients_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["clients"],"summary":"Create Group","operationId":"create_group_api_brand_clients_groups_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/clients/groups/{group_id}":{"put":{"tags":["clients"],"summary":"Update Group","operationId":"update_group_api_brand_clients_groups__group_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["clients"],"summary":"Delete Group","operationId":"delete_group_api_brand_clients_groups__group_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/clients/groups/{group_id}/bill":{"post":{"tags":["clients"],"summary":"Bill Group","description":"Cierra periodo de facturación a todos los clientes del grupo de una vez.","operationId":"bill_group_api_brand_clients_groups__group_id__bill_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/clients":{"get":{"tags":["clients"],"summary":"List Clients","operationId":"list_clients_api_brand_clients_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"name","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","default":"asc","title":"Order"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["clients"],"summary":"Create Client","operationId":"create_client_api_brand_clients_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/clients/{client_id}":{"get":{"tags":["clients"],"summary":"Get Client","operationId":"get_client_api_brand_clients__client_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["clients"],"summary":"Update Client","operationId":"update_client_api_brand_clients__client_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["clients"],"summary":"Delete Client","operationId":"delete_client_api_brand_clients__client_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/clients/{client_id}/close-billing":{"post":{"tags":["clients"],"summary":"Close Billing Period","description":"Cierra el periodo de facturación actual del cliente y genera la factura.","operationId":"close_billing_period_api_brand_clients__client_id__close_billing_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/clients/{client_id}/sessions":{"get":{"tags":["clients"],"summary":"Client Sessions","operationId":"client_sessions_api_brand_clients__client_id__sessions_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/clients/{client_id}/invoices":{"get":{"tags":["clients"],"summary":"Client Invoices","description":"Facturas fleet emitidas a este cliente.","operationId":"client_invoices_api_brand_clients__client_id__invoices_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/clients/{client_id}/drivers":{"get":{"tags":["clients"],"summary":"List Drivers","operationId":"list_drivers_api_brand_clients__client_id__drivers_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["clients"],"summary":"Create Driver","operationId":"create_driver_api_brand_clients__client_id__drivers_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriverCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/clients/{client_id}/drivers/{driver_id}":{"put":{"tags":["clients"],"summary":"Update Driver","operationId":"update_driver_api_brand_clients__client_id__drivers__driver_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"driver_id","in":"path","required":true,"schema":{"type":"string","title":"Driver Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriverUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["clients"],"summary":"Delete Driver","operationId":"delete_driver_api_brand_clients__client_id__drivers__driver_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"driver_id","in":"path","required":true,"schema":{"type":"string","title":"Driver Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/clients/{client_id}/community-report":{"get":{"tags":["clients"],"summary":"Community Report","operationId":"community_report_api_brand_clients__client_id__community_report_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"month","in":"query","required":true,"schema":{"type":"string","description":"Período en formato YYYY-MM, ej: 2026-04","title":"Month"},"description":"Período en formato YYYY-MM, ej: 2026-04"},{"name":"price_kwh","in":"query","required":false,"schema":{"type":"number","description":"Precio €/kWh para el cálculo","default":0.18,"title":"Price Kwh"},"description":"Precio €/kWh para el cálculo"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"pdf | csv","default":"pdf","title":"Format"},"description":"pdf | csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/dashboard/summary":{"get":{"tags":["analytics"],"summary":"Dashboard Summary","operationId":"dashboard_summary_api_brand_dashboard_summary_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"today","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/dashboard/stream":{"get":{"tags":["analytics"],"summary":"Dashboard Stream","operationId":"dashboard_stream_api_brand_dashboard_stream_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/analytics/usage":{"get":{"tags":["analytics"],"summary":"Analytics Usage","operationId":"analytics_usage_api_brand_analytics_usage_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"month","title":"Period"}},{"name":"group_by","in":"query","required":false,"schema":{"type":"string","default":"day","title":"Group By"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/analytics/financials":{"get":{"tags":["analytics"],"summary":"Analytics Financials","operationId":"analytics_financials_api_brand_analytics_financials_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"month","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/analytics/forecast":{"get":{"tags":["analytics"],"summary":"Analytics Forecast","operationId":"analytics_forecast_api_brand_analytics_forecast_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/pvpc/today":{"get":{"tags":["analytics"],"summary":"Pvpc Today","description":"Precios PVPC de hoy (gráfica horaria).","operationId":"pvpc_today_api_brand_pvpc_today_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/esg-report":{"get":{"tags":["analytics"],"summary":"Esg Report","description":"Genera informe de sostenibilidad. Sin ?pdf devuelve JSON; con ?pdf devuelve PDF.","operationId":"esg_report_api_brand_esg_report_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"month","in":"query","required":false,"schema":{"type":"string","title":"Month"}},{"name":"client_id","in":"query","required":false,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/brand-info":{"get":{"tags":["portal"],"summary":"Brand Info","operationId":"brand_info_api_portal_brand_info_get","parameters":[{"name":"slug","in":"query","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/login":{"post":{"tags":["portal"],"summary":"Portal Login","operationId":"portal_login_api_portal_login_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/refresh":{"post":{"tags":["portal"],"summary":"Portal Refresh","description":"Rota el refresh token (cookie httpOnly) del portal y emite un access token nuevo.","operationId":"portal_refresh_api_portal_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/portal/logout":{"post":{"tags":["portal"],"summary":"Portal Logout","operationId":"portal_logout_api_portal_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/portal/register":{"post":{"tags":["portal"],"summary":"Portal Register","operationId":"portal_register_api_portal_register_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/verify-email":{"get":{"tags":["portal"],"summary":"Verify Portal Email","operationId":"verify_portal_email_api_portal_verify_email_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/summary":{"get":{"tags":["portal"],"summary":"Portal Summary","operationId":"portal_summary_api_portal_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/sessions":{"get":{"tags":["portal"],"summary":"Portal Sessions","operationId":"portal_sessions_api_portal_sessions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"month","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/account":{"get":{"tags":["portal"],"summary":"Get Account","operationId":"get_account_api_portal_account_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["portal"],"summary":"Update Account","operationId":"update_account_api_portal_account_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/account/password":{"put":{"tags":["portal"],"summary":"Change Password","operationId":"change_password_api_portal_account_password_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/vehicles":{"get":{"tags":["portal"],"summary":"List Vehicles","operationId":"list_vehicles_api_portal_vehicles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["portal"],"summary":"Add Vehicle","operationId":"add_vehicle_api_portal_vehicles_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/vehicles/{vehicle_id}":{"delete":{"tags":["portal"],"summary":"Delete Vehicle","operationId":"delete_vehicle_api_portal_vehicles__vehicle_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/rfid":{"get":{"tags":["portal"],"summary":"List Rfid","operationId":"list_rfid_api_portal_rfid_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/rfid/request":{"post":{"tags":["portal"],"summary":"Request Rfid","operationId":"request_rfid_api_portal_rfid_request_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/fleet/summary":{"get":{"tags":["portal"],"summary":"Fleet Summary","operationId":"fleet_summary_api_portal_fleet_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/fleet/drivers":{"get":{"tags":["portal"],"summary":"List Drivers","operationId":"list_drivers_api_portal_fleet_drivers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["portal"],"summary":"Create Driver","operationId":"create_driver_api_portal_fleet_drivers_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/fleet/drivers/{driver_id}":{"put":{"tags":["portal"],"summary":"Update Driver","operationId":"update_driver_api_portal_fleet_drivers__driver_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"driver_id","in":"path","required":true,"schema":{"type":"string","title":"Driver Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["portal"],"summary":"Delete Driver","operationId":"delete_driver_api_portal_fleet_drivers__driver_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"driver_id","in":"path","required":true,"schema":{"type":"string","title":"Driver Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/fleet/home-sessions":{"get":{"tags":["portal"],"summary":"List Home Sessions","operationId":"list_home_sessions_api_portal_fleet_home_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["portal"],"summary":"Create Home Session","operationId":"create_home_session_api_portal_fleet_home_sessions_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/billing":{"get":{"tags":["portal"],"summary":"Portal Billing","operationId":"portal_billing_api_portal_billing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/billing-info":{"get":{"tags":["portal"],"summary":"Portal Billing Info","operationId":"portal_billing_info_api_portal_billing_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/payment-methods":{"get":{"tags":["portal"],"summary":"List Payment Methods","operationId":"list_payment_methods_api_portal_payment_methods_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/payment-methods/setup-intent":{"post":{"tags":["portal"],"summary":"Create Setup Intent","operationId":"create_setup_intent_api_portal_payment_methods_setup_intent_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/payment-methods/{pm_id}":{"delete":{"tags":["portal"],"summary":"Delete Payment Method","operationId":"delete_payment_method_api_portal_payment_methods__pm_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pm_id","in":"path","required":true,"schema":{"type":"string","title":"Pm Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/driver/token":{"get":{"tags":["portal"],"summary":"Driver Token","description":"Devuelve el token eMSP del conductor (creado al registrarse).","operationId":"driver_token_api_portal_driver_token_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/driver/sessions":{"get":{"tags":["portal"],"summary":"Driver Sessions","description":"Historial de cargas: propias (transactions) + externas (ocpi_external_cdrs).","operationId":"driver_sessions_api_portal_driver_sessions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"month","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/driver/default-pm":{"put":{"tags":["portal"],"summary":"Set Default Pm","description":"Guarda un payment method como predeterminado para cobros automáticos.","operationId":"set_default_pm_api_portal_driver_default_pm_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["portal"],"summary":"Remove Default Pm","operationId":"remove_default_pm_api_portal_driver_default_pm_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/driver/request-card":{"post":{"tags":["portal"],"summary":"Request Physical Card","description":"Solicita una tarjeta RFID física — notifica al operador por email.","operationId":"request_physical_card_api_portal_driver_request_card_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/driver/chargers":{"get":{"tags":["portal"],"summary":"Driver Chargers","description":"Cargadores de la marca disponibles para reservar.","operationId":"driver_chargers_api_portal_driver_chargers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/driver/reservations":{"get":{"tags":["portal"],"summary":"Driver Reservations","description":"Reservas activas/pasadas del conductor.","operationId":"driver_reservations_api_portal_driver_reservations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["portal"],"summary":"Driver Create Reservation","description":"Crea una reserva usando el token eMSP del conductor como id_tag.","operationId":"driver_create_reservation_api_portal_driver_reservations_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/driver/reservations/{res_id}":{"delete":{"tags":["portal"],"summary":"Driver Cancel Reservation","description":"Cancela una reserva del conductor.","operationId":"driver_cancel_reservation_api_portal_driver_reservations__res_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"res_id","in":"path","required":true,"schema":{"type":"string","title":"Res Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/wallet":{"get":{"tags":["portal"],"summary":"Get Wallet","operationId":"get_wallet_api_portal_wallet_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/wallet/topup":{"post":{"tags":["portal"],"summary":"Wallet Topup","description":"Recarga el wallet usando la tarjeta guardada (off-session).","operationId":"wallet_topup_api_portal_wallet_topup_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/push/public-key":{"get":{"tags":["portal"],"summary":"Push Public Key","operationId":"push_public_key_api_portal_push_public_key_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/portal/push/subscribe":{"post":{"tags":["portal"],"summary":"Push Subscribe","operationId":"push_subscribe_api_portal_push_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/push/unsubscribe":{"post":{"tags":["portal"],"summary":"Push Unsubscribe","operationId":"push_unsubscribe_api_portal_push_unsubscribe_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/sessions/{tx_id}/receipt":{"get":{"tags":["portal"],"summary":"Session Receipt","operationId":"session_receipt_api_portal_sessions__tx_id__receipt_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tx_id","in":"path","required":true,"schema":{"type":"string","title":"Tx Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/driver/pnc/contract":{"get":{"tags":["portal"],"summary":"Portal Pnc Contract","description":"Devuelve el contrato PnC activo vinculado a este cliente de portal.","operationId":"portal_pnc_contract_api_portal_driver_pnc_contract_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/driver/pnc/contract/download":{"get":{"tags":["portal"],"summary":"Portal Pnc Download","description":"Descarga un ZIP con el certificado y la clave privada del contrato.","operationId":"portal_pnc_download_api_portal_driver_pnc_contract_download_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/brand/billing/stripe-config":{"get":{"tags":["brand-billing"],"summary":"Stripe Config","operationId":"stripe_config_api_brand_billing_stripe_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/billing/payment-methods":{"get":{"tags":["brand-billing"],"summary":"List Payment Methods","operationId":"list_payment_methods_api_brand_billing_payment_methods_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/billing/setup-intent":{"post":{"tags":["brand-billing"],"summary":"Create Setup Intent","operationId":"create_setup_intent_api_brand_billing_setup_intent_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/billing/payment-methods/{pm_id}/default":{"put":{"tags":["brand-billing"],"summary":"Set Default Pm","operationId":"set_default_pm_api_brand_billing_payment_methods__pm_id__default_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"pm_id","in":"path","required":true,"schema":{"type":"string","title":"Pm Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/billing/payment-methods/{pm_id}":{"delete":{"tags":["brand-billing"],"summary":"Delete Pm","operationId":"delete_pm_api_brand_billing_payment_methods__pm_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"pm_id","in":"path","required":true,"schema":{"type":"string","title":"Pm Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/billing/invoices":{"get":{"tags":["brand-billing"],"summary":"Brand Invoices","operationId":"brand_invoices_api_brand_billing_invoices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/billing/revenue-summary":{"get":{"tags":["brand-billing"],"summary":"Revenue Summary","operationId":"revenue_summary_api_brand_billing_revenue_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/public/qr/{charge_point_id}":{"get":{"tags":["public"],"summary":"Qr Charger Info","operationId":"qr_charger_info_api_public_qr__charge_point_id__get","parameters":[{"name":"charge_point_id","in":"path","required":true,"schema":{"type":"string","title":"Charge Point Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/qr/{charge_point_id}/start":{"post":{"tags":["public"],"summary":"Qr Start Session","operationId":"qr_start_session_api_public_qr__charge_point_id__start_post","parameters":[{"name":"charge_point_id","in":"path","required":true,"schema":{"type":"string","title":"Charge Point Id"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/qr/stop/{id_tag}":{"post":{"tags":["public"],"summary":"Qr Stop Session","description":"Detiene una sesión de carga iniciada via QR (solo tags QR- o PAY-).","operationId":"qr_stop_session_api_public_qr_stop__id_tag__post","parameters":[{"name":"id_tag","in":"path","required":true,"schema":{"type":"string","title":"Id Tag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/qr/session/{id_tag}":{"get":{"tags":["public"],"summary":"Qr Session Status","description":"Estado actual de una sesión QR — usado por el frontend para polling.","operationId":"qr_session_status_api_public_qr_session__id_tag__get","parameters":[{"name":"id_tag","in":"path","required":true,"schema":{"type":"string","title":"Id Tag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/qr/receipt/{id_tag}":{"post":{"tags":["public"],"summary":"Register Receipt Email","operationId":"register_receipt_email_api_public_qr_receipt__id_tag__post","parameters":[{"name":"id_tag","in":"path","required":true,"schema":{"type":"string","title":"Id Tag"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/ocpp-demo/{cp_id}/status":{"get":{"tags":["public"],"summary":"Ocpp Demo Status","description":"Estado en tiempo real de un cargador conectado en modo demo.","operationId":"ocpp_demo_status_api_public_ocpp_demo__cp_id__status_get","parameters":[{"name":"cp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/map":{"get":{"tags":["public"],"summary":"Public Map","description":"Devuelve todos los cargadores con coordenadas de marcas activas.","operationId":"public_map_api_public_map_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/public/map/reve":{"get":{"tags":["public"],"summary":"Public Map Reve","description":"Cargadores de la red nacional REVE para el bounding box solicitado.","operationId":"public_map_reve_api_public_map_reve_get","parameters":[{"name":"lat_sw","in":"query","required":true,"schema":{"type":"number","title":"Lat Sw"}},{"name":"lon_sw","in":"query","required":true,"schema":{"type":"number","title":"Lon Sw"}},{"name":"lat_ne","in":"query","required":true,"schema":{"type":"number","title":"Lat Ne"}},{"name":"lon_ne","in":"query","required":true,"schema":{"type":"number","title":"Lon Ne"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/sessions/{tx_id}/receipt.pdf":{"get":{"tags":["public"],"summary":"Download Session Pdf","description":"Descarga el PDF de un recibo. Acceso libre con UUID (no adivinable).","operationId":"download_session_pdf_api_public_sessions__tx_id__receipt_pdf_get","parameters":[{"name":"tx_id","in":"path","required":true,"schema":{"type":"string","title":"Tx Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/hub/versions":{"get":{"tags":["hub-ocpi"],"summary":"Hub Versions","operationId":"hub_versions_ocpi_hub_versions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ocpi/hub/2.2":{"get":{"tags":["hub-ocpi"],"summary":"Hub Details","operationId":"hub_details_ocpi_hub_2_2_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ocpi/hub/2.2/credentials":{"get":{"tags":["hub-ocpi"],"summary":"Get Credentials","operationId":"get_credentials_ocpi_hub_2_2_credentials_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["hub-ocpi"],"summary":"Register Credentials","description":"Socio externo completa el handshake OCPI con el hub y recibe nuestro token definitivo.\n\nEl socio TIENE que existir ya: lo da de alta un superadmin en\n/admin/hub/external, que le entrega `token_d` fuera de banda. Este endpoint\nsolo acepta ese token.\n\nAntes se creaba el HubExternalParty sobre la marcha cuando el token no\ncoincidía con nadie, así que cualquiera podía POSTear aquí y salir con un\ntoken válido del hub: con él se listaban los UID de token de TODOS los\nconductores de la red (GET /emsp/2.2/tokens) y se podían inyectar CDRs\nfalsos que disparan un cobro off_session contra su tarjeta guardada\n(POST /emsp/2.2/cdrs). Un socio desconocido ya no se autoregistra.","operationId":"register_credentials_ocpi_hub_2_2_credentials_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/hub/cpo/2.2/locations":{"get":{"tags":["hub-ocpi"],"summary":"List Hub Locations","operationId":"list_hub_locations_ocpi_hub_cpo_2_2_locations_get","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/hub/cpo/2.2/locations/{location_id}":{"get":{"tags":["hub-ocpi"],"summary":"Get Hub Location","operationId":"get_hub_location_ocpi_hub_cpo_2_2_locations__location_id__get","parameters":[{"name":"location_id","in":"path","required":true,"schema":{"type":"string","title":"Location Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/hub/cpo/2.2/tokens/{country_code}/{party_id}/{token_uid}":{"put":{"tags":["hub-ocpi"],"summary":"Receive External Token","description":"eMSP externo empuja un token para que sus conductores puedan usar nuestra red.","operationId":"receive_external_token_ocpi_hub_cpo_2_2_tokens__country_code___party_id___token_uid__put","parameters":[{"name":"country_code","in":"path","required":true,"schema":{"type":"string","title":"Country Code"}},{"name":"party_id","in":"path","required":true,"schema":{"type":"string","title":"Party Id"}},{"name":"token_uid","in":"path","required":true,"schema":{"type":"string","title":"Token Uid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/hub/cpo/2.2/tokens/{country_code}/{party_id}/{token_uid}/authorize":{"get":{"tags":["hub-ocpi"],"summary":"Authorize External Token","description":"CPO externo solicita autorización en tiempo real para un token.","operationId":"authorize_external_token_ocpi_hub_cpo_2_2_tokens__country_code___party_id___token_uid__authorize_get","parameters":[{"name":"country_code","in":"path","required":true,"schema":{"type":"string","title":"Country Code"}},{"name":"party_id","in":"path","required":true,"schema":{"type":"string","title":"Party Id"}},{"name":"token_uid","in":"path","required":true,"schema":{"type":"string","title":"Token Uid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/hub/emsp/2.2/cdrs":{"post":{"tags":["hub-ocpi"],"summary":"Receive External Cdr","description":"CPO externo envía CDR de sesión terminada donde usó un token hub.","operationId":"receive_external_cdr_ocpi_hub_emsp_2_2_cdrs_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/hub/emsp/2.2/tokens":{"get":{"tags":["hub-ocpi"],"summary":"List Hub Emsp Tokens","description":"CPO externo descarga lista de tokens hub para whitelist local.","operationId":"list_hub_emsp_tokens_ocpi_hub_emsp_2_2_tokens_get","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":500,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/versions":{"get":{"tags":["ocpi"],"summary":"Get Versions","operationId":"get_versions_ocpi__brand_slug__versions_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/2.2":{"get":{"tags":["ocpi"],"summary":"Get Details","operationId":"get_details_ocpi__brand_slug__2_2_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/2.2/credentials":{"get":{"tags":["ocpi"],"summary":"Get Credentials","operationId":"get_credentials_ocpi__brand_slug__2_2_credentials_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["ocpi"],"summary":"Register Credentials","description":"eMSP/hub completa el handshake y recibe nuestro token definitivo.\n\nLa party tiene que existir ya: la crea el operador en Configuración →\nRoaming (POST /api/brand/ocpi/parties), que le entrega `token_b` fuera de\nbanda. Antes, si el token no coincidía con nadie se creaba una party activa\nnueva, así que cualquiera podía autoregistrarse como socio OCPI de\ncualquier marca sin credencial previa.","operationId":"register_credentials_ocpi__brand_slug__2_2_credentials_post","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["ocpi"],"summary":"Update Credentials","description":"Actualiza credenciales de una party ya registrada.","operationId":"update_credentials_ocpi__brand_slug__2_2_credentials_put","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["ocpi"],"summary":"Delete Credentials","operationId":"delete_credentials_ocpi__brand_slug__2_2_credentials_delete","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/cpo/2.2/locations":{"get":{"tags":["ocpi"],"summary":"List Locations","operationId":"list_locations_ocpi__brand_slug__cpo_2_2_locations_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/cpo/2.2/locations/{location_id}":{"get":{"tags":["ocpi"],"summary":"Get Location","operationId":"get_location_ocpi__brand_slug__cpo_2_2_locations__location_id__get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"location_id","in":"path","required":true,"schema":{"type":"string","title":"Location Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/cpo/2.2/locations/{location_id}/{evse_uid}":{"get":{"tags":["ocpi"],"summary":"Get Evse","operationId":"get_evse_ocpi__brand_slug__cpo_2_2_locations__location_id___evse_uid__get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"location_id","in":"path","required":true,"schema":{"type":"string","title":"Location Id"}},{"name":"evse_uid","in":"path","required":true,"schema":{"type":"string","title":"Evse Uid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/cpo/2.2/sessions":{"get":{"tags":["ocpi"],"summary":"List Sessions","operationId":"list_sessions_ocpi__brand_slug__cpo_2_2_sessions_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/cpo/2.2/cdrs":{"get":{"tags":["ocpi"],"summary":"List Cdrs","operationId":"list_cdrs_ocpi__brand_slug__cpo_2_2_cdrs_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/cpo/2.2/cdrs/{cdr_id}":{"get":{"tags":["ocpi"],"summary":"Get Cdr","operationId":"get_cdr_ocpi__brand_slug__cpo_2_2_cdrs__cdr_id__get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"cdr_id","in":"path","required":true,"schema":{"type":"string","title":"Cdr Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/cpo/2.2/tokens/{country_code}/{party_id}/{uid}":{"put":{"tags":["ocpi"],"summary":"Put Token","description":"eMSP empuja un token a nuestra whitelist.","operationId":"put_token_ocpi__brand_slug__cpo_2_2_tokens__country_code___party_id___uid__put","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","title":"Country Code"}},{"name":"party_id","in":"path","required":true,"schema":{"type":"string","title":"Party Id"}},{"name":"uid","in":"path","required":true,"schema":{"type":"string","title":"Uid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Token Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/cpo/2.2/tokens/{country_code}/{party_id}/{uid}/authorize":{"get":{"tags":["ocpi"],"summary":"Authorize Token","operationId":"authorize_token_ocpi__brand_slug__cpo_2_2_tokens__country_code___party_id___uid__authorize_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","title":"Country Code"}},{"name":"party_id","in":"path","required":true,"schema":{"type":"string","title":"Party Id"}},{"name":"uid","in":"path","required":true,"schema":{"type":"string","title":"Uid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/cpo/2.2/tariffs":{"get":{"tags":["ocpi"],"summary":"List Tariffs","operationId":"list_tariffs_ocpi__brand_slug__cpo_2_2_tariffs_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/cpo/2.2/tariffs/{tariff_id}":{"get":{"tags":["ocpi"],"summary":"Get Tariff","operationId":"get_tariff_ocpi__brand_slug__cpo_2_2_tariffs__tariff_id__get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"tariff_id","in":"path","required":true,"schema":{"type":"string","title":"Tariff Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/cpo/2.2/commands/START_SESSION":{"post":{"tags":["ocpi"],"summary":"Command Start Session","description":"eMSP solicita inicio de sesión remota.","operationId":"command_start_session_ocpi__brand_slug__cpo_2_2_commands_START_SESSION_post","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/cpo/2.2/commands/STOP_SESSION":{"post":{"tags":["ocpi"],"summary":"Command Stop Session","description":"eMSP solicita parar sesión activa.","operationId":"command_stop_session_ocpi__brand_slug__cpo_2_2_commands_STOP_SESSION_post","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/cpo/2.2/commands/RESERVE_NOW":{"post":{"tags":["ocpi"],"summary":"Command Reserve Now","description":"eMSP solicita reserva de conector.","operationId":"command_reserve_now_ocpi__brand_slug__cpo_2_2_commands_RESERVE_NOW_post","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/cpo/2.2/commands/CANCEL_RESERVATION":{"post":{"tags":["ocpi"],"summary":"Command Cancel Reservation","operationId":"command_cancel_reservation_ocpi__brand_slug__cpo_2_2_commands_CANCEL_RESERVATION_post","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/versions":{"get":{"tags":["ocpi-emsp"],"summary":"Emsp Versions","operationId":"emsp_versions_ocpi__brand_slug__emsp_versions_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/2.2":{"get":{"tags":["ocpi-emsp"],"summary":"Emsp Details","operationId":"emsp_details_ocpi__brand_slug__emsp_2_2_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/2.2/tokens/{country_code}/{party_id}/{uid}":{"put":{"tags":["ocpi-emsp"],"summary":"Emsp Receive Token","description":"CPO externo nos notifica cambio de estado de un token (no es nuestro flujo habitual).","operationId":"emsp_receive_token_ocpi__brand_slug__emsp_2_2_tokens__country_code___party_id___uid__put","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","title":"Country Code"}},{"name":"party_id","in":"path","required":true,"schema":{"type":"string","title":"Party Id"}},{"name":"uid","in":"path","required":true,"schema":{"type":"string","title":"Uid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Token Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/2.2/tokens/{country_code}/{party_id}/{uid}/authorize":{"get":{"tags":["ocpi-emsp"],"summary":"Emsp Authorize Token","description":"CPO externo pregunta si el token uid pertenece a nuestros conductores.","operationId":"emsp_authorize_token_ocpi__brand_slug__emsp_2_2_tokens__country_code___party_id___uid__authorize_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","title":"Country Code"}},{"name":"party_id","in":"path","required":true,"schema":{"type":"string","title":"Party Id"}},{"name":"uid","in":"path","required":true,"schema":{"type":"string","title":"Uid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/2.2/sessions/{country_code}/{party_id}/{session_id}":{"put":{"tags":["ocpi-emsp"],"summary":"Emsp Receive Session","description":"CPO externo nos notifica una sesión activa de uno de nuestros conductores.","operationId":"emsp_receive_session_ocpi__brand_slug__emsp_2_2_sessions__country_code___party_id___session_id__put","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","title":"Country Code"}},{"name":"party_id","in":"path","required":true,"schema":{"type":"string","title":"Party Id"}},{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Session Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/2.2/cdrs":{"post":{"tags":["ocpi-emsp"],"summary":"Emsp Receive Cdr","description":"CPO externo o hub nos envía un CDR de una sesión completada.","operationId":"emsp_receive_cdr_ocpi__brand_slug__emsp_2_2_cdrs_post","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Cdr Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/2.2/locations":{"get":{"tags":["ocpi-emsp"],"summary":"Emsp Get Locations","description":"Devuelve locations de CPOs externos cacheadas (para mostrar al conductor).","operationId":"emsp_get_locations_ocpi__brand_slug__emsp_2_2_locations_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/2.2/commands/send":{"post":{"tags":["ocpi-emsp"],"summary":"Emsp Send Command","description":"Desde el dashboard, envía un comando a un CPO externo via hub.","operationId":"emsp_send_command_ocpi__brand_slug__emsp_2_2_commands_send_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendCommandIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/2.2/commands/result":{"post":{"tags":["ocpi-emsp"],"summary":"Emsp Command Result","description":"Recibe el resultado asíncrono de un comando enviado a un CPO.","operationId":"emsp_command_result_ocpi__brand_slug__emsp_2_2_commands_result_post","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Result Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/tokens":{"get":{"tags":["ocpi-emsp"],"summary":"List Emsp Tokens","operationId":"list_emsp_tokens_ocpi__brand_slug__emsp_tokens_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["ocpi-emsp"],"summary":"Create Emsp Token","operationId":"create_emsp_token_ocpi__brand_slug__emsp_tokens_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmspTokenIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/tokens/{token_id}":{"put":{"tags":["ocpi-emsp"],"summary":"Update Emsp Token","operationId":"update_emsp_token_ocpi__brand_slug__emsp_tokens__token_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string","title":"Token Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["ocpi-emsp"],"summary":"Delete Emsp Token","operationId":"delete_emsp_token_ocpi__brand_slug__emsp_tokens__token_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string","title":"Token Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/external-cdrs":{"get":{"tags":["ocpi-emsp"],"summary":"List External Cdrs","operationId":"list_external_cdrs_ocpi__brand_slug__emsp_external_cdrs_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/external-sessions":{"get":{"tags":["ocpi-emsp"],"summary":"List External Sessions","operationId":"list_external_sessions_ocpi__brand_slug__emsp_external_sessions_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/external-cdrs/{cdr_id}/invoice":{"post":{"tags":["ocpi-emsp"],"summary":"Invoice External Cdr","description":"Marca un CDR externo como facturado y crea PaymentIntent Stripe al conductor.","operationId":"invoice_external_cdr_ocpi__brand_slug__emsp_external_cdrs__cdr_id__invoice_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"cdr_id","in":"path","required":true,"schema":{"type":"string","title":"Cdr Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocpi/{brand_slug}/emsp/external-cdrs/{cdr_id}/mark-invoiced":{"post":{"tags":["ocpi-emsp"],"summary":"Mark Cdr Invoiced","description":"Marca un CDR como facturado manualmente (para facturación fuera de Stripe).","operationId":"mark_cdr_invoiced_ocpi__brand_slug__emsp_external_cdrs__cdr_id__mark_invoiced_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"cdr_id","in":"path","required":true,"schema":{"type":"string","title":"Cdr Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/api-keys":{"get":{"tags":["api-keys"],"summary":"List Keys","operationId":"list_keys_api_brand_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["api-keys"],"summary":"Create Key","operationId":"create_key_api_brand_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/api-keys/scopes":{"get":{"tags":["api-keys"],"summary":"Catalogo Scopes","description":"Catálogo de permisos. Lo lee el panel para pintar las casillas y también un\nagente que quiera saber qué puede pedir. Incluye las ubicaciones reales de\nla marca, que son las que se pueden usar como sufijo `@ubicacion`.","operationId":"catalogo_scopes_api_brand_api_keys_scopes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/api-keys/audit":{"get":{"tags":["api-keys"],"summary":"Auditoria","description":"Qué han hecho las API keys de la marca: escrituras e intentos rechazados.\nLas lecturas correctas no se registran (un agente hace cientos y taparían\nlo que importa).","operationId":"auditoria_api_brand_api_keys_audit_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"key_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Id"}},{"name":"solo_errores","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Solo Errores"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/api-keys/{key_id}":{"delete":{"tags":["api-keys"],"summary":"Delete Key","operationId":"delete_key_api_brand_api_keys__key_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ext/chargers":{"get":{"tags":["external-api"],"summary":"Ext Chargers","operationId":"ext_chargers_api_ext_chargers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ext/sessions":{"get":{"tags":["external-api"],"summary":"Ext Sessions","operationId":"ext_sessions_api_ext_sessions_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mcp":{"get":{"tags":["mcp"],"summary":"Mcp Sin Stream","description":"El transporte admite que el servidor abra un canal SSE propio. Este no lo\nhace (no envía nada por iniciativa propia), y el protocolo dice que en ese\ncaso hay que responder 405.","operationId":"mcp_sin_stream_api_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["mcp"],"summary":"Mcp","operationId":"mcp_api_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/2fa/status":{"get":{"tags":["2fa"],"summary":"Get 2Fa Status","operationId":"get_2fa_status_api_auth_2fa_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auth/2fa/setup":{"post":{"tags":["2fa"],"summary":"Setup 2Fa","description":"Genera un nuevo secret TOTP y devuelve la URL del QR.","operationId":"setup_2fa_api_auth_2fa_setup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auth/2fa/enable":{"post":{"tags":["2fa"],"summary":"Enable 2Fa","description":"Confirma el código TOTP y activa 2FA.","operationId":"enable_2fa_api_auth_2fa_enable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auth/2fa/disable":{"post":{"tags":["2fa"],"summary":"Disable 2Fa","description":"Desactiva 2FA verificando el código actual.","operationId":"disable_2fa_api_auth_2fa_disable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auth/2fa/verify":{"post":{"tags":["2fa"],"summary":"Verify 2Fa Code","description":"Verifica un código TOTP (para flujo de login step-2).","operationId":"verify_2fa_code_api_auth_2fa_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/reservations":{"get":{"tags":["reservations"],"summary":"List Reservations","operationId":"list_reservations_api_brand_reservations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["reservations"],"summary":"Create Reservation","operationId":"create_reservation_api_brand_reservations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReservationCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/reservations/{res_id}":{"delete":{"tags":["reservations"],"summary":"Cancel Reservation","operationId":"cancel_reservation_api_brand_reservations__res_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"res_id","in":"path","required":true,"schema":{"type":"string","title":"Res Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/payment/intent/{charge_point_id}":{"post":{"tags":["driver-payment"],"summary":"Create Payment Intent","description":"Crea un PaymentIntent con capture_method=manual (pre-autorización).\nDevuelve client_secret para confirmar en el frontend + id_tag para la sesión.","operationId":"create_payment_intent_api_public_payment_intent__charge_point_id__post","parameters":[{"name":"charge_point_id","in":"path","required":true,"schema":{"type":"string","title":"Charge Point Id"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/payment/start/{charge_point_id}":{"post":{"tags":["driver-payment"],"summary":"Start Paid Session","description":"Verifica que el PaymentIntent está autorizado (requires_capture)\ny lanza RemoteStartTransaction. Llama tras confirmar en el frontend.","operationId":"start_paid_session_api_public_payment_start__charge_point_id__post","parameters":[{"name":"charge_point_id","in":"path","required":true,"schema":{"type":"string","title":"Charge Point Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/payment/cancel/{payment_intent_id}":{"post":{"tags":["driver-payment"],"summary":"Cancel Payment Intent","description":"Libera una pre-autorización que el conductor abandonó sin cargar.\n\nSin esto, salir de la pantalla de pago dejaba los €50 retenidos en su\ntarjeta hasta que Stripe caduca la autorización solo (hasta 7 días).\nSolo cancela pre-autorizaciones que siguen sin usar: una ya capturada, o una\ncuya sesión ya arrancó, no se toca.","operationId":"cancel_payment_intent_api_public_payment_cancel__payment_intent_id__post","parameters":[{"name":"payment_intent_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Intent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/indarbox/readings":{"get":{"tags":["indarbox"],"summary":"Get Readings","description":"Devuelve las últimas lecturas de potencia de todos los IndarBox de la marca.","operationId":"get_readings_api_brand_indarbox_readings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/indarbox/readings/{location}":{"get":{"tags":["indarbox"],"summary":"Get Reading Location","description":"Lectura en tiempo real de una ubicación específica.","operationId":"get_reading_location_api_brand_indarbox_readings__location__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"location","in":"path","required":true,"schema":{"type":"string","title":"Location"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/indarbox/simulate":{"post":{"tags":["indarbox"],"summary":"Simulate Reading","description":"Simula una lectura del IndarBox para pruebas sin hardware físico.\nDispara el algoritmo de control exactamente igual que lo haría el ESP32.","operationId":"simulate_reading_api_brand_indarbox_simulate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/indarbox/devices":{"get":{"tags":["indarbox"],"summary":"List Devices","description":"Lista ubicaciones con IndarBox configurado y su estado online/offline.","operationId":"list_devices_api_brand_indarbox_devices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/fiscal/externo/factura":{"post":{"tags":["fiscal-externo"],"summary":"Emitir Factura","operationId":"emitir_factura_api_fiscal_externo_factura_post","parameters":[{"name":"x-fiscal-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fiscal-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FacturaExternaRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/fiscal/externo/facturas":{"get":{"tags":["fiscal-externo"],"summary":"Listar Facturas","description":"Consulta para el panel de indargreen.","operationId":"listar_facturas_api_fiscal_externo_facturas_get","parameters":[{"name":"origen","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origen"}},{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limite"}},{"name":"x-fiscal-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Fiscal-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/solar/config":{"get":{"tags":["solar"],"summary":"Get Solar Config","operationId":"get_solar_config_api_brand_solar_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["solar"],"summary":"Update Solar Config","operationId":"update_solar_config_api_brand_solar_config_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolarConfigIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/solar/reading":{"post":{"tags":["solar"],"summary":"Post Solar Reading","operationId":"post_solar_reading_api_brand_solar_reading_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolarReadingIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/solar/readings":{"get":{"tags":["solar"],"summary":"Get Solar Readings","operationId":"get_solar_readings_api_brand_solar_readings_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/solar/rules":{"get":{"tags":["solar"],"summary":"Get Rules","operationId":"get_rules_api_brand_solar_rules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["solar"],"summary":"Create Rule","operationId":"create_rule_api_brand_solar_rules_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChargingRuleIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/solar/rules/{rule_id}":{"put":{"tags":["solar"],"summary":"Update Rule","operationId":"update_rule_api_brand_solar_rules__rule_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChargingRuleIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["solar"],"summary":"Delete Rule","operationId":"delete_rule_api_brand_solar_rules__rule_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/erp/excel":{"get":{"tags":["erp"],"summary":"Export Excel","operationId":"export_excel_api_brand_erp_excel_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"date_from","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date From"}},{"name":"date_to","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/erp/csv":{"get":{"tags":["erp"],"summary":"Export Csv","operationId":"export_csv_api_brand_erp_csv_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"date_from","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date From"}},{"name":"date_to","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/erp/holded/config":{"get":{"tags":["erp"],"summary":"Get Holded Config","operationId":"get_holded_config_api_brand_erp_holded_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["erp"],"summary":"Save Holded Config","operationId":"save_holded_config_api_brand_erp_holded_config_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"delete":{"tags":["erp"],"summary":"Delete Holded Config","operationId":"delete_holded_config_api_brand_erp_holded_config_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/erp/holded/sync":{"post":{"tags":["erp"],"summary":"Sync To Holded","description":"Envía las sesiones del rango a Holded como facturas de venta.","operationId":"sync_to_holded_api_brand_erp_holded_sync_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/subscription-plans":{"get":{"tags":["subscriptions"],"summary":"List Plans","operationId":"list_plans_api_brand_subscription_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["subscriptions"],"summary":"Create Plan","operationId":"create_plan_api_brand_subscription_plans_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/subscription-plans/{plan_id}":{"put":{"tags":["subscriptions"],"summary":"Update Plan","operationId":"update_plan_api_brand_subscription_plans__plan_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["subscriptions"],"summary":"Delete Plan","operationId":"delete_plan_api_brand_subscription_plans__plan_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/subscription-plans/{plan_id}/subscribers":{"post":{"tags":["subscriptions"],"summary":"Admin Add Subscriber","description":"Adhiere un cliente ya existente a un plan, sin pasar por el autocobro Stripe del\nportal — para clientes que el operador factura de otra forma, o que da de alta él mismo.","operationId":"admin_add_subscriber_api_brand_subscription_plans__plan_id__subscribers_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/subscription-plans/{plan_id}/subscribers/bulk-by-group":{"post":{"tags":["subscriptions"],"summary":"Admin Add Subscribers By Group","description":"Adhiere de golpe a todos los clientes de un grupo de tarifa (tariff_group_id) a un plan.","operationId":"admin_add_subscribers_by_group_api_brand_subscription_plans__plan_id__subscribers_bulk_by_group_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/subscription-plans/subscribers/{subscription_id}":{"delete":{"tags":["subscriptions"],"summary":"Admin Remove Subscriber","operationId":"admin_remove_subscriber_api_brand_subscription_plans_subscribers__subscription_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/subscription-plans/subscribers":{"get":{"tags":["subscriptions"],"summary":"List Subscribers","operationId":"list_subscribers_api_brand_subscription_plans_subscribers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/subscription-plans/loyalty-config":{"get":{"tags":["subscriptions"],"summary":"Get Loyalty Config","operationId":"get_loyalty_config_api_brand_subscription_plans_loyalty_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["subscriptions"],"summary":"Update Loyalty Config","operationId":"update_loyalty_config_api_brand_subscription_plans_loyalty_config_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/portal/subscription/plans":{"get":{"tags":["portal-subscriptions"],"summary":"Portal List Plans","operationId":"portal_list_plans_api_portal_subscription_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/subscription/subscribe":{"post":{"tags":["portal-subscriptions"],"summary":"Portal Subscribe","description":"Suscribe al conductor a un plan, cobrando el primer mes con su PM guardado.","operationId":"portal_subscribe_api_portal_subscription_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/subscription/cancel":{"delete":{"tags":["portal-subscriptions"],"summary":"Portal Cancel Subscription","operationId":"portal_cancel_subscription_api_portal_subscription_cancel_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/loyalty":{"get":{"tags":["portal-subscriptions"],"summary":"Portal Loyalty","operationId":"portal_loyalty_api_portal_loyalty_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/loyalty/redeem":{"post":{"tags":["portal-subscriptions"],"summary":"Portal Redeem Points","description":"Canjea puntos por crédito en el wallet.","operationId":"portal_redeem_points_api_portal_loyalty_redeem_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/sepa/setup-intent":{"post":{"tags":["portal-subscriptions"],"summary":"Sepa Setup Intent","description":"Crea un SetupIntent para domiciliar SEPA.","operationId":"sepa_setup_intent_api_portal_sepa_setup_intent_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/sepa/confirm":{"post":{"tags":["portal-subscriptions"],"summary":"Sepa Confirm","description":"Guarda el payment_method SEPA confirmado como método por defecto.","operationId":"sepa_confirm_api_portal_sepa_confirm_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/hub/stats":{"get":{"summary":"Hub Stats","operationId":"hub_stats_api_hub_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/hub/settlement/preview":{"get":{"summary":"Settlement Preview","operationId":"settlement_preview_api_hub_settlement_preview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/hub/sessions":{"get":{"summary":"Hub Sessions","operationId":"hub_sessions_api_hub_sessions_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"role","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Role"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/hub/settlement/run":{"post":{"summary":"Run Settlement","operationId":"run_settlement_api_admin_hub_settlement_run_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/hub/members":{"get":{"summary":"Hub Members","operationId":"hub_members_api_admin_hub_members_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/public/hub/apply":{"post":{"summary":"Hub Apply","operationId":"hub_apply_api_public_hub_apply_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HubApplicationIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/hub/applications":{"get":{"summary":"List Applications","operationId":"list_applications_api_admin_hub_applications_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"pending","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/hub/applications/{app_id}/status":{"put":{"summary":"Update Application Status","operationId":"update_application_status_api_admin_hub_applications__app_id__status_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationStatusIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/hub/external-parties":{"get":{"summary":"List External Parties","operationId":"list_external_parties_api_admin_hub_external_parties_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"summary":"Create External Party","operationId":"create_external_party_api_admin_hub_external_parties_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalPartyIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/hub/external-parties/{party_id}":{"delete":{"summary":"Delete External Party","operationId":"delete_external_party_api_admin_hub_external_parties__party_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"party_id","in":"path","required":true,"schema":{"type":"string","title":"Party Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/hub/external-parties/{party_id}/handshake":{"post":{"summary":"Trigger Handshake","operationId":"trigger_handshake_api_admin_hub_external_parties__party_id__handshake_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"party_id","in":"path","required":true,"schema":{"type":"string","title":"Party Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/hub/external-parties/{party_id}/sync":{"post":{"summary":"Trigger Sync","operationId":"trigger_sync_api_admin_hub_external_parties__party_id__sync_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"party_id","in":"path","required":true,"schema":{"type":"string","title":"Party Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/hub/external-parties/{party_id}/status":{"put":{"summary":"Set Party Status","operationId":"set_party_status_api_admin_hub_external_parties__party_id__status_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"party_id","in":"path","required":true,"schema":{"type":"string","title":"Party Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/hub/info":{"get":{"summary":"Hub Info","description":"Stats públicas + locations externas cacheadas para el mapa del hub.","operationId":"hub_info_api_hub_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/api/brand/incidents":{"get":{"tags":["incidents"],"summary":"List Incidents","operationId":"list_incidents_api_api_brand_incidents_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["incidents"],"summary":"Create Incident","operationId":"create_incident_api_api_brand_incidents_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/api/brand/incidents/{incident_id}":{"put":{"tags":["incidents"],"summary":"Update Incident","operationId":"update_incident_api_api_brand_incidents__incident_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["incidents"],"summary":"Delete Incident","operationId":"delete_incident_api_api_brand_incidents__incident_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/legal/privacy-policy":{"get":{"tags":["legal"],"summary":"Download Privacy Policy","operationId":"download_privacy_policy_api_brand_legal_privacy_policy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/legal/legal-notice":{"get":{"tags":["legal"],"summary":"Download Legal Notice","operationId":"download_legal_notice_api_brand_legal_legal_notice_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/legal/compliance-report":{"get":{"tags":["legal"],"summary":"Download Compliance Report","operationId":"download_compliance_report_api_brand_legal_compliance_report_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/legal/fleet-contract":{"get":{"tags":["legal"],"summary":"Download Fleet Contract","operationId":"download_fleet_contract_api_brand_legal_fleet_contract_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/chargepoints/{cp_id}/mid":{"patch":{"tags":["legal"],"summary":"Update Mid","operationId":"update_mid_api_brand_chargepoints__cp_id__mid_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"cp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/terminal/{cp_ocpp_id}/payment":{"post":{"summary":"Terminal Payment Complete","operationId":"terminal_payment_complete_api_public_terminal__cp_ocpp_id__payment_post","parameters":[{"name":"cp_ocpp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Ocpp Id"}},{"name":"x-terminal-secret","in":"header","required":false,"schema":{"type":"string","title":"X-Terminal-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/team":{"get":{"tags":["team"],"summary":"List Team","operationId":"list_team_api_brand_team_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/team/invite":{"post":{"tags":["team"],"summary":"Invite User","operationId":"invite_user_api_brand_team_invite_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/brand/team/invite/{invite_id}":{"delete":{"tags":["team"],"summary":"Cancel Invite","operationId":"cancel_invite_api_brand_team_invite__invite_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","title":"Invite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/team/{user_id}/role":{"put":{"tags":["team"],"summary":"Change Role","operationId":"change_role_api_brand_team__user_id__role_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/team/{user_id}":{"delete":{"tags":["team"],"summary":"Remove User","operationId":"remove_user_api_brand_team__user_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/accept-invite":{"get":{"tags":["team"],"summary":"Get Invite Info","operationId":"get_invite_info_api_auth_accept_invite_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["team"],"summary":"Accept Invite","operationId":"accept_invite_api_auth_accept_invite_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInviteBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ocsp/{brand_slug}":{"post":{"summary":"Ocsp Post","operationId":"ocsp_post_api_ocsp__brand_slug__post","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ocsp/{brand_slug}/{encoded_request}":{"get":{"summary":"Ocsp Get","operationId":"ocsp_get_api_ocsp__brand_slug___encoded_request__get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"encoded_request","in":"path","required":true,"schema":{"type":"string","title":"Encoded Request"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/campaign/invites":{"post":{"tags":["campaign"],"summary":"Bulk Load Invites","description":"Carga masiva de invitados de campaña.","operationId":"bulk_load_invites_api_admin_campaign_invites_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InviteRow"},"title":"Rows"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["campaign"],"summary":"List Invites","operationId":"list_invites_api_admin_campaign_invites_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/campaign/log":{"post":{"tags":["campaign"],"summary":"Log Outreach","description":"Registra un email de outreach ya enviado por Claudio (no campaña con magic link).","operationId":"log_outreach_api_admin_campaign_log_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutreachLog"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/campaign/magic-link":{"post":{"tags":["campaign"],"summary":"Create Magic Link","description":"Devuelve el enlace de aceptación (magic link) para un lead, creando la\ninvitación si no existe. Lo usa Claudio para incrustar {magic_link} en sus\nemails de outreach; el envío del email lo hace el propio Claudio.","operationId":"create_magic_link_api_admin_campaign_magic_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MagicLinkRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/campaign/send-batch":{"post":{"tags":["campaign"],"summary":"Send Batch","description":"Envía emails a los próximos N invitados pendientes (default 100/día).\nSi se pasa `email`, solo envía a ese destinatario concreto.\nSolo envía de lunes a viernes, de 5h a 13h UTC.","operationId":"send_batch_api_admin_campaign_send_batch_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body","default":{}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/public/campaign/accept":{"get":{"tags":["campaign"],"summary":"Accept Invite","description":"El instalador hace clic en el email. Crea su marca y lo loga directamente.","operationId":"accept_invite_api_public_campaign_accept_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/campaign/developer":{"post":{"tags":["campaign"],"summary":"Developer Register","description":"Registro de acceso developer desde la landing. Envía magic link por email.","operationId":"developer_register_api_public_campaign_developer_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperRegisterRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/facturas/upload":{"post":{"summary":"Upload Facturas","operationId":"upload_facturas_api_facturas_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_facturas_api_facturas_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/facturas/download":{"post":{"summary":"Download Factura","description":"Descarga de una factura ya guardada. Misma contraseña que subir y listar.","operationId":"download_factura_api_facturas_download_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_download_factura_api_facturas_download_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/facturas/list":{"post":{"summary":"List Facturas","operationId":"list_facturas_api_facturas_list_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_list_facturas_api_facturas_list_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/facturacion/login":{"post":{"tags":["erp-facturacion"],"summary":"Login","operationId":"login_api_facturacion_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login_api_facturacion_login_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/facturacion/partes":{"get":{"tags":["erp-facturacion"],"summary":"Listar Partes","operationId":"listar_partes_api_facturacion_partes_get","parameters":[{"name":"tipo","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tipo"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["erp-facturacion"],"summary":"Crear Parte","operationId":"crear_parte_api_facturacion_partes_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParteIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/facturacion/partes/{parte_id}":{"put":{"tags":["erp-facturacion"],"summary":"Editar Parte","operationId":"editar_parte_api_facturacion_partes__parte_id__put","parameters":[{"name":"parte_id","in":"path","required":true,"schema":{"type":"string","title":"Parte Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParteIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["erp-facturacion"],"summary":"Borrar Parte","operationId":"borrar_parte_api_facturacion_partes__parte_id__delete","parameters":[{"name":"parte_id","in":"path","required":true,"schema":{"type":"string","title":"Parte Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/facturacion/emitidas":{"get":{"tags":["erp-facturacion"],"summary":"Listar Emitidas","operationId":"listar_emitidas_api_facturacion_emitidas_get","parameters":[{"name":"ejercicio","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ejercicio"}},{"name":"limite","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limite"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["erp-facturacion"],"summary":"Crear Emitida","operationId":"crear_emitida_api_facturacion_emitidas_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmitidaIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/facturacion/emitidas/{factura_id}/pdf":{"get":{"tags":["erp-facturacion"],"summary":"Pdf Emitida","operationId":"pdf_emitida_api_facturacion_emitidas__factura_id__pdf_get","parameters":[{"name":"factura_id","in":"path","required":true,"schema":{"type":"string","title":"Factura Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/facturacion/recibidas":{"get":{"tags":["erp-facturacion"],"summary":"Listar Recibidas","operationId":"listar_recibidas_api_facturacion_recibidas_get","parameters":[{"name":"ejercicio","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ejercicio"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["erp-facturacion"],"summary":"Crear Recibida","operationId":"crear_recibida_api_facturacion_recibidas_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_crear_recibida_api_facturacion_recibidas_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/facturacion/recibidas/{recibida_id}":{"delete":{"tags":["erp-facturacion"],"summary":"Borrar Recibida","operationId":"borrar_recibida_api_facturacion_recibidas__recibida_id__delete","parameters":[{"name":"recibida_id","in":"path","required":true,"schema":{"type":"string","title":"Recibida Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/facturacion/recibidas/{recibida_id}/fichero":{"get":{"tags":["erp-facturacion"],"summary":"Fichero Recibida","operationId":"fichero_recibida_api_facturacion_recibidas__recibida_id__fichero_get","parameters":[{"name":"recibida_id","in":"path","required":true,"schema":{"type":"string","title":"Recibida Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/facturacion/recibidas/{recibida_id}/lroe":{"post":{"tags":["erp-facturacion"],"summary":"Declarar Recibida","description":"Da de alta el gasto en el LROE 140 cap. 2.1. Solo se declara lo que aún no lo está.","operationId":"declarar_recibida_api_facturacion_recibidas__recibida_id__lroe_post","parameters":[{"name":"recibida_id","in":"path","required":true,"schema":{"type":"string","title":"Recibida Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/facturacion/buzon":{"get":{"tags":["erp-facturacion"],"summary":"Buzon","description":"Ficheros subidos por /facturas que todavía no son ninguna factura del ERP.\nEs el puente entre \"le hago una foto en la obra\" y \"la registro con sus\nimportes cuando me siento\".","operationId":"buzon_api_facturacion_buzon_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/facturacion/resumen":{"get":{"tags":["erp-facturacion"],"summary":"Resumen","description":"IVA repercutido y soportado por trimestre. Es lo que hay que mirar antes de\npresentar el 303 y lo que dice si falta alguna factura por registrar.","operationId":"resumen_api_facturacion_resumen_get","parameters":[{"name":"ejercicio","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ejercicio"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/fiscal/verifactu/declaracion-responsable":{"get":{"tags":["fiscal"],"summary":"Declaracion Responsable Json","description":"Datos de la declaración, para quien quiera consumirlos como JSON.","operationId":"declaracion_responsable_json_api_fiscal_verifactu_declaracion_responsable_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/fiscal/verifactu/declaracion-responsable.html":{"get":{"tags":["fiscal"],"summary":"Declaracion Responsable Html","description":"Versión imprimible: es la que se entrega al cliente que la solicita.","operationId":"declaracion_responsable_html_api_fiscal_verifactu_declaracion_responsable_html_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/intercambio/upload":{"post":{"summary":"Upload Intercambio","operationId":"upload_intercambio_api_intercambio_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_intercambio_api_intercambio_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/intercambio/list":{"post":{"summary":"List Intercambio","operationId":"list_intercambio_api_intercambio_list_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_list_intercambio_api_intercambio_list_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/intercambio/download/{day}/{name}":{"get":{"summary":"Download Intercambio","operationId":"download_intercambio_api_intercambio_download__day___name__get","parameters":[{"name":"day","in":"path","required":true,"schema":{"type":"string","title":"Day"}},{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"password","in":"query","required":true,"schema":{"type":"string","title":"Password"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/health":{"get":{"summary":"Health","operationId":"health_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/public/brand/{slug}":{"get":{"summary":"Public Brand","operationId":"public_brand_api_public_brand__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/chargers/{cp_db_id}/qr.png":{"get":{"summary":"Charger Qr Image","description":"Genera imagen QR para el cargador físico (brand admin la descarga e imprime).\n\nRequiere sesión y que el cargador sea de tu marca: antes importaba\nrequire_brand_admin pero no lo usaba como dependencia, así que el endpoint\nestaba abierto y servía el QR de cualquier cargador de cualquier operador.","operationId":"charger_qr_image_api_brand_chargers__cp_db_id__qr_png_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"cp_db_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Db Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/logo/{brand_id}.png":{"get":{"summary":"Serve Logo","operationId":"serve_logo_api_brand_logo__brand_id__png_get","parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/logo/{brand_id}.jpg":{"get":{"summary":"Serve Logo","operationId":"serve_logo_api_brand_logo__brand_id__jpg_get","parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/hero/{brand_id}.webp":{"get":{"summary":"Serve Hero","operationId":"serve_hero_api_brand_hero__brand_id__webp_get","parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/hero/{brand_id}.png":{"get":{"summary":"Serve Hero","operationId":"serve_hero_api_brand_hero__brand_id__png_get","parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/hero/{brand_id}.jpg":{"get":{"summary":"Serve Hero","operationId":"serve_hero_api_brand_hero__brand_id__jpg_get","parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diagnostics/upload/{brand_slug}/{cp_id}/{filename}":{"post":{"summary":"Receive Diagnostic","description":"Los cargadores (OCPP 1.6 GetDiagnostics / 2.0.1 GetLog) suben aquí su archivo.\nNo requiere JWT — la URL es el control de acceso (brand_slug en path).\nAcepta PUT y POST con el cuerpo como bytes crudos.","operationId":"receive_diagnostic_api_diagnostics_upload__brand_slug___cp_id___filename__post","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"cp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Id"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Receive Diagnostic","description":"Los cargadores (OCPP 1.6 GetDiagnostics / 2.0.1 GetLog) suben aquí su archivo.\nNo requiere JWT — la URL es el control de acceso (brand_slug en path).\nAcepta PUT y POST con el cuerpo como bytes crudos.","operationId":"receive_diagnostic_api_diagnostics_upload__brand_slug___cp_id___filename__put","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"cp_id","in":"path","required":true,"schema":{"type":"string","title":"Cp Id"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AcceptInviteBody":{"properties":{"token":{"type":"string","title":"Token"},"name":{"type":"string","title":"Name"},"password":{"type":"string","title":"Password"}},"type":"object","required":["token","name","password"],"title":"AcceptInviteBody"},"AgentRegisterRequest":{"properties":{"owner_name":{"type":"string","title":"Owner Name"},"email":{"type":"string","format":"email","title":"Email"},"brand_name":{"type":"string","title":"Brand Name"},"password":{"type":"string","title":"Password"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Color","default":"#2563eb"},"secondary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Color","default":"#0ea5e9"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"tax_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tax Id"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"declared_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Declared By"},"operator_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Operator Name"},"operator_nif":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Operator Nif"}},"type":"object","required":["owner_name","email","brand_name","password"],"title":"AgentRegisterRequest"},"ApplicationStatusIn":{"properties":{"status":{"type":"string","title":"Status"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["status"],"title":"ApplicationStatusIn"},"Body_crear_recibida_api_facturacion_recibidas_post":{"properties":{"proveedor_nif":{"type":"string","title":"Proveedor Nif"},"proveedor_nombre":{"type":"string","title":"Proveedor Nombre"},"num_factura":{"type":"string","title":"Num Factura"},"fecha":{"type":"string","format":"date","title":"Fecha"},"base":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Base"},"tipo_iva":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Tipo Iva","default":"21"},"total":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Total"},"descripcion":{"type":"string","title":"Descripcion","default":""},"categoria":{"type":"string","title":"Categoria","default":"material"},"deducible_pct":{"type":"integer","title":"Deducible Pct","default":100},"fichero":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Fichero"},"buzon_dia":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buzon Dia"},"buzon_nombre":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buzon Nombre"}},"type":"object","required":["proveedor_nif","proveedor_nombre","num_factura","fecha","base"],"title":"Body_crear_recibida_api_facturacion_recibidas_post"},"Body_download_factura_api_facturas_download_post":{"properties":{"password":{"type":"string","title":"Password"},"day":{"type":"string","title":"Day"},"name":{"type":"string","title":"Name"}},"type":"object","required":["password","day","name"],"title":"Body_download_factura_api_facturas_download_post"},"Body_list_facturas_api_facturas_list_post":{"properties":{"password":{"type":"string","title":"Password"}},"type":"object","required":["password"],"title":"Body_list_facturas_api_facturas_list_post"},"Body_list_intercambio_api_intercambio_list_post":{"properties":{"password":{"type":"string","title":"Password"}},"type":"object","required":["password"],"title":"Body_list_intercambio_api_intercambio_list_post"},"Body_login_api_auth_login_post":{"properties":{"grant_type":{"anyOf":[{"type":"string","pattern":"^password$"},{"type":"null"}],"title":"Grant Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","format":"password","title":"Password"},"scope":{"type":"string","title":"Scope","default":""},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"password","title":"Client Secret"}},"type":"object","required":["username","password"],"title":"Body_login_api_auth_login_post"},"Body_login_api_facturacion_login_post":{"properties":{"password":{"type":"string","title":"Password"}},"type":"object","required":["password"],"title":"Body_login_api_facturacion_login_post"},"Body_upload_facturas_api_facturas_upload_post":{"properties":{"password":{"type":"string","title":"Password"},"files":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Files"}},"type":"object","required":["password","files"],"title":"Body_upload_facturas_api_facturas_upload_post"},"Body_upload_fiscal_cert_api_brand_fiscal_cert_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"password":{"type":"string","title":"Password","default":""}},"type":"object","required":["file"],"title":"Body_upload_fiscal_cert_api_brand_fiscal_cert_post"},"Body_upload_hero_image_api_brand_hero_image_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_hero_image_api_brand_hero_image_post"},"Body_upload_intercambio_api_intercambio_upload_post":{"properties":{"password":{"type":"string","title":"Password"},"files":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Files"}},"type":"object","required":["password","files"],"title":"Body_upload_intercambio_api_intercambio_upload_post"},"Body_upload_logo_api_brand_logo_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_logo_api_brand_logo_post"},"Body_upload_logo_api_brand_onboarding_upload_logo_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_logo_api_brand_onboarding_upload_logo_post"},"BrandAdminCreate":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"role":{"type":"string","title":"Role","default":"brand_admin"}},"type":"object","required":["email","password"],"title":"BrandAdminCreate"},"BrandConfigStep1":{"properties":{"name":{"type":"string","title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Color","default":"#2563eb"},"secondary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Color","default":"#0ea5e9"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"tax_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tax Id"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"}},"type":"object","required":["name"],"title":"BrandConfigStep1"},"BrandCreate":{"properties":{"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"admin_email":{"type":"string","title":"Admin Email"},"admin_password":{"type":"string","title":"Admin Password"},"plan":{"type":"string","title":"Plan","default":"starter"},"trial_days":{"type":"integer","title":"Trial Days","default":30},"primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Color","default":"#2563eb"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"}},"type":"object","required":["name","slug","admin_email","admin_password"],"title":"BrandCreate"},"BrandUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Color"},"plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"BrandUpdate"},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest"},"ChargePointCreate":{"properties":{"charge_point_id":{"type":"string","title":"Charge Point Id"},"vendor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"serial_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serial Number"},"location_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Name"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"},"num_connectors":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Num Connectors","default":1}},"type":"object","required":["charge_point_id"],"title":"ChargePointCreate"},"ChargePointUpdate":{"properties":{"location_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Name"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"},"max_power_kw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Power Kw"},"num_connectors":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Num Connectors"},"vendor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"serial_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serial Number"},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"public_price_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Public Price Per Kwh"}},"type":"object","title":"ChargePointUpdate"},"ChargingRuleIn":{"properties":{"name":{"type":"string","title":"Name"},"priority":{"type":"integer","title":"Priority","default":0},"enabled":{"type":"boolean","title":"Enabled","default":true},"condition_type":{"type":"string","title":"Condition Type"},"condition_value":{"additionalProperties":true,"type":"object","title":"Condition Value","default":{}},"action":{"type":"string","title":"Action"},"action_value":{"additionalProperties":true,"type":"object","title":"Action Value","default":{}}},"type":"object","required":["name","condition_type","action"],"title":"ChargingRuleIn"},"CheckoutRequest":{"properties":{"services":{"items":{"type":"string"},"type":"array","title":"Services"}},"type":"object","required":["services"],"title":"CheckoutRequest"},"ClientCreate":{"properties":{"name":{"type":"string","title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"client_type":{"type":"string","title":"Client Type","default":"individual"},"group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"},"tariff_group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tariff Group Id"},"custom_price_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Custom Price Per Kwh"},"custom_billing_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Billing Mode"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"monthly_software_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Software Fee"},"monthly_per_charger_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Per Charger Fee"},"monthly_hub_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Hub Fee"},"monthly_support_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Support Fee"},"is_user":{"type":"boolean","title":"Is User","default":true},"is_client":{"type":"boolean","title":"Is Client","default":true},"community_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Community Address"},"community_nif":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Community Nif"},"property_manager_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Manager Name"},"property_manager_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Manager Email"},"community_price_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Community Price Kwh"},"billing_period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Period","default":"monthly"}},"type":"object","required":["name"],"title":"ClientCreate"},"ClientUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"client_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Type"},"group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"},"tariff_group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tariff Group Id"},"custom_price_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Custom Price Per Kwh"},"custom_billing_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Billing Mode"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"monthly_software_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Software Fee"},"monthly_per_charger_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Per Charger Fee"},"monthly_hub_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Hub Fee"},"monthly_support_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Support Fee"},"is_user":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is User"},"is_client":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Client"},"community_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Community Address"},"community_nif":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Community Nif"},"property_manager_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Manager Name"},"property_manager_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Manager Email"},"community_price_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Community Price Kwh"},"billing_period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Period"}},"type":"object","title":"ClientUpdate"},"CommandIn":{"properties":{"response_url":{"type":"string","title":"Response Url"},"token":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Token"},"location_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Id"},"evse_uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evse Uid"},"connector_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connector Id"},"authorization_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization Reference"}},"type":"object","required":["response_url"],"title":"CommandIn"},"Complete2FALogin":{"properties":{"pending_token":{"type":"string","title":"Pending Token"},"code":{"type":"string","title":"Code"}},"type":"object","required":["pending_token","code"],"title":"Complete2FALogin"},"ConfigServiceRequestIn":{"properties":{"service_type":{"type":"string","title":"Service Type"},"notes":{"type":"string","title":"Notes","default":""}},"type":"object","required":["service_type"],"title":"ConfigServiceRequestIn"},"ContactadoCreate":{"properties":{"email":{"type":"string","title":"Email"},"motivo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Motivo","default":""}},"type":"object","required":["email"],"title":"ContactadoCreate"},"CreateKeyRequest":{"properties":{"name":{"type":"string","title":"Name"},"scopes":{"items":{},"type":"array","title":"Scopes","default":["sessions:read","chargers:read"]},"expires_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires Days"}},"type":"object","required":["name"],"title":"CreateKeyRequest"},"CredentialsIn":{"properties":{"token":{"type":"string","title":"Token"},"url":{"type":"string","title":"Url"},"roles":{"items":{},"type":"array","title":"Roles"}},"type":"object","required":["token","url","roles"],"title":"CredentialsIn"},"DeveloperRegisterRequest":{"properties":{"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"}},"type":"object","required":["name","email"],"title":"DeveloperRegisterRequest"},"DriverCreate":{"properties":{"name":{"type":"string","title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"id_tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id Tag"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit"},"status":{"type":"string","title":"Status","default":"active"}},"type":"object","required":["name"],"title":"DriverCreate"},"DriverUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"id_tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id Tag"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"DriverUpdate"},"EmitidaIn":{"properties":{"cliente_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cliente Id"},"cliente_nif":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cliente Nif"},"cliente_nombre":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cliente Nombre"},"cliente_direccion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cliente Direccion"},"serie":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serie"},"descripcion":{"type":"string","minLength":1,"title":"Descripcion"},"lineas":{"items":{"$ref":"#/components/schemas/LineaIn"},"type":"array","title":"Lineas"},"tipo_iva":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Tipo Iva","default":"21"},"fecha":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Fecha"},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["descripcion","lineas"],"title":"EmitidaIn"},"EmspTokenIn":{"properties":{"driver_name":{"type":"string","title":"Driver Name"},"driver_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Email"},"token_type":{"type":"string","title":"Token Type","default":"RFID"},"uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uid"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"whitelist":{"type":"string","title":"Whitelist","default":"ALWAYS"}},"type":"object","required":["driver_name"],"title":"EmspTokenIn"},"EnergyConfigIn":{"properties":{"tariff_type":{"type":"string","title":"Tariff Type","default":"pvpc"},"fixed_price_eur_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fixed Price Eur Kwh"},"omie_margin_eur_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Omie Margin Eur Kwh"},"contracted_power_kw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Contracted Power Kw"}},"type":"object","title":"EnergyConfigIn"},"EnergyCostCreate":{"properties":{"period_type":{"type":"string","title":"Period Type"},"price_per_kwh":{"type":"number","title":"Price Per Kwh"},"hour_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hour Start"},"hour_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hour End"},"valid_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid From"}},"type":"object","required":["period_type","price_per_kwh"],"title":"EnergyCostCreate"},"EnergyCostList":{"properties":{"costs":{"items":{"$ref":"#/components/schemas/EnergyCostCreate"},"type":"array","title":"Costs"},"valid_from":{"type":"string","title":"Valid From"}},"type":"object","required":["costs","valid_from"],"title":"EnergyCostList"},"ExternalPartyIn":{"properties":{"name":{"type":"string","title":"Name"},"party_id":{"type":"string","title":"Party Id"},"country_code":{"type":"string","title":"Country Code"},"role":{"type":"string","title":"Role","default":"hub"},"token_c":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token C"},"versions_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Versions Url"},"push_tokens":{"type":"boolean","title":"Push Tokens","default":true},"pull_locations":{"type":"boolean","title":"Pull Locations","default":true},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["name","party_id","country_code"],"title":"ExternalPartyIn"},"FacturaExternaRequest":{"properties":{"origen":{"type":"string","title":"Origen"},"referencia":{"type":"string","maxLength":80,"title":"Referencia"},"descripcion":{"type":"string","title":"Descripcion"},"base":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Base"},"tipo_iva":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Tipo Iva","default":"21.00"},"cuota_iva":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Cuota Iva"},"total":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Total"},"dest_nif":{"type":"string","title":"Dest Nif"},"dest_nombre":{"type":"string","title":"Dest Nombre"},"dest_direccion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dest Direccion"},"fecha":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Fecha"},"lineas":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Lineas"},"serie":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serie"},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["origen","referencia","descripcion","base","cuota_iva","total","dest_nif","dest_nombre"],"title":"FacturaExternaRequest"},"FixedCostCreate":{"properties":{"description":{"type":"string","title":"Description"},"amount":{"type":"number","title":"Amount"},"frequency":{"type":"string","title":"Frequency","default":"monthly"}},"type":"object","required":["description","amount"],"title":"FixedCostCreate"},"FixedCostUpdate":{"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"},"frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frequency"}},"type":"object","title":"FixedCostUpdate"},"FleetBillingConfigIn":{"properties":{"fleet_invoice_mode":{"type":"string","title":"Fleet Invoice Mode","default":"separate"}},"type":"object","title":"FleetBillingConfigIn"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HubApplicationIn":{"properties":{"company_name":{"type":"string","title":"Company Name"},"contact_name":{"type":"string","title":"Contact Name"},"email":{"type":"string","title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"role":{"type":"string","title":"Role"},"chargers_count":{"type":"integer","title":"Chargers Count","default":0},"drivers_count":{"type":"integer","title":"Drivers Count","default":0},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["company_name","contact_name","email","role"],"title":"HubApplicationIn"},"IdTagCreate":{"properties":{"id_tag":{"type":"string","title":"Id Tag"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name"},"status":{"type":"string","title":"Status","default":"Accepted"},"expiry_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiry Date"},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"tag_type":{"type":"string","title":"Tag Type","default":"rfid"},"vehicle_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Model"}},"type":"object","required":["id_tag"],"title":"IdTagCreate"},"IdTagUpdate":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name"},"expiry_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiry Date"},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"tag_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag Type"},"vehicle_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Model"}},"type":"object","title":"IdTagUpdate"},"InternationalConfigIn":{"properties":{"country":{"type":"string","title":"Country"},"currency":{"type":"string","title":"Currency"},"tax_label":{"type":"string","title":"Tax Label","default":"IVA"},"tax_rate":{"type":"number","title":"Tax Rate","default":21.0}},"type":"object","required":["country","currency"],"title":"InternationalConfigIn"},"InviteBody":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"type":"string","title":"Role","default":"brand_viewer"}},"type":"object","required":["email"],"title":"InviteBody"},"InviteRow":{"properties":{"brand_name":{"type":"string","title":"Brand Name"},"contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Name"},"email":{"type":"string","title":"Email"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"}},"type":"object","required":["brand_name","email"],"title":"InviteRow"},"LineaIn":{"properties":{"descripcion":{"type":"string","title":"Descripcion"},"cantidad":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Cantidad","default":"1"},"precio_unitario":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Precio Unitario"}},"type":"object","required":["descripcion","precio_unitario"],"title":"LineaIn"},"MagicLinkRequest":{"properties":{"email":{"type":"string","title":"Email"},"brand_name":{"type":"string","title":"Brand Name"},"contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Name"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"}},"type":"object","required":["email","brand_name"],"title":"MagicLinkRequest"},"ModulesIn":{"properties":{"modules":{"items":{"type":"string"},"type":"array","title":"Modules"}},"type":"object","required":["modules"],"title":"ModulesIn"},"OutreachLog":{"properties":{"email":{"type":"string","title":"Email"},"brand_name":{"type":"string","title":"Brand Name"},"contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Name"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"ciudad":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ciudad"}},"type":"object","required":["email","brand_name"],"title":"OutreachLog"},"ParteIn":{"properties":{"tipo":{"type":"string","title":"Tipo","default":"cliente"},"nif":{"type":"string","title":"Nif"},"nombre":{"type":"string","title":"Nombre"},"direccion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Direccion"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"telefono":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Telefono"},"serie":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serie"},"notas":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notas"}},"type":"object","required":["nif","nombre"],"title":"ParteIn"},"Pending2FA":{"properties":{"ok":{"type":"boolean","title":"Ok","default":true},"requires_2fa":{"type":"boolean","title":"Requires 2Fa","default":true},"pending_token":{"type":"string","title":"Pending Token"}},"type":"object","required":["pending_token"],"title":"Pending2FA"},"RegisterRequest":{"properties":{"owner_name":{"type":"string","title":"Owner Name"},"email":{"type":"string","format":"email","title":"Email"},"brand_name":{"type":"string","title":"Brand Name"},"password":{"type":"string","title":"Password"},"password_confirm":{"type":"string","title":"Password Confirm"}},"type":"object","required":["owner_name","email","brand_name","password","password_confirm"],"title":"RegisterRequest"},"ReservationCreate":{"properties":{"charge_point_id":{"type":"string","title":"Charge Point Id"},"connector_id":{"type":"integer","title":"Connector Id","default":1},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"id_tag":{"type":"string","title":"Id Tag"},"start_time":{"type":"string","title":"Start Time"},"duration_minutes":{"type":"integer","title":"Duration Minutes","default":30},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["charge_point_id","id_tag","start_time"],"title":"ReservationCreate"},"RoamingConfigIn":{"properties":{"cpo_roaming_enabled":{"type":"boolean","title":"Cpo Roaming Enabled","default":false},"emsp_enabled":{"type":"boolean","title":"Emsp Enabled","default":false},"emsp_party_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emsp Party Id"},"hub_member":{"type":"boolean","title":"Hub Member","default":false}},"type":"object","title":"RoamingConfigIn"},"RoleBody":{"properties":{"role":{"type":"string","title":"Role"}},"type":"object","required":["role"],"title":"RoleBody"},"SendCommandIn":{"properties":{"party_id":{"type":"string","title":"Party Id"},"country_code":{"type":"string","title":"Country Code"},"evse_uid":{"type":"string","title":"Evse Uid"},"command":{"type":"string","title":"Command"},"token_uid":{"type":"string","title":"Token Uid"}},"type":"object","required":["party_id","country_code","evse_uid","command","token_uid"],"title":"SendCommandIn"},"SessionInfo":{"properties":{"ok":{"type":"boolean","title":"Ok","default":true},"role":{"type":"string","title":"Role"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Id"},"sub":{"type":"string","title":"Sub"}},"type":"object","required":["role","brand_id","sub"],"title":"SessionInfo"},"SimulateRequest":{"properties":{"location":{"type":"string","title":"Location"},"power_w":{"type":"number","title":"Power W"},"voltage":{"type":"number","title":"Voltage","default":230.0},"current":{"type":"number","title":"Current","default":0.0}},"type":"object","required":["location","power_w"],"title":"SimulateRequest"},"SolarConfigIn":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"peak_kw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Peak Kw"},"has_battery":{"type":"boolean","title":"Has Battery","default":false},"battery_capacity_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Battery Capacity Kwh"},"min_surplus_w":{"type":"number","title":"Min Surplus W","default":500}},"type":"object","title":"SolarConfigIn"},"SolarReadingIn":{"properties":{"production_w":{"type":"number","title":"Production W","default":0},"consumption_w":{"type":"number","title":"Consumption W","default":0},"grid_w":{"type":"number","title":"Grid W","default":0}},"type":"object","title":"SolarReadingIn"},"TariffGroupCreate":{"properties":{"name":{"type":"string","title":"Name"},"billing_mode":{"type":"string","title":"Billing Mode"},"price_per_kwh":{"type":"number","title":"Price Per Kwh","default":0.0},"price_per_hour":{"type":"number","title":"Price Per Hour","default":0.0},"price_per_session":{"type":"number","title":"Price Per Session","default":0.0},"pvpc_margin":{"type":"number","title":"Pvpc Margin","default":0.05},"is_default":{"type":"boolean","title":"Is Default","default":false}},"type":"object","required":["name","billing_mode"],"title":"TariffGroupCreate"},"TariffGroupUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"billing_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Mode"},"price_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Per Kwh"},"price_per_hour":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Per Hour"},"price_per_session":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Per Session"},"pvpc_margin":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pvpc Margin"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"}},"type":"object","title":"TariffGroupUpdate"},"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"},"VerifyRequest":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"VerifyRequest"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/askacharge/api/auth/login"}}},"HTTPBearer":{"type":"http","scheme":"bearer"}}},"servers":[{"url":"/askacharge"}]}