{"openapi":"3.1.0","info":{"title":"Sunwise API","version":"0.1.0"},"servers":[{"url":"https://production.sunwise.ai","description":"Current server"}],"paths":{"/boty/api/v1/login/access-token":{"post":{"tags":["login"],"summary":"Login Access Token","description":"OAuth2 compatible token login, get an access token for future requests","operationId":"login-login_access_token","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login-login_access_token"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"-","security":[{"ApiKeyAuth":[]}]}},"/boty/api/v1/contacts/":{"get":{"tags":["contacts"],"summary":"List Contacts","description":"## Description\nRetrieve a list of contacts associated with the authenticated user.\nUseful for integrations (e.g., Zapier) to access and manage contact data.\n\n# Response\n- Returns a list of `ContactZapierList` objects representing the user’s contacts.\n\n# Important Notes\n- Only contacts belonging to the authenticated user are returned.","operationId":"contacts-list_contacts","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContactZapierList"},"type":"array","title":"Response Contacts-List Contacts"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"contacts"},"post":{"tags":["contacts"],"summary":"Create Contact","description":"## Description\nCreate or update a contact (upsert) in the Sunwise application. The endpoint\nstandardizes names, validates emails, maps catalog fields, assigns the correct\nagent/branch, and prevents duplicates. If an existing record is found by email\nor by (name + last names) with a matching integration source (or Zapier), it\nupdates that record; otherwise, it creates a new contact.\n# Request Parameters\n- `contact` (ContactZapierCreationPayload): Payload with contact data (name, last names, emails, phones, origin, status, agent, integration source, etc.).\n\n# Response\n- Returns a `ContactZapierCreationResponse` object with the created or updated contact\nand relevant metadata.\n\n# Important Notes\n- Email validation is enforced; duplicates are prevented.\n- If `contact_origin` or `status_contact` are provided, they are matched\nagainst active company catalogs; unmatched values are ignored (no new catalog\nentries are created).\n- If the email already exists, the endpoint routes to an update flow.\n- If an agent email is provided (`agent_zapier`), it is resolved to an internal user;\notherwise the authenticated user is assigned.\n- Last names are normalized (splitting combined last names into first/second).\n- Phones and emails are associated to the contact record.\n- If the contact ends up assigned to a different agent, that agent is notified.\n\n# Use Cases\n- **Upsert by email**: When a lead already exists with the same email, update attributes\n(status, origin, phones/emails, agent) instead of creating a duplicate.\n- **Upsert by name + last names**: If a match exists with the same person and\nthe same `integration_source` (or originating from Zapier), update the record and\nmerge emails/phones.\n- **New contact creation**: No match found → create a new standardized record,\nmap `contact_origin`/`status_contact` to existing catalogs, assign agent/branch,\nand attach phones/emails.","operationId":"contacts-create_contact","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactZapierCreationPayload"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactZapierCreationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"contacts"}},"/boty/api/v1/contacts-paginated/":{"get":{"tags":["contacts"],"summary":"List Contacts Paginated","description":"## Description\nOne page of the contacts the caller can see, as the portal's contacts\nview lists them (proxied from sunwise-backend).\n\n# Request Parameters\n- `search`: text filter on name, email, agent, status, origin and\n  company name.\n- `order_by` / `sort`: column and direction.\n- `status_flag`: `active` (default), `archived` or `all`.\n- `agent`: agent id, or `DO_NOT_ASSIGN` for unassigned contacts.\n- `status_contact`: contact status id.\n- `page` / `per_page`: page number and size (max 100).\n\n# Response\n- `data`: the contacts of the page.\n- `pagination`: `total_rows`, `per_page`, `current_page` and links.\n\n# Important Notes\n- Visibility is sunwise's: owners see the whole company, agents their\n  contacts and branch offices.\n- Unlike `GET /contacts/`, this is not limited to the caller's latest\n  10 contacts.","operationId":"contacts-list_contacts_paginated","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"order_by","in":"query","required":false,"schema":{"enum":["name","tracking","email","agent","status_contact","contact_origin","company_name","branch_name","created_at"],"type":"string","default":"created_at","title":"Order By"}},{"name":"sort","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"desc","title":"Sort"}},{"name":"status_flag","in":"query","required":false,"schema":{"enum":["active","archived","all"],"type":"string","default":"active","title":"Status Flag"}},{"name":"agent","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent"}},{"name":"status_contact","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Status Contact"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsPageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"contacts"}},"/boty/api/v1/contacts/{contact_id}/":{"put":{"tags":["contacts"],"summary":"Update Contact","description":"## Description\nUpdate an existing contact in the Sunwise application by its identifier.\nThe endpoint normalizes last names, maps catalog fields (origin/status),\nresolves the agent from email, and applies the changes to the stored record.\n# Request Parameters\n- `contact_id` (str | UUID): Identifier of the contact to update.\n- `contact` (ContactZapierCreationPayload): Payload with fields to update (name, last names, emails, phones, origin, status, agent, etc.).\n\n# Response\n- Returns a `ContactZapierCreationResponse` object with the updated contact\nand relevant metadata.\n\n# Important Notes\n- Last names are normalized (splitting combined last names into first/second).\n- If `contact_origin` or `status_contact` are provided, they are matched\nagainst active company catalogs; unmatched values are ignored (no new catalog\nentries are created).\n- If `agent_zapier` (email) is provided, it is resolved to an internal user; otherwise,\nthe authenticated user is assigned.\n- If the `contact_id` does not exist, an `ItemNotFoundException` (404) is raised.","operationId":"contacts-update_contact","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactZapierCreationPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactZapierCreationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"contacts"},"get":{"tags":["contacts"],"summary":"Get Contact","description":"## Description\nRetrieve a contact by its identifier.\n# Request Parameters\n- `contact_id` (str | UUID): Identifier of the contact to retrieve.\n\n# Response\n- Returns a `ContactZapierList` object representing the contact.\n\n# Important Notes\n- If the `contact_id` does not exist, an `ItemNotFoundException` (404) is raised.","operationId":"contacts-get_contact","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactZapierList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"contacts"}},"/boty/api/v1/contacts-search/":{"get":{"tags":["contacts"],"summary":"Search Contacts","description":"## Description\nRetrieve and search contacts associated with the authenticated user.\nSupports filtering full-text search.\n\n# Query Parameters\n- `search` (str): Search across contact full name, email, and company name.\n  Example: \"Juan Pérez\", \"juan@email.com\", \"Acme Corp\"\n\n# Response\n- Returns a list of `ContactZapierList` objects matching the filters.\n\n# Search Behavior\nThe `search` parameter performs partial, case-insensitive matching on:\n- Contact full name (name + first_lastname + second_lastname)\n- Contact email\n- Company name\n\n# Important Notes\n- Only contacts belonging to the authenticated user's company are returned.\n\n# Examples\n- `/contacts/search/?search=Juan` - Find contacts named Juan\n- `/contacts/search/?search=@gmail.com` - Find contacts with Gmail\n- `/contacts/search/?search=Acme` - Find contacts from Acme company","operationId":"contacts-search_contacts","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"search","in":"query","required":true,"schema":{"type":"string","title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SearchiContactResponse"},"title":"Response Contacts-Search Contacts"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"contacts"}},"/boty/api/v1/contacts-documents/{contact_id}/":{"get":{"tags":["contacts"],"summary":"Get Contact Documents","description":"## Description\nRetrieve documents associated with a contact.\n\n# Request Parameters\n- `contact_id` (str | UUID): Identifier of the contact whose documents are to be retrieved.\n\n# Response\n- Returns a list of `ContactDocumentResponse` objects representing the documents linked to the contact.","operationId":"contacts-get_contact_documents","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactDocumentResponse"},"title":"Response Contacts-Get Contact Documents"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"contacts"}},"/boty/api/v1/projects/group-files":{"post":{"tags":["projects"],"summary":"Group Files","description":"## Description\nGroup files for project creation. If pre_group_files is set to True,\nthe files will be grouped based on the service number identifier.\nIf set to False, each file will be treated as an independent project document.\n\nValid file types include PDFs, XMLs, and PNGs.\n\n# Request Parameters\n- `files` (List[UploadFile]): List of files to be grouped.\n- `pre_group_files` (bool): Whether to enable automatic grouping logic.\n  - `True` (default): Files will be grouped by service number or other identifiers.\n  - `False`: Each file will be handled as a standalone item.\n\n\n# Response\n- Returns a list of `OutputGroupedDocument` objects representing the grouped file structures.\n\n# Important Notes\n- Files with a returned file type of `BotyDocumentType.INVALID_FILE[-1]` cannot be processed in\n bulk-create service and will throw an error. Be sure to validate files before\n calling this endpoint.","operationId":"projects-group_files","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_projects-group_files"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OutputGroupedDocument"},"type":"array","title":"Response Projects-Group Files"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"projects"}},"/boty/api/v1/projects/bulk-create":{"post":{"tags":["projects"],"summary":"Bulk Create Projects With Files","description":"## Description\nBulk upload and create grouped document-based projects. This endpoint allows users to upload\nmultiple files (PDFs, XMLs and PNGs), which can be grouped and converted into individual projects\nassociated with a specific contact.\n\nFiles can optionally be pre-grouped based on the service number identifier.\nProject names can be optionally provided in a mapping format. `project_names_map`\nshould be a valid JSON string where keys are `service_number` returned by this endpoint\nand values are the desired project names. If not provided, resolved names will be used.\nFiles with UNKNOWN service number `000000000000` can be named using that service number\nas special key which should contain a mapping the file_name instead of the service_number.\nCheck the examples section for more details.\n\n# Important Notes\n- Files with a returned file type of `BotyDocumentType.INVALID_FILE[-1]` will throw an error.\n\n\n## Examples of `project_names_map` values:\n    # Basic Mapping\n\n        \"value\": '{\"123456789012\": \"Custom name 1\", \"987654321098\": \"Custom name 2\"}'\n\n    # Unknown Service Mapping\n        \"value\": '{\"000000000000\": {\"recibo_mayo.pdf\": \"Desconocido Mayo\", \"junio.xml\": \"XML de Junio\"}}'\n\n    # Mixed Mapping\n        \"value\": '{\"123456789012\": \"Casa CDMX\", \"000000000000\": {\"img_001.png\": \"Shading Snapsh6ot\", \"Factura.xml\": \"Factura sin RPU\"}}',\n\n# Request Parameters\n- `files` (List[UploadFile]): A list of uploaded files to be processed and grouped.\n- `contact_id` (UUID): The identifier for the contact to whom the projects will be linked.\n- `pre_group_files` (bool): Flag indicating whether to pre-group files before creating projects.\n  - `True`: Enables automatic grouping based on the service number identifier.\n  - `False`: Treats each file as an independent project document.\n- `background_project_stop` (BACKGROUND_PROJECT_STOP): Determines the behavior of background\n  execution after the project creation.\n  - Possible values:\n    - `RUN_COMPLETE[-1]`: Runs the full background pipeline after creation (fills the modal,\n       generates the commercial offer object and the commercial offer pdf).\n    - `ONLY_MODAL[0]`: Only fills the modal.\n    - `ONLY_COMMERCIAL_OFFER[1]`: Fills the modal and creates the commercial offer object.\n- `project_names_map` (str | None): Optional mapping of project names to files.\n# Response\n- A list of `OutputGroupedDocument` objects representing the created projects and associated files.","operationId":"projects-bulk_create_projects_with_files","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_projects-bulk_create_projects_with_files"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OutputGroupedDocument"},"type":"array","title":"Response Projects-Bulk Create Projects With Files"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"projects"}},"/boty/api/v1/projects/bulk-create-no-files":{"post":{"tags":["projects"],"summary":"Bulk Create Projects No Files","description":"## Description\nCreate multiple projects without uploading any associated files. This endpoint is useful when\nyou want to create placeholder or manually configured projects based on just their names.\n\nEach project will be linked to a specific contact.\n\n# Request Parameters\n- `contact_id` (UUID): The unique identifier of the contact to associate each project with.\n- `project_names` (List[str]): A list of project names to be created. Each string will result in\n  the creation of a new project.\n\n# Behavior\n- This endpoint does not require document files.\n- Projects will be created immediately and linked to the specified contact.\n- If the contact is not found, the request will raise a validation or lookup error.\n\n# Response\n- Returns the list of project names that were successfully created.","operationId":"projects-bulk_create_projects_no_files","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_projects-bulk_create_projects_no_files"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response Projects-Bulk Create Projects No Files"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"projects"}},"/boty/api/v1/projects/create-project-without-consumption/":{"post":{"tags":["projects"],"summary":"Create Project Without Consumption","description":"## Description\nCreate a new project without any consumption data. This endpoint is useful for\ncreating projects that do not require immediate consumption information.\n\n# Request Parameters\n- `contact_id` (UUID): The unique identifier of the contact to associate the project with.\n- `project_name` (str): The name of the project to be created.\n\n# Response\n- Returns the details of the created project.","operationId":"projects-create_project_without_consumption","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_projects-create_project_without_consumption"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"projects"}},"/boty/api/v1/projects/favorite-commercial-offer/{project_id}":{"get":{"tags":["projects"],"summary":"Get Favorite Commercial Offer","description":"# Description\nRetrieve the ID from the favorite commercial offer for a specific project.\nThis endpoint checks if a favorite commercial offer exists for the given project ID\nand returns its details if available.\n# Request Parameters\n- `project_id` (UUID): The unique identifier of the project for which to retrieve the favorite commercial offer.\n# Response\n- Returns a `FavoriteCommercialOfferResponse` containing the details of the favorite commercial offer\n  associated with the specified project ID.","operationId":"projects-get_favorite_commercial_offer","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FavoriteCommercialOfferResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"projects"}},"/boty/api/v1/projects/recent-projects/":{"get":{"tags":["projects"],"summary":"Get Recent Projects","description":"## Description\nRetrieve a list of recent projects for the authenticated user, primarily\nintended for use in integrations (e.g., Zapier). Projects are returned\nordered by most recent activity.\nNo request body is required; authentication context is used.\n\n# Response\n- Returns a list of `ProjectZapierSchemaResponse` objects representing\nthe user’s most recently active projects.\n\n# Important Notes\n- Only projects that the user has permission to access will be included.\n- Results are sorted by most recent activity first.\n- If the user has no recent projects, an empty list will be returned.","operationId":"projects-get_recent_projects","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProjectZapierSchemaResponse"},"type":"array","title":"Response Projects-Get Recent Projects"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"projects"}},"/boty/api/v1/projects/contact-projects/{contact_id}/":{"get":{"tags":["projects"],"summary":"Get Contact Projects","description":"# Description\nRetrieve a list of projects associated with a specific contact.\nThis endpoint checks if the contact exists and returns their projects if available.\nEach project includes its `status_flag` and, when one exists, the favorite\ncommercial offer of the project (`comercial_offer`).\n# Request Parameters\n- `contact_id` (UUID): The unique identifier of the contact for which to retrieve projects.\n- `status_flag` (`active` | `inactive`, optional): filter the returned\n  projects by status. When omitted, all non-deleted projects are returned.\n# Response\n- Returns a `ContactProjectsResponse` containing the contact, their\n  associated projects, each project status flag and the favorite commercial\n  offer when it exists (otherwise `comercial_offer` is `null`).","operationId":"projects-get_contact_projects","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}},{"name":"status_flag","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ProjectStatusFlag"},{"type":"null"}],"title":"Status Flag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactProjectsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"projects"}},"/boty/api/v1/projects/create-energies-without-consumptions/{project_id}/":{"post":{"tags":["projects"],"summary":"Create Energies Without Consumptions","description":"# Description\nUpdate the energy consumption data for a specific project by its ID.\nThis endpoint allows for the modification of energy consumption details\nwithout requiring the full project data to be sent.\nHelps you when your project is yet not completely set up.\n\n# Request Parameters\n- `project_id` (UUID): The unique identifier of the project to update.\n- `zip_code` (str): The ZIP code associated with the project.\n- `service_number` (str, optional): The service number for the project.\n\n# Response\n- Returns a `Project` object.","operationId":"projects-create_energies_without_consumptions","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"service_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_projects-create_energies_without_consumptions"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BotyProject"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"projects"}},"/boty/api/v1/projects/project-search/":{"get":{"tags":["projects"],"summary":"Search Projects","description":"# Description\nSearch for projects based on a query string.\nThis endpoint allows users to search for projects using a text query.\n# Request Parameters\n- `search` (str): The search query string to use for finding projects.\n# Response\n- Returns a list of `SearchiProjectResponse` objects representing the projects that match the search criteria.","operationId":"projects-search_projects","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"search","in":"query","required":true,"schema":{"type":"string","title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SearchiProjectResponse"},"title":"Response Projects-Search Projects"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"projects"}},"/boty/api/v1/projects/{project_id}/":{"get":{"tags":["projects"],"summary":"Get Project By Id","description":"# Description\nRetrieve a specific project by its ID.\nThis endpoint allows users to fetch the details of a project using its unique identifier.\n# Request Parameters\n- `project_id` (UUID): The unique identifier of the project to retrieve.\n# Response\n- Returns a `Project` object representing the requested project.","operationId":"projects-get_project_by_id","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectZapierSchemaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"projects"}},"/boty/api/v1/projects/get-service-number-from-file":{"post":{"tags":["projects"],"summary":"Get Service Number From Files","description":"## Description\n\nExtract service numbers from uploaded CFE bill files.\n\n## Request Parameters\n- `file` (list[UploadFile]): One or more PDF or XML files containing CFE bill data.\n\n## Returns\n- A list of objects containing the service numbers extracted from the files.\n  Files that fail to process are excluded from the results.","operationId":"projects-get_service_number_from_files","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_projects-get_service_number_from_files"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/NoCFEUserRPU"},"type":"array","title":"Response Projects-Get Service Number From Files"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"projects"}},"/boty/api/v1/projects/create-projects-from-lisa":{"post":{"tags":["projects"],"summary":"Create Projects With Lisa","description":"## Description\nCreate projects by initiating a task in LISA (zaplink). This endpoint triggers a background\ntask in LISA that processes and generates project files. Once the LISA task completes,\nthe resulting files are automatically used to create and populate projects associated with\nthe specified contact.\n\nThis endpoint is useful for integrating with LISA's workflow to automate project creation\nbased on external data processing or document generation pipelines.\n\nProject names can be optionally provided using `project_names_map`.\nThis should be a list of `CFEUserRPU` objects, each containing a `service_number`\nand an optional `project_name`.\n\n## Example of `project_names_map` value:\n    [{\"service_number\": \"123456789012\", \"project_name\": \"Custom name 1\"},\n     {\"service_number\": \"987654321098\", \"project_name\": \"Custom name 2\"}]\n\n# Request Parameters\n- `contact_id` (UUID): The unique identifier of the contact to whom the projects will be linked.\n- `background_project_stop` (BACKGROUND_PROJECT_STOP): Determines the behavior of background\n  execution after the project creation.\n  - Possible values:\n    - `RUN_COMPLETE[-1]`: Runs the full background pipeline after creation (fills the modal,\n       generates the commercial offer object and the commercial offer pdf).\n    - `ONLY_MODAL[0]`: Only fills the modal.\n    - `ONLY_COMMERCIAL_OFFER[1]`: Fills the modal and creates the commercial offer object.\n- `project_names_map` (list[CFEUserRPU] | None): Optional list of service numbers with custom project names.\n\n# Behavior\n- Creates a task in LISA (zaplink) for automated document processing.\n- Once the LISA task completes, the generated files are used to create projects.\n- Projects are automatically associated with the specified contact.\n- The endpoint supports custom project naming through the `project_names_map` parameter.\n\n# Response\n- Returns details about the created LISA task and the resulting projects once processing is complete.\n\n# Important Notes\n- This is an asynchronous operation. The LISA task runs in the background.\n- Project creation depends on successful completion of the LISA task.\n- Ensure the contact exists before calling this endpoint.","operationId":"projects-create_projects_with_lisa","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_projects-create_projects_with_lisa"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BotyQueuedLisaProject"},"type":"array","title":"Response Projects-Create Projects With Lisa"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"projects"}},"/boty/api/v1/projects/fill-project-from-lisa":{"post":{"tags":["projects"],"summary":"Fill Project From Lisa","description":"## Description\nFill an existing project with data retrieved from LISA (zaplink) using a CFE service number.\nThis endpoint looks up the contact associated with the given project and triggers a background\nLISA task to fetch and populate the project's consumption data.\n\nUnlike `/create-projects-from-lisa`, this endpoint targets an **existing** project rather than\ncreating a new one. The project identified by `project_id` will be updated with the data\nretrieved for the provided `service_number`.\n\n# Request Parameters\n- `service_number` (str): The CFE service number (RPU) used to query LISA for consumption data.\n  Must match the pattern defined by `SERVICE_NUMBER_PATTERN`.\n- `project_id` (UUID): The unique identifier of the existing project to be filled.\n- `background_project_stop` (BACKGROUND_PROJECT_STOP): Determines the behavior of background\n  execution after the project update.\n  - Possible values:\n    - `RUN_COMPLETE[-1]`: Runs the full background pipeline (fills the modal,\n       generates the commercial offer object and the commercial offer PDF).\n    - `ONLY_MODAL[0]`: Only fills the modal.\n    - `ONLY_COMMERCIAL_OFFER[1]`: Fills the modal and creates the commercial offer object.\n- `max_periods` (int): Number of billing periods to retrieve from LISA. Must be between 1 and 12.\n  Defaults to `1`.\n- `credential_id` (UUID | None): Optional identifier for the LISA credentials to use.\n  If not provided, the default credentials for the user will be used.\n\n# Behavior\n- Resolves the contact linked to the given `project_id`.\n- Validates LISA credentials before triggering the task.\n- Creates a LISA task for the provided `service_number` and associates the result with the existing project.\n\n# Response\n- Returns a list of `BotyQueuedLisaProject` objects representing the queued LISA task and\n  associated project details once processing begins.\n\n# Important Notes\n- This is an asynchronous operation; the LISA task runs in the background.\n- The project must already exist and be linked to a contact.\n- Ensure valid LISA credentials are configured before calling this endpoint.","operationId":"projects-fill_project_from_lisa","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_projects-fill_project_from_lisa"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BotyQueuedLisaProject"},"type":"array","title":"Response Projects-Fill Project From Lisa"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"projects"}},"/boty/api/v1/projects/funnel/listview":{"get":{"tags":["projects"],"summary":"Get Funnel Listview","description":"Project funnel list, with the portal's own filters.","operationId":"projects-get_funnel_listview","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Status"}},{"name":"agent","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent"}},{"name":"rate","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate"}},{"name":"aftersales","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aftersales"}},{"name":"auto_report","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auto Report"}},{"name":"project_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Name"}},{"name":"creation_range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creation Range"}},{"name":"ppa_active","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ppa Active"}},{"name":"project_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Type"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunnelListViewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"projects"}},"/boty/api/v1/projects/{project_id}/files":{"get":{"tags":["projects"],"summary":"Get Project Files","description":"Files attached to a project.","operationId":"projects-get_project_files","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"projects"}},"/boty/api/v1/projects/{project_id}/energies-consumptions":{"get":{"tags":["projects"],"summary":"Get Customer Energy Consumption","description":"The project's customer energy consumption record.","operationId":"projects-get_customer_energy_consumption","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerEnergyConsumptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"projects"}},"/boty/api/v1/proposals/":{"get":{"tags":["proposals"],"summary":"Get Proposals","description":"## Description\nRetrieve a list of all commercial offers (proposals) for the authenticated user.\nNo request body is required; authentication context is used.\n\n# Response\n- Returns a list of dictionaries representing the commercial offers.","operationId":"proposals-get_proposals","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CommercialOfferDetailResponse"},"type":"array","title":"Response Proposals-Get Proposals"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"proposals"}},"/boty/api/v1/proposals/csv/{proposal_id}":{"get":{"tags":["proposals"],"summary":"Download Proposals Csv","operationId":"proposals-download_proposals_csv","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/proposal-search/":{"get":{"tags":["proposals"],"summary":"Proposal Search","description":"## Description\nSearch for commercial offers (proposals) using the Searchi API.\n\n# Request Parameters\n- `query` (str): The search query string to filter proposals.\n\n# Response\n- Returns a list of `SearchiProposalResponse` objects containing the matching proposals.","operationId":"proposals-proposal_search","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","title":"Query"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SearchiProposalResponse"},"title":"Response Proposals-Proposal Search"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/{proposal_id}/":{"get":{"tags":["proposals"],"summary":"Get Proposal","description":"## Description\nRetrieve a commercial offer (proposal) by its identifier for the authenticated user.\nNo request body is required; authentication context is used.\n# Request Parameters\n- `proposal_id` (UUID): Identifier of the commercial offer to retrieve.\n\n# Response\n- Returns a `ComercialOfferRetrieve` object containing the proposal’s data.","operationId":"proposals-get_proposal","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComercialOfferRetrieve"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/project/{project_id}/":{"get":{"tags":["proposals"],"summary":"Get Proposals In Project","description":"## Description\nRetrieve all commercial offers (proposals) associated with a given project\nfor the authenticated user. No request body is required; authentication\ncontext is used.\n# Request Parameters\n- `project_id` (UUID): Identifier of the project whose proposals will be retrieved.\n\n# Response\n- Returns a `ComercialOfferRetrieveList` containing the project’s proposals.","operationId":"proposals-get_proposals_in_project","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComercialOfferRetrieveList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/{project_id}/":{"post":{"tags":["proposals"],"summary":"Create Proposal In Project","description":"## Description\nCreate a new proposal inside an existing project.\nA proposal can be initialized with an optional preset plan and, if requested,\nautomatically generated using a template.\n\n# Important Notes\n- If a `preset` is provided in the payload, the corresponding plan will be used. Use the same preset name as in the Sunwise app.\n- If `generate=1`, the proposal will be generated immediately using either the preset’s\n  template or the project’s template.\n- If no preset is specified, a proposal is still created but may use the project’s default template.\n- The payload must include a `name` for the new proposal.","operationId":"proposals-create_proposal_in_project","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"generate","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Generate"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProposalCreatePayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComercialOfferRetrieve"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/{proposal_id}/generate":{"post":{"tags":["proposals"],"summary":"Generate Proposal","description":"Generate (render) a proposal that was created as a draft.\n\nThis is the two-step the portal performs when the user finishes a\nproposal: set the template on the offer, then render it. Creation\ncan already do this with `generate=1`; this exists for the far more\ncommon case of a proposal built up component by component and\ngenerated at the end.\n\nOne-way: generating sets the offer's status to 1, and\n`commercial_offer_is_editable` refuses every later write, so no\npanel, battery or discount can be changed afterwards. It also\nrecords a `PropossalPrinted` row and, when the parent is the\nfavourite, notifies Zapier. Calling it on an already generated\nproposal re-renders it rather than failing.\n\n`template_id` is optional: the proposal's own template is used when\nit has one, else the project's.","operationId":"proposals-generate_proposal","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}},{"name":"template_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Proposals-Generate Proposal"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/{proposal_id}/offer-details":{"get":{"tags":["proposals"],"summary":"Get Offer Details","description":"Full details of the proposal (offer) as sunwise returns them.","operationId":"proposals-get_offer_details","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferDetailsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/{proposal_id}/products-offer":{"get":{"tags":["proposals"],"summary":"Get Products Offer","description":"Products currently applied to the proposal.","operationId":"proposals-get_products_offer","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsOfferResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/{proposal_id}/panel-offer":{"put":{"tags":["proposals"],"summary":"Apply Panel Offer","description":"Apply a panel to the proposal.","operationId":"proposals-apply_panel_offer","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PanelOfferUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunwiseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/{proposal_id}/inverter-offer":{"put":{"tags":["proposals"],"summary":"Apply Inverter Offer","description":"Apply an inverter to the proposal.","operationId":"proposals-apply_inverter_offer","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InverterOfferUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunwiseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/{proposal_id}/configure":{"put":{"tags":["proposals"],"summary":"Configure Proposal","description":"Apply several components to a proposal in one call.\n\nSequential, not transactional. Each upstream endpoint recomputes the\nwhole proposal, so the steps cannot be batched from here; they run in\ndependency order and stop at the first failure, leaving earlier steps\napplied. The response names them so a caller can see the real state\nrather than assume an all-or-nothing outcome.\n\nPer-step timings are returned because they are the evidence for\nwhether a true bulk endpoint upstream is worth building.","operationId":"proposals-configure_proposal","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProposalConfigureRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProposalConfigureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/{proposal_id}/battery-offer":{"post":{"tags":["proposals"],"summary":"Add Battery Offer","description":"Add a battery to a proposal that does not have one yet.","operationId":"proposals-add_battery_offer","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatteryOfferCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunwiseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"},"put":{"tags":["proposals"],"summary":"Apply Battery Offer","description":"Set the battery quote row: model count and pricing.\n\nUse this for an exact number of batteries. The v3 storage endpoint\nauto-sizes the array instead, and cannot be told a literal count.","operationId":"proposals-apply_battery_offer","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatteryOfferUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunwiseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/{proposal_id}/storage-offer-v3":{"get":{"tags":["proposals"],"summary":"Get Storage Offer V3","description":"Current BESS configuration, as the portal's storage screen reads it.","operationId":"proposals-get_storage_offer_v3","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"},"put":{"tags":["proposals"],"summary":"Apply Storage Offer V3","description":"Configure the battery (BESS) the way the portal's BESS screen does.\n\nPrefer this over `/storage-offer`, which drives the older v2 route and\ncan only size a battery row. Send only the steps you mean to change.","operationId":"proposals-apply_storage_offer_v3","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageOfferV3Update"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/{proposal_id}/costing-type":{"put":{"tags":["proposals"],"summary":"Set Costing Type","description":"Set the system price / costing type of the proposal.","operationId":"proposals-set_costing_type","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CostingTypeUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunwiseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/{proposal_id}/offer-discount":{"put":{"tags":["proposals"],"summary":"Set Offer Discount","description":"Apply a discount to the proposal.","operationId":"proposals-set_offer_discount","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferDiscountUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunwiseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/proposals/offer-parent/{project_id}":{"get":{"tags":["proposals"],"summary":"Get Project Offer Parent","description":"Parent project data for the offer.","operationId":"proposals-get_project_offer_parent","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferParentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"proposals"}},"/boty/api/v1/presets/":{"get":{"tags":["presets"],"summary":"Get Presets","description":"## Description\nRetrieve all active proposal plans for the authenticated user's company.\nNo request body is required; authentication context is used.\n\n# Response\n- Returns a list of `ProposalPlanSchema` objects representing the active proposal plans.","operationId":"presets-get_presets","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProposalPlanSchema"},"type":"array","title":"Response Presets-Get Presets"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"presets"}},"/boty/api/v1/presets/{preset_id}/":{"get":{"tags":["presets"],"summary":"Get Preset","description":"## Description\nRetrieve detailed information about a specific proposal plan by its ID for the authenticated user's company.\nNo request body is required; authentication context is used.\n\n# Response\n- Returns a `ProposalPlanDetailSchema` object representing the proposal plan details, or `None` if not found.","operationId":"presets-get_preset","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ProposalPlanDetailSchema"},{"type":"null"}],"title":"Response Presets-Get Preset"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"presets"}},"/boty/api/v1/reports/csv/{report_id}/":{"get":{"tags":["reports"],"summary":"Download Report Csv","description":"Endpoint to download a report in CSV format.\n\n# Request Parameters\n- `report_id` (UUID): Identifier of the report to download in CSV format.\n\n# Response\n- Returns a CSV file content.\n- The file is delivered with the header:\n`Content-Disposition: attachment; filename=report_{report_id}.csv`\n\n# Important Notes\n- If the report has not been generated, does not exist, or is inaccessible to the user, an error will be returned.","operationId":"reports-download_report_csv","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"reports"}},"/boty/api/v1/reports/active-reports/":{"get":{"tags":["reports"],"summary":"Get Active Reports","description":"# Response\n- Returns a list of `ReportWithUrl` objects containing active report information\nalong with their public URLs.\n\n# Important Notes\n- Only reports generated by the user are included.\n- If the user has no active reports, an empty list will be returned.","operationId":"reports-get_active_reports","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ReportWithUrl"},"type":"array","title":"Response Reports-Get Active Reports"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"reports"}},"/boty/api/v1/reports/active-report/{report_id}/":{"get":{"tags":["reports"],"summary":"Get Active Report","description":"## Description\nRetrieve a single active report by its identifier for the authenticated user.\nThe endpoint returns the report metadata along with its accessible URL.\n\n# Request Parameters\n- `report_id` (UUID): Identifier of the report to retrieve.\n\n# Response\n- Returns a `ReportWithUrl` object containing the report information and URL.\n\n# Important Notes\n- Only reports generated by the authenticated user are accessible.","operationId":"reports-get_active_report","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportWithUrl"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"reports"}},"/boty/api/v1/reports/send-report-email/{report_id}":{"post":{"tags":["reports"],"summary":"Send Report Email","operationId":"reports-send_report_email","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_reports-send_report_email"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"reports"}},"/boty/api/v1/reports/reset-report/{report_id}":{"post":{"tags":["reports"],"summary":"Reset Report","operationId":"reports-reset_report","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"reports"}},"/boty/api/v1/reports/create-report":{"post":{"tags":["reports"],"summary":"Create Report","description":"Create a new report for a given project and a specific historical record.\n\nParameters:\n- history_id (str): The identifier of the historical data to use for the report.\n- report_name (str): The name to assign to the new report.\n- project_id (UUID): The unique identifier of the project to associate with the report.\n\nReturns:\n    The id, name, commercial_offer, project_id and interactive_data (if exists) of the created report.\n\nRaises:\n    HTTPException: If the report creation fails or the user is not authorized.\n\nExample Request Body:\n{\n    \"history_id\": \"uuid-string\",\n    \"report_name\": \"My Report\",\n    \"project_id\": \"uuid-string\"\n}","operationId":"reports-create_report","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_reports-create_report"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunwiseCreateReportDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"reports"}},"/boty/api/v1/reports/report-search/":{"get":{"tags":["reports"],"summary":"Search Reports","description":"## Description\nSearch for reports using the Searchi API.\n\n# Request Parameters\n- `query` (str): The search query string.\n\n# Response\n- Returns a list of `SearchiReportResponse` objects matching the search criteria.","operationId":"reports-search_reports","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","title":"Query"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SearchiReportResponse"},"title":"Response Reports-Search Reports"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"reports"}},"/boty/api/v1/summaries/projects/":{"get":{"tags":["summaries"],"summary":"Get Project Summaries List","description":"## Description\nRetrieve a list of project summaries for the authenticated user.\nEach summary includes the summary name, associated contact, an interactive summary URL,\nand a list of related projects.\n\n# Important Notes\n- Only projects accessible to the authenticated user are included.","operationId":"summaries-get_project_summaries_list","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProjectSummary"},"type":"array","title":"Response Summaries-Get Project Summaries List"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"summaries"}},"/boty/api/v1/summaries/projects/{summary_id}/":{"get":{"tags":["summaries"],"summary":"Get Project Summary","description":"## Description\nRetrieve a single project summary by its identifier for the authenticated user.\nThe summary includes the summary name, associated contact, an interactive summary URL,\nand a list of related projects.\n\n# Important Notes\n- Only project summaries accessible to the authenticated user are included.\n- If the summary does not exist or is not accessible, an error will be returned.","operationId":"summaries-get_project_summary","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"summary_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Summary Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"summaries"}},"/boty/api/v1/summaries/projects-search/":{"get":{"tags":["summaries"],"summary":"Search Project Summaries","description":"## Description\nSearch for project summaries based on a query string.\n\n# Request Parameters\n- `search` (str): The search query string.\n\n# Response\n- Returns a list of project summaries matching the search criteria.\n\n# Important Notes\n- Only project summaries accessible to the user are included.\n- If no matching summaries are found, an empty list will be returned.","operationId":"summaries-search_project_summaries","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"search","in":"query","required":true,"schema":{"type":"string","title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SearchiProjectSummaryResponse"},"title":"Response Summaries-Search Project Summaries"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"summaries"}},"/boty/api/v1/summaries/proposals/":{"get":{"tags":["summaries"],"summary":"Get Proposal Summaries List","description":"## Description\nRetrieve a list of proposal summaries.\n\n# Important Notes\n- If no proposals summaries are available, an empty list will be returned.","operationId":"summaries-get_proposal_summaries_list","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProposalSummary"},"type":"array","title":"Response Summaries-Get Proposal Summaries List"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"summaries"}},"/boty/api/v1/summaries/proposals/{summary_id}/":{"get":{"tags":["summaries"],"summary":"Get Proposal Summary","description":"## Description\nRetrieve a single proposal summary by its identifier.\n\n# Important Notes\n- Only proposal summaries accessible to the user are included.\n- If the summary does not exist or is not accessible, an error will be returned.","operationId":"summaries-get_proposal_summary","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"summary_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Summary Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProposalSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"summaries"}},"/boty/api/v1/summaries/proposals-search/":{"get":{"tags":["summaries"],"summary":"Search Proposal Summaries","description":"## Description\nSearch for proposal summaries based on a query string.\n\n# Request Parameters\n- `search` (str): The search query string.\n\n# Response\n- Returns a list of `SearchiProposalSummaryResponse` objects matching the search criteria.\n\n# Important Notes\n- Only proposal summaries accessible to the user are included.\n- If no matching summaries are found, an empty list will be returned.","operationId":"summaries-search_proposal_summaries","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"search","in":"query","required":true,"schema":{"type":"string","title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SearchiProposalSummaryResponse"},"title":"Response Summaries-Search Proposal Summaries"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"summaries"}},"/boty/api/v1/contact-trackings/":{"post":{"tags":["contact trackings"],"summary":"Create Contact Tracking","description":"## Description\nCreate a new tracking record for a contact in Sunwise.\n\n# Request Body\n- `contact` (UUID): The contact to track.\n- `description` (str): Notes for this tracking activity.\n- `tracking_type` (int): 0=Call, 1=Email, 2=Visit, 3=Message, 4=Other.\n- `objective_tracking` (int): 0=GetReceipt, 1=Tracking, 2=GetInfo, 3=Appointment, 4=Other.\n- `notification_at` (str | null): Reminder datetime as \"YYYY-MM-DD HH:MM:SS\".\n- `remember` (bool): Whether to schedule a notification.\n- `tracking_purpose` (UUID | null): ID from `/contacts-trackings/purposes/`.\n- `project` (UUID | null): Optional linked project.\n- `agent` (UUID | null): Defaults to the contact's assigned agent.\n- `assigned_to` (list[UUID] | null): Defaults to `[contact.agent]`.\n\n# Response\n- Returns the created `ContactTrackingResponse` from Sunwise.\n\n# Important Notes\n- If `agent` or `assigned_to` are omitted, both default to the contact's\n  current agent.\n- If `remember` is true, `notification_at` must be provided and in the future.","operationId":"contact trackings-create_contact_tracking","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContactTrackingPayload"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactTrackingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"contact-trackings"}},"/boty/api/v1/contact-trackings/purposes/":{"get":{"tags":["contact trackings"],"summary":"List Tracking Purposes","description":"## Description\nRetrieve the list of tracking purposes (CompanyCatalog entries with\nvalue=\"tracking_tracking\", type=0) for the authenticated user's company.\nThese are the options shown in the \"purpose\" dropdown when creating a\ncontact tracking record.\n\n# Response\n- Returns a list of `TrackingPurposeSchema` objects with id, name, value,\n  and primary_color.","operationId":"contact trackings-list_tracking_purposes","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TrackingPurposeSchema"},"type":"array","title":"Response Contact Trackings-List Tracking Purposes"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"contact-trackings"}},"/boty/api/v1/contact-trackings/{tracking_id}/":{"delete":{"tags":["contact trackings"],"summary":"Delete Contact Tracking","description":"## Description\nHard-delete a contact tracking record in Sunwise.\n\n## Path Parameter\n- `tracking_id` (UUID): The ID of the tracking record to delete.\n\n## Response\n- 204 No Content on success.","operationId":"contact trackings-delete_contact_tracking","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"tracking_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tracking Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"contact-trackings"}},"/boty/api/v1/contact-trackings/comments/":{"post":{"tags":["contact trackings"],"summary":"Create Contact Tracking Comment","description":"## Description\nAdd a comment to an existing contact tracking record in Sunwise.\n\n## Request Body\n- `contact_tracking` (UUID): The ID of the tracking record to comment on.\n- `comment` (str): The comment text (max 1000 chars).\n\n## Response\nReturns the created `ContactTrackingCommentResponse` including `id`,\n`comment`, `contact_tracking`, `created_by`, and\n`created_at`.","operationId":"contact trackings-create_contact_tracking_comment","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContactTrackingCommentPayload"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactTrackingCommentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"contact-trackings"}},"/boty/api/v1/contact-trackings/comments/{comment_id}/":{"delete":{"tags":["contact trackings"],"summary":"Delete Contact Tracking Comment","description":"## Description\nSoft-delete a contact tracking comment in Sunwise (sets `deleted=True`).\n\n## Path Parameter\n- `comment_id` (UUID): The ID of the comment to delete.\n\n## Response\n- 204 No Content on success.","operationId":"contact trackings-delete_contact_tracking_comment","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Comment Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"contact-trackings"}},"/boty/api/v1/contact-trackings/contact/{contact_id}/":{"get":{"tags":["contact trackings"],"summary":"List Contact Trackings","description":"## Description\nRetrieve all tracking records for a given contact, ordered by most recent\nfirst. Each tracking includes its non-deleted comments with author info.\n\n## Path Parameter\n- `contact_id` (UUID): The ID of the contact whose trackings to retrieve.\n\n## Response\n- Returns a list of `ContactTrackingWithCommentsResponse` objects.","operationId":"contact trackings-list_contact_trackings","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactTrackingWithCommentsResponse"},"title":"Response Contact Trackings-List Contact Trackings"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"contact-trackings"}},"/boty/api/v1/companies/names":{"post":{"tags":["companies"],"summary":"Get Companies Names","description":"# Description\nRetrieve the name of every company matching the given IDs.\n# Request Body\n- `company_ids` (list[UUID]): The unique identifiers of the companies.\n# Response\n- Returns a list of `CompanyData` objects with the `id` and `name` of each\n  company found, sorted by name.\n- IDs without a matching company are omitted, so the response may be\n  shorter than the request (empty when none of them exist).","operationId":"companies-get_companies_names","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_companies-get_companies_names"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CompanyData"},"type":"array","title":"Response Companies-Get Companies Names"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"-"}},"/boty/api/v1/documents/{as_project_id}":{"post":{"tags":["historical electric-bills"],"summary":"Upload Document","description":"## Description\nUpload historical files to an existing project so they can be processed and\nleveraged for generating the historical analysis of the project. The files are attached\nto the specified project and queued for ingestion.\nValid file types include PDFs, XMLs, PNGs, and CSV/XLSX.\n\n# Request Parameters\n- `as_project_id` (UUID): Identifier of the existing project to which the files will be attached.\n- `files` (List[UploadFile]): List of historical files to upload and process.","operationId":"historical electric-bills-upload_document","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"as_project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"As Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_historical_electric-bills-upload_document"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"historical-electric-bills"}},"/boty/api/v1/documents/{project_id}/":{"get":{"tags":["historical electric-bills"],"summary":"Get Documents","description":"## Description\nRetrieve all available historical documents associated with a specific project.\n\n# Request Parameters\n- `project_id` (UUID): Identifier of the project for which to retrieve documents.","operationId":"historical electric-bills-get_documents","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BaseHistoricalDocument"},"title":"Response Historical Electric-Bills-Get Documents"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"historical-electric-bills","security":[{"ApiKeyAuth":[]}]}},"/boty/api/v1/financing/financing-options/{proposal_id}/":{"get":{"tags":["financing"],"summary":"Get Financing Options","description":"## Description\nRetrieve financing options for a commercial offer (proposal) by its identifier for the authenticated user.\nNo request body is required; authentication context is used.\nWhen adding a financing plan to a commercial offer, this endpoint can be used to fetch available financing options.\n\n# Request Parameters\n- `proposal_id` (UUID): Identifier of the commercial offer to retrieve financing options for.\n- `bussines_type` (Literal): Type of business entity. Options are \"person_company\", \"company\", or \"physical_person\". Default is \"company\".\n\n# Response\n- Returns a `FinancierSchema` object containing the financing options data.","operationId":"financing-get_financing_options","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}},{"name":"business_type","in":"query","required":false,"schema":{"enum":["person_company","company","physical_person"],"type":"string","default":"company","title":"Business Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FinancierSchema"},"title":"Response Financing-Get Financing Options"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"financing"}},"/boty/api/v1/financing/financing-info/{proposal_id}/":{"get":{"tags":["financing"],"summary":"Get Financing Info","description":"## Description\nRetrieve detailed financing information for a commercial offer that has an active financing plan applied.\nNo request body is required; authentication context is used.\n# Request Parameters\n- `proposal_id` (UUID): Identifier of the commercial offer to retrieve financing information for.\n\n# Response\n- Returns a dictionary containing the commercial offer data with its financing information data.","operationId":"financing-get_financing_info","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Financing-Get Financing Info"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"financing"}},"/boty/api/v1/financing/create-financing-in-proposal/{proposal_id}/":{"post":{"tags":["financing"],"summary":"Create Financing In Proposal","description":"## Description\nCreate a financing plan within a commercial offer (proposal). The proposal must already exist.\nThe needed data can be found in the '/boty/api/v1/financing/financing-options/{proposal_id}/' endpoint.\n\nSimplified flow: always applies (`financing_mode=apply`) with default\nfinancing terms — no hitch, no commissions. To control those fields,\nor to simulate without applying, use `/financing/credit-simulation`.\n\n# Request Parameters\n- `proposal_id` (UUID): Identifier of the commercial offer to create the financing plan for.\n- Request body of type `CreateFinancingRequest` containing:\n    - `financier_id` (UUID): Identifier of the financier.\n    - `financier_product_id` (UUID): Identifier of the financier product.\n    - `term` (int): Number of term (months) for the financing plan.","operationId":"financing-create_financing_in_proposal","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFinancingRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Financing-Create Financing In Proposal"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"financing"}},"/boty/api/v1/financing/credit-simulation":{"post":{"tags":["financing"],"summary":"Credit Simulation","description":"Simulate or apply financing on a proposal.\n\nFull-control version of `/financing/create-financing-in-proposal/`:\nsame upstream, but exposes hitch, commissions, `commission_credit`\nand `financing_mode` (`simulate` quotes without modifying the\nproposal; `apply` applies the financing).","operationId":"financing-credit_simulation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditSimulationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"financing"}},"/boty/api/v1/financing/credit-application/{proposal_id}":{"put":{"tags":["financing"],"summary":"Create Credit Application","description":"Create the credit application for a financed proposal.","operationId":"financing-create_credit_application","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Financing-Create Credit Application"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"financing"}},"/boty/api/v1/financing/credit-application-documents/{credit_application_id}":{"get":{"tags":["financing"],"summary":"List Credit Application Documents","description":"Required document slots for a credit application.","operationId":"financing-list_credit_application_documents","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"credit_application_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Credit Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditApplicationDocumentsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"financing"}},"/boty/api/v1/financing/credit-application-documents/{document_id}":{"put":{"tags":["financing"],"summary":"Upload Credit Application Document","description":"Upload a file into one document slot.","operationId":"financing-upload_credit_application_document","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_financing-upload_credit_application_document"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SunwiseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"financing"}},"/boty/api/v1/monitorings/indicators":{"get":{"tags":["monitorings"],"summary":"Get Reads Indicators","description":"## Description\nRetrieve high-level solar energy monitoring KPIs for the historical generation.\n\n# Response\nReturns a `GetReadsIndicatorsSchema` object with the following fields:\n- `global_total_generated`: Cumulative energy generated (kWh) across all projects since tracking began.\n- `global_total_projects`: Total number of projects ever tracked in the account.\n- `last_month_total_generated`: Total energy generated (kWh) during the previous calendar month.\n- `last_month_total_projects`: Number of projects that reported generation last month.\n- `current_month_total_generated`: Total energy generated (kWh) during the current calendar month.\n- `current_month_total_projects`: Number of projects that have reported generation this month.\n- `active_projects`: Projects currently active and reporting telemetry.\n- `alert_projects`: Projects flagged with monitoring alerts.\n- `inactive_projects`: Projects that are no longer active.\n- `unmonitored_project`: Projects linked in Sunwise but without a monitoring integration configured.","operationId":"monitorings-get_reads_indicators","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetReadsIndicatorsSchema"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"monitorings"}},"/boty/api/v1/monitorings/mapped-projects":{"get":{"tags":["monitorings"],"summary":"Get Mapped Projects","description":"## Description\nRetrieve all Sunwise solar installation locations linked to the user's account,\nalong with their associated after-sales monitoring projects.\n\n# Response\nReturns a list of location objects. Each location includes:\n- `id`: Sunwise project UUID used as the location identifier.\n- `name`, `address`, `latitude`, `longitude`, `time_zone`: Physical location details of the installation.\n- `start_date`: Date the installation became operational.\n- `status`: Either `ACTIVE` or `INACTIVE`.\n- `last_read`: Timestamp of the most recent telemetry reading received.\n- `projects`: List of after-sales monitoring projects linked to this location. Each project includes:\n    - Availability flags (`generation`, `battery_soh`, `battery_power`, `battery_soc`,\n      `total_consumption`, `grid_consumption`, `self_consumption`) indicating which\n      telemetry channels are available for that installation.\n    - `read_requirements`: Connection details for the monitoring station (`station_id`, `station_name`).\n    - `provider_id`: UUID of the monitoring hardware/software provider.\n    - `first_read`: Timestamp of the first telemetry reading ever recorded.\n    - `created_at` / `updated_at`: Record lifecycle timestamps.","operationId":"monitorings-get_mapped_projects","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"monitorings"}},"/boty/api/v1/monitorings/reads-by-project/{project_id}":{"get":{"tags":["monitorings"],"summary":"Get Reads By Project","description":"|\n## Description\nRetrieve 5-minute interval telemetry time-series data for a specific after-sales monitoring project\nwithin a given date range.\n\n# Request Parameters\n- `project_id` (UUID): Identifier of the related Sunwise monitoring project.\n- `initial_date` (str): Start date of the range in ISO format (e.g. `2026-03-29`).\n- `final_date` (str): End date of the range in ISO format (e.g. `2026-03-29`).\n\n# Response\nReturns a `ReadsResponse` object with parallel arrays — all arrays share the same index,\nso `timestamp[i]` corresponds to `generation[i]`, `missing_values[i]`, etc.\n- `status`: HTTP status code from the monitoring provider.\n- `timestamp`: List of ISO datetime strings at 5-minute intervals covering the requested range.\n- `estimated`: Estimated energy generation (kWh) per interval, based on the solar model.\n- `missing_values`: Boolean array indicating whether the reading at that interval was absent\n  and filled with a fallback value.\n- `generation`: Actual solar energy generated (kWh) per interval.\n- `battery_soh`: Battery State of Health readings (kWh). Empty list if the installation has no battery.\n- `battery_soc`: Battery State of Charge readings (kWh). Empty list if the installation has no battery.\n- `battery_power`: Battery charge/discharge power (kWh) per interval.\n- `total_consumption`: Total site energy consumption (kWh) per interval.\n- `grid_consumption`: Energy consumed from the utility grid (kWh) per interval.\n- `self_consumption`: Solar energy consumed directly on-site without going to the grid (kWh) per interval.","operationId":"monitorings-get_reads_by_project","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"initial_date","in":"query","required":true,"schema":{"type":"string","title":"Initial Date"}},{"name":"final_date","in":"query","required":true,"schema":{"type":"string","title":"Final Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"monitorings"}},"/boty/api/v1/monitorings/mapped-plants":{"post":{"tags":["monitorings"],"summary":"Get Mapped Plants","description":"## Description\nRetrieve all V2 after-sales monitoring plants linked to the user's\naccount, enriched with their Sunwise project IDs and filtered by\nproject-level attributes and user permissions.\n\nPlants other companies shared with this one are included, each with\nits ``plant_type`` so the map can tell them apart from own plants.\n\n# Flow\n1. Aftersales API returns plants filtered by ``provider`` / ``status``.\n2. PlantBridge → Project resolves which Sunwise projects each plant\n   is linked to.\n3. Permission checks (contact visibility) and project-level filters\n   (contact, rate, agent, status, location, PPA) narrow the results.\n4. Each plant is returned with the list of surviving project IDs.","operationId":"monitorings-get_mapped_plants","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectsFilter"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MappedPlantResponse"},"type":"array","title":"Response Monitorings-Get Mapped Plants"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"monitorings"}},"/boty/api/v1/monitorings/dashboard-list/":{"get":{"tags":["monitorings"],"summary":"Get Dashboard List","description":"## Description\nRetrieve the filter options for the after-sales monitoring dashboard.\nCombines V1 project-level data (from the Sunwise API) with V2\nplant-level data.\n\n# Response\nReturns a `DashboardListData` object wrapping:\n- `contacts`: All contacts in the company with their assigned agent.\n- `agents`: All agents (sales reps) available in the company.\n- `projects`: After-sales projects with their contact, workflow status, and CFE rate.\n- `project_status`: Available workflow statuses with display colors.","operationId":"monitorings-get_dashboard_list","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardListData"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"monitorings"}},"/boty/api/v1/monitorings/test-alert-email":{"post":{"tags":["monitorings"],"summary":"Test Alert Email","operationId":"monitorings-test_alert_email","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_monitorings-test_alert_email"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"monitorings","security":[{"ApiKeyAuth":[]}]}},"/boty/api/v1/generation-reports/send-report-email/{automation_id}":{"post":{"tags":["generation reports"],"summary":"Send Generation Report Email Endpoint","operationId":"generation reports-send_generation_report_email_endpoint","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Automation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_generation_reports-send_generation_report_email_endpoint"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"generation-reports"}},"/boty/api/v1/lisa/rpus":{"get":{"tags":["LISA RPUs"],"summary":"List Rpus","description":"List the RPUs under the caller's LISA account.","operationId":"LISA RPUs-list_rpus","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"credential_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Credential Id"}},{"name":"alias","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias"}},{"name":"rpu_status","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rpu Status"}},{"name":"with_autofetch","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"With Autofetch"}},{"name":"send_email_notifications","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Send Email Notifications"}},{"name":"service_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Number"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"lisa-rpus"},"post":{"tags":["LISA RPUs"],"summary":"Create Rpu","description":"Register a service number in LISA.\n\nWith `fetch_periods` (the default) LISA immediately downloads up to\n`max_periods` CFE periods, each billed as a `credits_period` on the\nLISA side. Returns the task handle to poll via `/lisa/tasks`.","operationId":"LISA RPUs-create_rpu","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_LISA_RPUs-create_rpu"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"lisa-rpus"}},"/boty/api/v1/lisa/rpus/by-service-number/{service_number}":{"get":{"tags":["LISA RPUs"],"summary":"Get Rpus By Service Number","description":"Look up RPUs by their 12-digit CFE service number.","operationId":"LISA RPUs-get_rpus_by_service_number","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"service_number","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{12}$","title":"Service Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"lisa-rpus"}},"/boty/api/v1/lisa/rpus/{rpu_id}":{"get":{"tags":["LISA RPUs"],"summary":"Get Rpu","description":"Full detail for one RPU, including its auto-fetch schedule.","operationId":"LISA RPUs-get_rpu","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"rpu_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rpu Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"lisa-rpus"}},"/boty/api/v1/lisa/rpus/sync":{"post":{"tags":["LISA RPUs"],"summary":"Sync Rpu","description":"Pull fresh CFE periods for an existing RPU.\n\nAsynchronous: returns a task handle. Each period LISA downloads is\nbilled as a `credits_period` there, independently of the\n`credits_request` boty charges for this call.","operationId":"LISA RPUs-sync_rpu","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_LISA_RPUs-sync_rpu"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"lisa-rpus"}},"/boty/api/v1/lisa/periods":{"get":{"tags":["LISA Periods"],"summary":"List Periods","description":"List periods under the caller's account.\n\n`initial_date`/`final_date` filter by the period's own CFE dates;\nthe `created_at_*` pair filters by when LISA ingested them — useful\nfor incremental syncs.","operationId":"LISA Periods-list_periods","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"credential_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Credential Id"}},{"name":"rpu_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Rpu Id"}},{"name":"initial_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Initial Date"}},{"name":"final_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Final Date"}},{"name":"created_at_initial_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Created At Initial Date"}},{"name":"created_at_final_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Created At Final Date"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"lisa-periods"}},"/boty/api/v1/lisa/periods/rpu/{rpu_id}":{"get":{"tags":["LISA Periods"],"summary":"List Periods By Rpu","description":"All periods belonging to one RPU.","operationId":"LISA Periods-list_periods_by_rpu","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"rpu_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rpu Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"lisa-periods"}},"/boty/api/v1/lisa/periods/{period_id}":{"get":{"tags":["LISA Periods"],"summary":"Get Period","description":"One period by id.","operationId":"LISA Periods-get_period","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"period_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Period Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"lisa-periods"}},"/boty/api/v1/lisa/tasks":{"get":{"tags":["LISA Tasks"],"summary":"List Tasks","description":"List the caller's LISA tasks, most recent first.","operationId":"LISA Tasks-list_tasks","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"task_types","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"integer"}},{"type":"null"}],"title":"Task Types"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"lisa-tasks"}},"/boty/api/v1/lisa/tasks/{task_id}/logs":{"get":{"tags":["LISA Tasks"],"summary":"Get Task Logs","description":"Execution log for one task — the 'did my sync work?' endpoint.","operationId":"LISA Tasks-get_task_logs","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"lisa-tasks"}},"/boty/api/v1/lisa/tasks/{task_id}/associations":{"get":{"tags":["LISA Tasks"],"summary":"Get Task Associations","description":"The RPUs/periods one task touched.","operationId":"LISA Tasks-get_task_associations","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"lisa-tasks"}},"/boty/api/v1/lisa/media/file":{"get":{"tags":["LISA Media"],"summary":"Get File","description":"Signed URL for one stored document. Expires in 1 hour.","operationId":"LISA Media-get_file","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"file_name","in":"query","required":true,"schema":{"type":"string","title":"File Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"lisa-media"}},"/boty/api/v1/lisa/media/files":{"post":{"tags":["LISA Media"],"summary":"Get Files","description":"Signed URLs for several documents at once.","operationId":"LISA Media-get_files","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_LISA_Media-get_files"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"lisa-media"}},"/boty/api/v1/lisa/media/pdf":{"post":{"tags":["LISA Media"],"summary":"Generate Pdf","description":"Render CFE bill XMLs as PDF.\n\nOne URL returns a PDF; several return a ZIP of PDFs. LISA decides,\nso its content-type and filename are passed through unchanged.","operationId":"LISA Media-generate_pdf","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_LISA_Media-generate_pdf"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"lisa-media"}},"/boty/api/v1/products/panels":{"get":{"tags":["products"],"summary":"List Panels","description":"List panels, scoped to the caller's branch offices.","operationId":"products-list_panels","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","default":"created_at","title":"Order By"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Sort"}},{"name":"status_flag","in":"query","required":false,"schema":{"type":"string","default":"active","title":"Status Flag"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"products"}},"/boty/api/v1/products/inverters":{"get":{"tags":["products"],"summary":"List Inverters","description":"List inverters, scoped to the caller's branch offices.","operationId":"products-list_inverters","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","default":"created_at","title":"Order By"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Sort"}},{"name":"status_flag","in":"query","required":false,"schema":{"type":"string","default":"active","title":"Status Flag"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"products"}},"/boty/api/v1/products/batteries":{"get":{"tags":["products"],"summary":"List Batteries","description":"List batteries, scoped to the caller's branch offices.","operationId":"products-list_batteries","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","default":"created_at","title":"Order By"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Sort"}},{"name":"status_flag","in":"query","required":false,"schema":{"type":"string","default":"active","title":"Status Flag"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"products"}},"/boty/api/v1/products/accessories":{"get":{"tags":["products"],"summary":"List Accessories","description":"List accessories, scoped to the caller's branch offices.","operationId":"products-list_accessories","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","default":"created_at","title":"Order By"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Sort"}},{"name":"status_flag","in":"query","required":false,"schema":{"type":"string","default":"active","title":"Status Flag"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"products"}},"/boty/api/v1/products/structures":{"get":{"tags":["products"],"summary":"List Structures","description":"List structures, scoped to the caller's branch offices.","operationId":"products-list_structures","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","default":"created_at","title":"Order By"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Sort"}},{"name":"status_flag","in":"query","required":false,"schema":{"type":"string","default":"active","title":"Status Flag"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"products"}},"/boty/api/v1/products/workforces":{"get":{"tags":["products"],"summary":"List Workforces","description":"List workforces, scoped to the caller's branch offices.","operationId":"products-list_workforces","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","default":"created_at","title":"Order By"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Sort"}},{"name":"status_flag","in":"query","required":false,"schema":{"type":"string","default":"active","title":"Status Flag"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"products"}},"/boty/api/v1/products/additionals":{"get":{"tags":["products"],"summary":"List Additionals","description":"List additionals, scoped to the caller's branch offices.","operationId":"products-list_additionals","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","default":"created_at","title":"Order By"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Sort"}},{"name":"status_flag","in":"query","required":false,"schema":{"type":"string","default":"active","title":"Status Flag"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"products"}},"/boty/api/v1/products/panels-companies":{"post":{"tags":["products"],"summary":"Add Panel To Catalog","description":"Add a panel to the company catalog. Returns 201, no body.","operationId":"products-add_panel_to_catalog","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddPanelToCatalogRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"products"}},"/boty/api/v1/products/inverters-companies":{"post":{"tags":["products"],"summary":"Add Inverter To Catalog","description":"Add an inverter to the company catalog. Returns 201, no body.","operationId":"products-add_inverter_to_catalog","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddInverterToCatalogRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"products"}},"/boty/api/v1/products/batteries-companies":{"post":{"tags":["products"],"summary":"Add Battery To Catalog","description":"Add a battery to the company catalog. Returns 201, no body.","operationId":"products-add_battery_to_catalog","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddBatteryToCatalogRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"products"}},"/boty/api/v1/wise/models":{"get":{"tags":["wise"],"summary":"List Available Models","description":"Models available for document extraction.\n\nReturns id, name and description only — the provider's own model\nidentifiers and prompt/training details are not exposed.","operationId":"wise-list_available_models","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"wise"}},"/boty/api/v1/wise/projects/documents/ingest":{"post":{"tags":["wise"],"summary":"Ingest Documents","description":"Create a project from uploaded documents and extract them.","operationId":"wise-ingest_documents","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_wise-ingest_documents"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"wise"}},"/boty/api/v1/wise/projects/me":{"get":{"tags":["wise"],"summary":"List My Projects","description":"Projects belonging to the caller.","operationId":"wise-list_my_projects","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"wise"}},"/boty/api/v1/wise/projects/lisa-schema/{document_id}":{"get":{"tags":["wise"],"summary":"Get Lisa Schema","description":"Extracted CFE data for one ingested document.","operationId":"wise-get_lisa_schema","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"wise"}},"/boty/api/v1/wise/projects/{project_id}":{"get":{"tags":["wise"],"summary":"Get Project","description":"One project, with its documents.","operationId":"wise-get_project","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"wise"},"post":{"tags":["wise"],"summary":"Upload Documents","description":"Add documents to an existing project.","operationId":"wise-upload_documents","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_wise-upload_documents"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"wise"},"delete":{"tags":["wise"],"summary":"Delete Project","description":"Delete a project and its documents.","operationId":"wise-delete_project","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"wise"}},"/boty/api/v1/wise/media/file":{"get":{"tags":["wise"],"summary":"Get Media File","description":"Signed URL for one stored wise document.","operationId":"wise-get_media_file","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"file_name","in":"query","required":true,"schema":{"type":"string","title":"File Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WiseMediaFile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"wise"}},"/boty/api/v1/pml/nodes":{"get":{"tags":["pml"],"summary":"Find Nodes","description":"Probable CENACE nodes for a coordinate.\n\nResolved from CFE's medium-voltage GeoServer layers. Passing `state`\nskips a geocoding round-trip and is noticeably faster.","operationId":"pml-find_nodes","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"string","description":"Latitude, e.g. 19.4326","title":"Lat"},"description":"Latitude, e.g. 19.4326"},{"name":"lon","in":"query","required":true,"schema":{"type":"string","description":"Longitude, e.g. -99.1332","title":"Lon"},"description":"Longitude, e.g. -99.1332"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"State; geocoded from the coordinate if omitted","title":"State"},"description":"State; geocoded from the coordinate if omitted"},{"name":"municipality","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SwpmlNode"},"title":"Response Pml-Find Nodes"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"pml"}},"/boty/api/v1/pml/regions":{"get":{"tags":["pml"],"summary":"List Regions","description":"CENACE regional control centres, with node counts.","operationId":"pml-list_regions","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SwpmlRegion"},"type":"array","title":"Response Pml-List Regions"}}}}},"security":[{"ApiKeyAuth":[]}],"x-scope":"pml"}},"/boty/api/v1/pml/regions/{region}/nodes":{"get":{"tags":["pml"],"summary":"List Nodes By Region","description":"Nodes in one region, with approximate coordinates.","operationId":"pml-list_nodes_by_region","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"region","in":"path","required":true,"schema":{"type":"string","title":"Region"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SwpmlNodeWithLocation"},"title":"Response Pml-List Nodes By Region"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"pml"}},"/boty/api/v1/pml/prices":{"get":{"tags":["pml"],"summary":"Get Pml Prices","description":"Hourly PML prices for a CENACE node, in MXN per kWh.\n\nCENACE publishes with a 7-day lag; swpml clamps `end_date` to\n`today - 7`, so a recent tail comes back absent rather than as an\nerror. Long ranges are chunked and cached upstream.","operationId":"pml-get_pml_prices","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"node","in":"query","required":true,"schema":{"type":"string","description":"CENACE node code","title":"Node"},"description":"CENACE node code"},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"system","in":"query","required":false,"schema":{"type":"string","description":"SIN, BCA or BCS","default":"SIN","title":"System"},"description":"SIN, BCA or BCS"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SwpmlDayPrices"},"title":"Response Pml-Get Pml Prices"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"pml"}},"/boty/api/v1/pml/prices/summary":{"get":{"tags":["pml"],"summary":"Summarize Pml Prices","description":"Monthly rollup of a node's PML prices.\n\nA year of hourly prices is ~8,760 records. This returns one row per\nmonth (avg/min/max) instead, which is what conversational callers\nwant.","operationId":"pml-summarize_pml_prices","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"node","in":"query","required":true,"schema":{"type":"string","description":"CENACE node code","title":"Node"},"description":"CENACE node code"},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"system","in":"query","required":false,"schema":{"type":"string","description":"SIN, BCA or BCS","default":"SIN","title":"System"},"description":"SIN, BCA or BCS"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwpmlPriceSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"pml"}},"/boty/api/v1/pml/prices/esios":{"get":{"tags":["pml"],"summary":"Get Esios Prices","description":"Hourly ESIOS/REE prices for a European region, in EUR per kWh.","operationId":"pml-get_esios_prices","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"region","in":"query","required":false,"schema":{"type":"string","description":"Spain, Portugal, France, …","default":"Spain","title":"Region"},"description":"Spain, Portugal, France, …"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SwpmlDayPrices"},"title":"Response Pml-Get Esios Prices"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"pml"}},"/boty/api/v1/pml/prices/indicators":{"get":{"tags":["pml"],"summary":"Get Price Indicators","description":"Aggregate price indicators for a node up to `end_date`.","operationId":"pml-get_price_indicators","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"node","in":"query","required":true,"schema":{"type":"string","description":"CENACE node code","title":"Node"},"description":"CENACE node code"},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"system","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"pml"}},"/boty/api/v1/pml/critical-hours":{"get":{"tags":["pml"],"summary":"Get Critical Hours","description":"Critical hours and the MBP bonus for one electrical system.","operationId":"pml-get_critical_hours","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"system","in":"query","required":false,"schema":{"type":"string","description":"SIN, BCA or BCS","default":"SIN","title":"System"},"description":"SIN, BCA or BCS"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwpmlCriticalHours"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-scope":"pml"}}},"components":{"schemas":{"Accessory":{"properties":{"discount":{"type":"number","title":"Discount"},"cost":{"type":"number","title":"Cost"},"percentage_discount":{"type":"number","title":"Percentage Discount"},"margin":{"type":"number","title":"Margin"},"unit_price":{"type":"number","title":"Unit Price"},"final_cost":{"type":"number","title":"Final Cost"},"final_cost_without_discount":{"type":"number","title":"Final Cost Without Discount"},"quantity":{"type":"integer","title":"Quantity"},"product_branch_office":{"type":"string","title":"Product Branch Office"},"product_brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Brand"}},"type":"object","required":["discount","cost","percentage_discount","margin","unit_price","final_cost","final_cost_without_discount","quantity","product_branch_office"],"title":"Accessory"},"AddBatteryToCatalogRequest":{"properties":{"parent_battery":{"type":"string","format":"uuid","title":"Parent Battery"},"branch_offices":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Offices"}},"type":"object","required":["parent_battery"],"title":"AddBatteryToCatalogRequest"},"AddInverterToCatalogRequest":{"properties":{"parent_inverter":{"type":"string","format":"uuid","title":"Parent Inverter"},"branch_offices":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Offices"}},"type":"object","required":["parent_inverter"],"title":"AddInverterToCatalogRequest"},"AddPanelToCatalogRequest":{"properties":{"parent_panel":{"type":"string","format":"uuid","title":"Parent Panel","description":"Sunwise base-catalog panel to clone into the company"},"branch_offices":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Offices","description":"Comma-separated branch ids, or \"company\" for global"}},"type":"object","required":["parent_panel"],"title":"AddPanelToCatalogRequest"},"Additional":{"properties":{"discount":{"type":"number","title":"Discount"},"cost":{"type":"number","title":"Cost"},"percentage_discount":{"type":"number","title":"Percentage Discount"},"margin":{"type":"number","title":"Margin"},"unit_price":{"type":"number","title":"Unit Price"},"final_cost":{"type":"number","title":"Final Cost"},"final_cost_without_discount":{"type":"number","title":"Final Cost Without Discount"},"quantity":{"type":"integer","title":"Quantity"},"product_branch_office":{"type":"string","title":"Product Branch Office"},"product_brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Brand"}},"type":"object","required":["discount","cost","percentage_discount","margin","unit_price","final_cost","final_cost_without_discount","quantity","product_branch_office"],"title":"Additional"},"AftersalesEmailConfig":{"properties":{"integration_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Integration Type"},"emails_to_notify":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Emails To Notify","default":[]},"email_subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Subject"},"email_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Message"},"emails_cc":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Emails Cc","default":[]},"emails_bcc":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Emails Bcc","default":[]},"email_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Title"},"email_reply_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Reply To"},"report_delivery_method":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Report Delivery Method"}},"type":"object","title":"AftersalesEmailConfig"},"AgentResponse":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","title":"AgentResponse"},"AgentSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"username":{"type":"string","title":"Username"},"email":{"type":"string","title":"Email"}},"type":"object","required":["id","first_name","last_name","username","email"],"title":"AgentSchema"},"BACKGROUND_PROJECT_STOP":{"type":"integer","enum":[-1,0,1],"title":"BACKGROUND_PROJECT_STOP"},"BaseHistoricalDocument":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"final_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Final Date"},"initial_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Initial Date"}},"type":"object","required":["id","project_id"],"title":"BaseHistoricalDocument"},"BasicCommercialOfferParent":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"parent_id":{"type":"string","format":"uuid","title":"Parent Id"}},"type":"object","required":["id","parent_id"],"title":"BasicCommercialOfferParent"},"Battery":{"properties":{"discount":{"type":"number","title":"Discount"},"cost":{"type":"number","title":"Cost"},"percentage_discount":{"type":"number","title":"Percentage Discount"},"margin":{"type":"number","title":"Margin"},"unit_price":{"type":"number","title":"Unit Price"},"final_cost":{"type":"number","title":"Final Cost"},"final_cost_without_discount":{"type":"number","title":"Final Cost Without Discount"},"quantity":{"type":"integer","title":"Quantity"},"load_capacity":{"type":"integer","title":"Load Capacity"},"product_branch_office":{"type":"string","title":"Product Branch Office"},"product_brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Brand"}},"type":"object","required":["discount","cost","percentage_discount","margin","unit_price","final_cost","final_cost_without_discount","quantity","load_capacity","product_branch_office"],"title":"Battery"},"BatteryOfferCreate":{"properties":{"product_branch_office":{"type":"string","format":"uuid","title":"Product Branch Office"},"quantity":{"type":"integer","minimum":1.0,"title":"Quantity","default":1}},"type":"object","required":["product_branch_office"],"title":"BatteryOfferCreate","description":"Add a battery to a proposal that has none.\n\n`BatteryOfferUpdate` names an existing row by `id`, so it cannot put\nstorage on a proposal that was created without it — this creates the\nrow. Pricing comes from the catalog entry rather than the caller."},"BatteryOfferItem":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Discount"},"cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost"},"percentage_discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentage Discount"},"discount_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Discount Type"},"margin":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin"},"unit_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Unit Price"},"final_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Final Cost"},"final_cost_without_discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Final Cost Without Discount"},"quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantity"},"load_capacity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Load Capacity"},"product_branch_office":{"anyOf":[{"$ref":"#/components/schemas/SimpleBranchOffice"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"BatteryOfferItem"},"BatteryOfferUpdate":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"quantity":{"type":"integer","minimum":1.0,"title":"Quantity"},"cost":{"type":"number","minimum":0.0,"title":"Cost","description":"Unit cost of one battery"},"unit_price":{"type":"number","minimum":0.0,"title":"Unit Price"},"margin":{"type":"number","title":"Margin","default":0},"discount":{"type":"number","title":"Discount","default":0},"discount_type":{"type":"integer","title":"Discount Type","default":1}},"type":"object","required":["id","quantity","cost","unit_price"],"title":"BatteryOfferUpdate","description":"Mirror of `PutBatteryOfferSerializer` — the battery quote row.\n\nThis is the portal's own battery control, and the one to use when a\ncaller wants an exact number of batteries: it sets `quantity`\nliterally, unlike the v3 storage endpoint which auto-sizes the array\nfrom the consumption profile.\n\nPricing is required in practice even though the serializer defaults\nit. `cost` defaults to 0 upstream, so a payload of just `id` and\n`quantity` silently zeroes the line — verified against staging,\nwhere it produced `final_cost: 0.0`. The portal always sends the\nfull set, and so does this schema."},"Body_LISA_Media-generate_pdf":{"properties":{"urls":{"items":{"type":"string"},"type":"array","title":"Urls"}},"type":"object","required":["urls"],"title":"Body_LISA Media-generate_pdf"},"Body_LISA_Media-get_files":{"properties":{"file_names":{"items":{"type":"string"},"type":"array","title":"File Names"}},"type":"object","required":["file_names"],"title":"Body_LISA Media-get_files"},"Body_LISA_RPUs-create_rpu":{"properties":{"service_number":{"type":"string","pattern":"^\\d{12}$","title":"Service Number"},"alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias"},"credential_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Credential Id"},"fetch_periods":{"type":"boolean","title":"Fetch Periods","default":true},"max_periods":{"type":"integer","minimum":-1.0,"title":"Max Periods","default":1}},"type":"object","required":["service_number"],"title":"Body_LISA RPUs-create_rpu"},"Body_LISA_RPUs-sync_rpu":{"properties":{"rpu_id":{"type":"string","format":"uuid","title":"Rpu Id"},"credential_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Credential Id"},"max_periods":{"type":"integer","minimum":-1.0,"title":"Max Periods","default":1}},"type":"object","required":["rpu_id"],"title":"Body_LISA RPUs-sync_rpu"},"Body_companies-get_companies_names":{"properties":{"company_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Company Ids"}},"type":"object","required":["company_ids"],"title":"Body_companies-get_companies_names"},"Body_financing-upload_credit_application_document":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_financing-upload_credit_application_document"},"Body_generation_reports-send_generation_report_email_endpoint":{"properties":{"report_id":{"type":"string","format":"uuid","title":"Report Id"},"report_name":{"type":"string","title":"Report Name"},"interactive_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interactive Url"},"temporal_config":{"anyOf":[{"$ref":"#/components/schemas/AftersalesEmailConfig"},{"type":"null"}]}},"type":"object","required":["report_id","report_name"],"title":"Body_generation reports-send_generation_report_email_endpoint"},"Body_historical_electric-bills-upload_document":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"}},"type":"object","required":["files"],"title":"Body_historical electric-bills-upload_document"},"Body_login-login_access_token":{"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-login_access_token"},"Body_monitorings-test_alert_email":{"properties":{"emails_to_notify_list":{"items":{"type":"string","format":"email"},"type":"array","title":"Emails To Notify List"},"automation_type":{"type":"integer","title":"Automation Type"},"is_company_scope":{"type":"boolean","title":"Is Company Scope","default":false},"language":{"type":"string","enum":["es","en"],"title":"Language","default":"es"}},"type":"object","required":["emails_to_notify_list","automation_type"],"title":"Body_monitorings-test_alert_email"},"Body_projects-bulk_create_projects_no_files":{"properties":{"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"project_names":{"items":{"type":"string"},"type":"array","title":"Project Names"}},"type":"object","required":["contact_id","project_names"],"title":"Body_projects-bulk_create_projects_no_files"},"Body_projects-bulk_create_projects_with_files":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"pre_group_files":{"type":"boolean","title":"Pre Group Files","default":true},"background_project_stop":{"$ref":"#/components/schemas/BACKGROUND_PROJECT_STOP","default":-1},"project_names_map":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Names Map"}},"type":"object","required":["files","contact_id"],"title":"Body_projects-bulk_create_projects_with_files"},"Body_projects-create_energies_without_consumptions":{"properties":{"zip_code":{"type":"string","title":"Zip Code"}},"type":"object","title":"Body_projects-create_energies_without_consumptions"},"Body_projects-create_project_without_consumption":{"properties":{"contact_id":{"type":"string","title":"Contact Id"},"project_name":{"type":"string","title":"Project Name"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"service_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Number"}},"type":"object","required":["contact_id","project_name"],"title":"Body_projects-create_project_without_consumption"},"Body_projects-create_projects_with_lisa":{"properties":{"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"project_names_map":{"items":{"$ref":"#/components/schemas/CFEUserRPU"},"type":"array","title":"Project Names Map"},"credential_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Credential Id"},"background_project_stop":{"$ref":"#/components/schemas/BACKGROUND_PROJECT_STOP","default":-1},"max_periods":{"type":"integer","maximum":12.0,"minimum":1.0,"title":"Max Periods","default":1}},"type":"object","required":["contact_id","project_names_map"],"title":"Body_projects-create_projects_with_lisa"},"Body_projects-fill_project_from_lisa":{"properties":{"service_number":{"type":"string","pattern":"^\\d{12}$","title":"Service Number"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"credential_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Credential Id"},"background_project_stop":{"$ref":"#/components/schemas/BACKGROUND_PROJECT_STOP","default":-1},"max_periods":{"type":"integer","maximum":12.0,"minimum":1.0,"title":"Max Periods","default":1}},"type":"object","required":["service_number","project_id"],"title":"Body_projects-fill_project_from_lisa"},"Body_projects-get_service_number_from_files":{"properties":{"file":{"items":{"type":"string","format":"binary"},"type":"array","title":"File"}},"type":"object","required":["file"],"title":"Body_projects-get_service_number_from_files"},"Body_projects-group_files":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"},"pre_group_files":{"type":"boolean","title":"Pre Group Files","default":true}},"type":"object","required":["files"],"title":"Body_projects-group_files"},"Body_reports-create_report":{"properties":{"history_id":{"type":"string","title":"History Id"},"report_name":{"type":"string","title":"Report Name"},"project_id":{"type":"string","format":"uuid","title":"Project Id"}},"type":"object","required":["history_id","report_name","project_id"],"title":"Body_reports-create_report"},"Body_reports-send_report_email":{"properties":{"temporal_config":{"anyOf":[{"$ref":"#/components/schemas/AftersalesEmailConfig"},{"type":"null"}]}},"type":"object","title":"Body_reports-send_report_email"},"Body_wise-ingest_documents":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","default":"México"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"infer_address":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Infer Address"}},"type":"object","required":["files"],"title":"Body_wise-ingest_documents"},"Body_wise-upload_documents":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"},"overwrite":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Overwrite"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","default":"México"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"infer_address":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Infer Address"}},"type":"object","required":["files"],"title":"Body_wise-upload_documents"},"BotyDocumentType":{"type":"integer","enum":[-1,0,1,2],"title":"BotyDocumentType"},"BotyProject":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"lisa_project":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lisa Project"}},"type":"object","required":["id","name","lisa_project"],"title":"BotyProject"},"BotyQueuedLisaProject":{"properties":{"name":{"type":"string","title":"Name"},"service_number":{"type":"string","title":"Service Number"},"files":{"items":{"$ref":"#/components/schemas/QueuedProjectDocument"},"type":"array","title":"Files"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"company_id":{"type":"string","format":"uuid","title":"Company Id"},"contact_id":{"type":"string","format":"uuid","title":"Contact Id"},"rpu_id":{"type":"string","format":"uuid","title":"Rpu Id"},"task_id":{"type":"string","format":"uuid","title":"Task Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"background_project_stop":{"$ref":"#/components/schemas/BACKGROUND_PROJECT_STOP","default":0}},"type":"object","required":["name","service_number","files","project_id","company_id","contact_id","rpu_id","task_id","user_id"],"title":"BotyQueuedLisaProject"},"BranchOfficeSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"BranchOfficeSchema"},"CFEUserRPU":{"properties":{"service_number":{"type":"string","pattern":"^\\d{12}$","title":"Service Number"},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Name"}},"type":"object","required":["service_number"],"title":"CFEUserRPU"},"CecRateInfo":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"rate_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate Type"},"limit_dac":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit Dac"},"monthly_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Monthly Limit"},"certified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Certified"},"form_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Form Type"},"payment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Type"}},"additionalProperties":true,"type":"object","title":"CecRateInfo"},"ComercialOffer":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"proposal":{"type":"string","title":"Proposal"},"total":{"type":"number","title":"Total"},"currency":{"type":"string","title":"Currency"},"cost":{"type":"number","title":"Cost"},"total_without_taxes":{"type":"number","title":"Total Without Taxes"},"taxes":{"type":"number","title":"Taxes"},"profit":{"type":"number","title":"Profit"},"profit_percentage":{"type":"number","title":"Profit Percentage"},"original_consumption":{"type":"number","title":"Original Consumption"},"system_generation":{"type":"number","title":"System Generation"},"saving_percentage":{"type":"number","title":"Saving Percentage"},"system_size":{"type":"number","title":"System Size"},"annual_saving":{"type":"number","title":"Annual Saving"},"return_of_investment":{"type":"number","title":"Return Of Investment"},"interactive_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interactive Link"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"has_financing":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Financing","default":false},"proposal_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proposal Status"},"proposal_status_display":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proposal Status Display"},"taxes_offer":{"anyOf":[{"items":{"$ref":"#/components/schemas/TaxOffer"},"type":"array"},{"type":"null"}],"title":"Taxes Offer","default":[]},"panels":{"anyOf":[{"items":{"$ref":"#/components/schemas/Panel"},"type":"array"},{"type":"null"}],"title":"Panels","default":[]},"inverters":{"anyOf":[{"items":{"$ref":"#/components/schemas/Inverter"},"type":"array"},{"type":"null"}],"title":"Inverters","default":[]},"accessories":{"anyOf":[{"items":{"$ref":"#/components/schemas/Accessory"},"type":"array"},{"type":"null"}],"title":"Accessories","default":[]},"structures":{"anyOf":[{"items":{"$ref":"#/components/schemas/Structure"},"type":"array"},{"type":"null"}],"title":"Structures","default":[]},"workforces":{"anyOf":[{"items":{"$ref":"#/components/schemas/Workforce"},"type":"array"},{"type":"null"}],"title":"Workforces","default":[]},"additional":{"anyOf":[{"items":{"$ref":"#/components/schemas/Additional"},"type":"array"},{"type":"null"}],"title":"Additional","default":[]},"batteries":{"anyOf":[{"items":{"$ref":"#/components/schemas/Battery"},"type":"array"},{"type":"null"}],"title":"Batteries","default":[]}},"type":"object","required":["proposal","total","currency","cost","total_without_taxes","taxes","profit","profit_percentage","original_consumption","system_generation","saving_percentage","system_size","annual_saving","return_of_investment","interactive_link"],"title":"ComercialOffer"},"ComercialOfferRetrieve":{"properties":{"contact":{"$ref":"#/components/schemas/ContactZapierProjectRetrieve"},"commercial_offer":{"$ref":"#/components/schemas/ComercialOffer"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Name"}},"type":"object","required":["contact","commercial_offer"],"title":"ComercialOfferRetrieve"},"ComercialOfferRetrieveList":{"properties":{"contact":{"$ref":"#/components/schemas/ContactZapierProjectRetrieve"},"commercial_offers":{"items":{"$ref":"#/components/schemas/ComercialOfferWrapper"},"type":"array","title":"Commercial Offers"}},"type":"object","required":["contact","commercial_offers"],"title":"ComercialOfferRetrieveList"},"ComercialOfferWrapper":{"properties":{"commercial_offer":{"$ref":"#/components/schemas/ComercialOffer"}},"type":"object","required":["commercial_offer"],"title":"ComercialOfferWrapper"},"CommercialOfferDetailResponse":{"properties":{"proposal":{"$ref":"#/components/schemas/ProposalResponse"},"project":{"$ref":"#/components/schemas/ProjectResponse"},"contact":{"$ref":"#/components/schemas/ContactResponse"},"agent":{"$ref":"#/components/schemas/AgentResponse"}},"type":"object","required":["proposal","project","contact","agent"],"title":"CommercialOfferDetailResponse"},"CompanyData":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"CompanyData"},"ComplementsOfferDetails":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyRef"},{"type":"null"}]},"type_change":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Type Change"},"discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Discount"},"custom_offer_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Offer Template"},"external_custom_template_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"External Custom Template Id"},"proposal_plan":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Proposal Plan"},"price_watt":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Watt"},"price_watt_local":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Watt Local"},"local_currency":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Local Currency"},"total_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Price"},"total_price_iva":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Price Iva"},"storage_price_per_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Storage Price Per Kwh"},"storage_price_gross_per_kwh":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Storage Price Gross Per Kwh"},"prices_per_product":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Prices Per Product"},"inverters_ac_power":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Inverters Ac Power"},"degradation_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Degradation Percentage"},"generation_delay":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Generation Delay"},"zero_export":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Zero Export"},"annual_saving_percentage":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Annual Saving Percentage"},"supplier_annual_saving":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Supplier Annual Saving"},"npv":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Npv"},"irr":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Irr"},"costing_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Costing Type"},"watt_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Watt Cost"},"watt_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Watt Price"},"watt_margin":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Watt Margin"},"kwh_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Kwh Cost"},"kwh_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Kwh Price"},"kwh_margin":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Kwh Margin"},"watt_total_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Watt Total Amount"},"kwh_total_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Kwh Total Amount"},"type_discount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Type Discount"},"overall_discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall Discount"},"overall_discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall Discount Amount"},"costing_ranges":{"anyOf":[{"$ref":"#/components/schemas/CostingRangesInfo"},{"type":"null"}]},"increment_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Increment Amount"},"lcoe_without_solar":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lcoe Without Solar"},"capacity_savings_perc":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Capacity Savings Perc"},"max_demand":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Demand"},"pml_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pml Active"},"pml_annual_price_increase":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pml Annual Price Increase"},"forecast_method":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Forecast Method"},"mbp_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mbp Active"}},"additionalProperties":true,"type":"object","title":"ComplementsOfferDetails"},"ConsumptionLineItem":{"properties":{"initial_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initial Date"},"final_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Final Date"},"predicted":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Predicted"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"url_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Url Type"},"consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Consumption"},"info_price_consumtion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Info Price Consumtion"},"power_factor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Power Factor"},"total_cost_kwh":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost Kwh"},"type_line":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Type Line"}},"additionalProperties":true,"type":"object","title":"ConsumptionLineItem"},"ConsumptionProfileItem":{"properties":{"consumption_profile":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Consumption Profile"},"consumption":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Consumption"},"demand":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Demand"},"year":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Year"}},"additionalProperties":true,"type":"object","title":"ConsumptionProfileItem"},"ConsumptionsCsvRef":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File"},"type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Type"},"origin":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Origin"}},"additionalProperties":true,"type":"object","title":"ConsumptionsCsvRef","description":"Uploaded consumptions CSV (`ProjectConsumptionsCSVSerializer`)."},"ContactData":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"first_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Lastname"},"second_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Second Lastname"},"full_name":{"type":"string","title":"Full Name"},"agent":{"anyOf":[{"$ref":"#/components/schemas/UserData"},{"type":"null"}]}},"type":"object","required":["id","name","full_name"],"title":"ContactData"},"ContactDocumentResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"document_type":{"type":"integer","title":"Document Type"},"name":{"type":"string","title":"Name"},"file":{"type":"string","title":"File"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"value_user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value User"},"contact":{"$ref":"#/components/schemas/ContactZapierList"},"type_document":{"$ref":"#/components/schemas/ContactDocumentTypeSchema"}},"type":"object","required":["id","document_type","name","file","created_at","updated_at","contact","type_document"],"title":"ContactDocumentResponse"},"ContactDocumentTypeSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"value":{"type":"string","title":"Value"},"type":{"type":"integer","title":"Type"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"primary_color":{"type":"string","title":"Primary Color"},"is_active":{"type":"boolean","title":"Is Active"},"order":{"type":"integer","title":"Order"},"company":{"type":"string","format":"uuid","title":"Company"}},"type":"object","required":["id","name","value","type","created_at","updated_at","primary_color","is_active","order","company"],"title":"ContactDocumentTypeSchema"},"ContactOriginSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"ContactOriginSchema"},"ContactPageAgent":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"additionalProperties":true,"type":"object","title":"ContactPageAgent"},"ContactPageEmail":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"email_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Type"}},"additionalProperties":true,"type":"object","title":"ContactPageEmail"},"ContactPageItem":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"first_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Lastname"},"second_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Second Lastname"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"status_flag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Flag"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"agent":{"anyOf":[{"$ref":"#/components/schemas/ContactPageAgent"},{"type":"null"}]},"branch_office":{"anyOf":[{"$ref":"#/components/schemas/NamedRef"},{"type":"null"}]},"status_contact":{"anyOf":[{"$ref":"#/components/schemas/NamedRef"},{"type":"null"}]},"contact_origin":{"anyOf":[{"$ref":"#/components/schemas/NamedRef"},{"type":"null"}]},"emails":{"anyOf":[{"items":{"$ref":"#/components/schemas/ContactPageEmail"},"type":"array"},{"type":"null"}],"title":"Emails"},"telephones":{"anyOf":[{"items":{"$ref":"#/components/schemas/ContactPageTelephone"},"type":"array"},{"type":"null"}],"title":"Telephones"},"contacts_trackings":{"anyOf":[{"items":{"$ref":"#/components/schemas/ContactPageTracking"},"type":"array"},{"type":"null"}],"title":"Contacts Trackings"}},"additionalProperties":true,"type":"object","title":"ContactPageItem"},"ContactPageTelephone":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"telephone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Telephone"},"phone_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Key"}},"additionalProperties":true,"type":"object","title":"ContactPageTelephone"},"ContactPageTracking":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tracking_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tracking Type"},"tracking_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tracking Date"},"notification_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notification At"},"remember":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Remember"},"completed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Completed"}},"additionalProperties":true,"type":"object","title":"ContactPageTracking"},"ContactProjectSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"status_flag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Flag"},"comercial_offer":{"anyOf":[{"$ref":"#/components/schemas/FavoriteComercialOffer"},{"type":"null"}]}},"type":"object","required":["id","name"],"title":"ContactProjectSchema"},"ContactProjectsResponse":{"properties":{"contact":{"$ref":"#/components/schemas/ContactData"},"projects":{"items":{"$ref":"#/components/schemas/ContactProjectSchema"},"type":"array","title":"Projects"}},"type":"object","required":["contact","projects"],"title":"ContactProjectsResponse"},"ContactResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"first_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Lastname"},"second_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Second Lastname"}},"type":"object","required":["id"],"title":"ContactResponse"},"ContactStatusSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"ContactStatusSchema"},"ContactTrackingCommentResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"comment":{"type":"string","title":"Comment"},"contact_tracking":{"type":"string","format":"uuid","title":"Contact Tracking"},"created_by":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Created By"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"deleted":{"type":"boolean","title":"Deleted","default":false}},"type":"object","required":["id","comment","contact_tracking"],"title":"ContactTrackingCommentResponse"},"ContactTrackingResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tracking_type":{"type":"integer","title":"Tracking Type"},"objective_tracking":{"type":"integer","title":"Objective Tracking"},"description":{"type":"string","title":"Description"},"remember":{"type":"boolean","title":"Remember"},"completed":{"type":"boolean","title":"Completed"},"notification_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notification At"},"tracking_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tracking Date"},"contact":{"type":"string","format":"uuid","title":"Contact"},"agent":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Agent"},"project":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project"},"tracking_purpose":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tracking Purpose"},"assigned_to":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Assigned To","default":[]}},"type":"object","required":["id","tracking_type","objective_tracking","description","remember","completed","contact"],"title":"ContactTrackingResponse"},"ContactTrackingSummary":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"tracking_type":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Tracking Type"},"tracking_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tracking Date"},"notification_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notification At"},"remember":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Remember"},"completed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Completed"}},"type":"object","title":"ContactTrackingSummary","description":"Tracking summary as boty's sunwise adapter builds it\n(`SunwiseClientRequest.get_contact_trackings`)."},"ContactTrackingWithCommentsResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tracking_type":{"type":"integer","title":"Tracking Type"},"objective_tracking":{"type":"integer","title":"Objective Tracking"},"description":{"type":"string","title":"Description"},"remember":{"type":"boolean","title":"Remember"},"completed":{"type":"boolean","title":"Completed"},"notification_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notification At"},"tracking_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tracking Date"},"contact":{"type":"string","format":"uuid","title":"Contact"},"agent":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Agent"},"project":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project"},"tracking_purpose":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tracking Purpose"},"assigned_to":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Assigned To","default":[]},"comments":{"items":{"$ref":"#/components/schemas/ContactTrackingCommentResponse"},"type":"array","title":"Comments","default":[]}},"type":"object","required":["id","tracking_type","objective_tracking","description","remember","completed","contact"],"title":"ContactTrackingWithCommentsResponse","description":"Extended tracking response used when reading from the boty DB.\nIncludes non-deleted comments loaded from the local replica.\n`assigned_to` is always empty here — that data lives only in Sunwise."},"ContactZapierCreationPayload":{"properties":{"name":{"type":"string","title":"Name"},"first_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Lastname","default":""},"second_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Second Lastname","default":""},"integration_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Integration Source","default":""},"emails":{"$ref":"#/components/schemas/EmailPayload"},"telephones":{"$ref":"#/components/schemas/TelephonePayload"},"status_flag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Flag","default":"active"},"agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent","default":""},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","default":""},"contact_origin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Origin"},"status_contact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Contact"}},"type":"object","required":["name","emails","telephones"],"title":"ContactZapierCreationPayload"},"ContactZapierCreationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status_contact":{"anyOf":[{"$ref":"#/components/schemas/ContactStatusSchema"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"status_flag":{"type":"string","title":"Status Flag"},"name":{"type":"string","title":"Name"},"first_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Lastname"},"second_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Second Lastname"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"agent":{"$ref":"#/components/schemas/AgentSchema"},"branch_office":{"$ref":"#/components/schemas/BranchOfficeSchema"},"contact_origin":{"anyOf":[{"$ref":"#/components/schemas/ContactOriginSchema"},{"type":"null"}]},"emails":{"items":{"$ref":"#/components/schemas/EmailSchema"},"type":"array","title":"Emails"},"telephones":{"items":{"$ref":"#/components/schemas/TelephoneSchema"},"type":"array","title":"Telephones"},"contacts_trackings":{"items":{"$ref":"#/components/schemas/ContactTrackingSummary"},"type":"array","title":"Contacts Trackings","default":[]}},"type":"object","required":["id","status_flag","name","agent","branch_office","emails","telephones"],"title":"ContactZapierCreationResponse"},"ContactZapierList":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender","default":""},"first_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Lastname","default":""},"second_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Second Lastname","default":""},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","default":""},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","default":""},"telephone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Telephone","default":""},"branch_office_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Office Name","default":""},"status_flag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Flag","default":"active"}},"type":"object","required":["id","name"],"title":"ContactZapierList"},"ContactZapierProjectRetrieve":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender","default":"MAL"},"first_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Lastname"},"second_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Second Lastname"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"telephone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Telephone"},"branch_office_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Office Name"},"status_flag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Flag"}},"type":"object","required":["id","name"],"title":"ContactZapierProjectRetrieve"},"ContactsPageResponse":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/ContactPageItem"},"type":"array"},{"type":"null"}],"title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/FunnelPagination"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"ContactsPageResponse"},"CostingRangesInfo":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"cost_ranges_kw":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Cost Ranges Kw"},"cost_ranges_watt":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Cost Ranges Watt"}},"additionalProperties":true,"type":"object","title":"CostingRangesInfo","description":"Costing plan ranges (`PlanRangeShorSerializer` upstream)."},"CostingTypeUpdate":{"properties":{"costing_type":{"anyOf":[{"type":"string","enum":["by_product","by_watt"]},{"type":"null"}],"title":"Costing Type"},"watt_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Watt Cost"},"watt_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Watt Price"},"watt_margin":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Watt Margin"},"kwh_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Kwh Cost"},"kwh_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Kwh Price"},"kwh_margin":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Kwh Margin"},"watt_total_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Watt Total Amount"},"kwh_total_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Kwh Total Amount"}},"type":"object","title":"CostingTypeUpdate","description":"Mirror of CostingTypeSerializer (all optional)."},"CreateContactTrackingCommentPayload":{"properties":{"contact_tracking":{"type":"string","format":"uuid","title":"Contact Tracking"},"comment":{"type":"string","maxLength":1000,"title":"Comment"}},"type":"object","required":["contact_tracking","comment"],"title":"CreateContactTrackingCommentPayload"},"CreateContactTrackingPayload":{"properties":{"contact":{"type":"string","format":"uuid","title":"Contact"},"description":{"type":"string","title":"Description"},"tracking_type":{"type":"integer","title":"Tracking Type","default":0},"objective_tracking":{"type":"integer","title":"Objective Tracking","default":0},"notification_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notification At"},"remember":{"type":"boolean","title":"Remember","default":false},"tracking_purpose":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tracking Purpose"},"project":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project"},"agent":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Agent"},"assigned_to":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Assigned To"}},"type":"object","required":["contact","description"],"title":"CreateContactTrackingPayload"},"CreateFinancingRequest":{"properties":{"financier_id":{"type":"string","format":"uuid","title":"Financier Id"},"financier_product_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Financier Product Id"},"term":{"type":"integer","title":"Term"}},"type":"object","required":["financier_id","term"],"title":"CreateFinancingRequest"},"CreditApplicationDocument":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status"},"status_catalog":{"title":"Status Catalog"},"required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Required"},"file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File"}},"additionalProperties":true,"type":"object","required":["id"],"title":"CreditApplicationDocument"},"CreditApplicationDocumentsResponse":{"properties":{"success":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Success"},"data":{"items":{"$ref":"#/components/schemas/CreditApplicationDocument"},"type":"array","title":"Data","default":[]}},"additionalProperties":true,"type":"object","title":"CreditApplicationDocumentsResponse"},"CreditItemParameters":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"product_financial_plan":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Financial Plan"},"parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Parameters"},"infonavit_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"string"},{"type":"null"}],"title":"Infonavit Data"},"json_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"string"},{"type":"null"}],"title":"Json Values"},"errors":{"anyOf":[{"additionalProperties":true,"type":"object"},{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"items":{"type":"string"},"type":"array"},{"type":"string"},{"type":"null"}],"title":"Errors"},"is_editing":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Editing"},"monthly_payment":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Payment"},"first_payment":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"First Payment"},"total_cost_financing":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost Financing"},"financier_product":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Financier Product"}},"additionalProperties":true,"type":"object","title":"CreditItemParameters","description":"Applied financing data (`CreditItemSerializer` upstream)."},"CreditItemRef":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"type_algorithm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type Algorithm"},"credit_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credit Type"},"infonavit_data":{"title":"Infonavit Data"},"json_values":{"title":"Json Values"},"external_financing_file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Financing File"},"credit_type_display":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Credit Type Display","description":"Human-readable name for `credit_type`.\n\nDerived rather than stored so it cannot drift from the code.\nUnmapped codes fall back to \"Unknown (<code>)\" — the upstream\nfield has no fixed choices, so new financier types can appear\nwithout a change here.","readOnly":true}},"additionalProperties":true,"type":"object","required":["credit_type_display"],"title":"CreditItemRef"},"CreditSimulationFinancing":{"properties":{"term":{"type":"integer","title":"Term"},"hitch":{"type":"number","title":"Hitch","default":0},"hitch_percentage":{"type":"number","title":"Hitch Percentage","default":0},"is_percentage":{"type":"boolean","title":"Is Percentage","default":true},"product_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Product Ids","default":[]},"commission_credit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Commission Credit"},"bess_external_commission_rate":{"type":"number","title":"Bess External Commission Rate","default":0},"bess_internal_commission_rate":{"type":"number","title":"Bess Internal Commission Rate","default":0},"pv_external_commission_rate":{"type":"number","title":"Pv External Commission Rate","default":0},"pv_internal_commission_rate":{"type":"number","title":"Pv Internal Commission Rate","default":0}},"type":"object","required":["term"],"title":"CreditSimulationFinancing","description":"Financing block of sunpay's credit-simulation payload."},"CreditSimulationRequest":{"properties":{"proposal_id":{"type":"string","format":"uuid","title":"Proposal Id"},"financier_id":{"type":"string","format":"uuid","title":"Financier Id"},"financier_product_id":{"type":"string","format":"uuid","title":"Financier Product Id"},"financing":{"$ref":"#/components/schemas/CreditSimulationFinancing"},"financing_mode":{"type":"string","enum":["simulate","apply","web_quoter"],"title":"Financing Mode","default":"simulate"}},"type":"object","required":["proposal_id","financier_id","financier_product_id","financing"],"title":"CreditSimulationRequest","description":"Body of POST /api/v1/sunpay/credit-simulation/ (mirrors upstream).\n\n`simulate` quotes without touching the proposal; `apply` applies the\nfinancing to it; `web_quoter` is the public quoter flow."},"CurrencyRef":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"abbreviation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Abbreviation"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"symbol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Symbol"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"}},"additionalProperties":true,"type":"object","title":"CurrencyRef"},"CustomerEnergyConsumptionData":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"spain_meter_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Spain Meter Type"},"gdmth_summary":{"anyOf":[{"items":{"$ref":"#/components/schemas/GdmthSummaryItem"},"type":"array"},{"type":"null"}],"title":"Gdmth Summary"},"lines_consumption_energies":{"anyOf":[{"items":{"$ref":"#/components/schemas/ConsumptionLineItem"},"type":"array"},{"type":"null"}],"title":"Lines Consumption Energies"},"consumption_profile":{"anyOf":[{"items":{"$ref":"#/components/schemas/ConsumptionProfileItem"},"type":"array"},{"type":"null"}],"title":"Consumption Profile"},"political_division1":{"anyOf":[{"$ref":"#/components/schemas/NamedRef"},{"type":"null"}]},"political_division2":{"anyOf":[{"$ref":"#/components/schemas/NamedRef"},{"type":"null"}]},"rate_division":{"anyOf":[{"$ref":"#/components/schemas/NamedRef"},{"type":"null"}]},"rate_division_summer":{"anyOf":[{"$ref":"#/components/schemas/NamedRef"},{"type":"null"}]},"rate":{"anyOf":[{"$ref":"#/components/schemas/CecRateInfo"},{"type":"null"}]},"subsidy_rate":{"anyOf":[{"$ref":"#/components/schemas/CecRateInfo"},{"type":"null"}]},"contrated_demand":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Contrated Demand"},"service_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Number"},"from_pdf":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"From Pdf"},"without_consumption":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Without Consumption"},"is_bimonthly":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Bimonthly"},"status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status"},"holder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Holder"},"receipt_origin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Origin"},"periodicity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Periodicity Type"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"consumption_origin":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Consumption Origin"},"has_commercial_offer_ended":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Commercial Offer Ended"},"tiers_consumptions":{"anyOf":[{"items":{"$ref":"#/components/schemas/TierPeriod"},"type":"array"},{"type":"null"}],"title":"Tiers Consumptions"},"default_certified_rate_scheme_compensation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Certified Rate Scheme Compensation"},"consumptions_csv":{"anyOf":[{"$ref":"#/components/schemas/ConsumptionsCsvRef"},{"type":"null"}]},"default_custom_rate_scheme_compensation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Custom Rate Scheme Compensation"},"has_low_tension_concept":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Low Tension Concept"}},"additionalProperties":true,"type":"object","title":"CustomerEnergyConsumptionData"},"CustomerEnergyConsumptionResponse":{"properties":{"success":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Success"},"data":{"anyOf":[{"$ref":"#/components/schemas/CustomerEnergyConsumptionData"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"CustomerEnergyConsumptionResponse"},"DashboardAgent":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"first_lastname":{"type":"string","title":"First Lastname"},"second_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Second Lastname"}},"type":"object","required":["id","name","first_lastname"],"title":"DashboardAgent"},"DashboardContact":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"first_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Lastname"},"second_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Second Lastname"},"agent":{"anyOf":[{"$ref":"#/components/schemas/DashboardAgent"},{"type":"null"}]}},"type":"object","required":["id","name"],"title":"DashboardContact"},"DashboardListData":{"properties":{"contacts":{"items":{"$ref":"#/components/schemas/DashboardContact"},"type":"array","title":"Contacts"},"agents":{"items":{"$ref":"#/components/schemas/DashboardAgent"},"type":"array","title":"Agents"},"projects":{"items":{"$ref":"#/components/schemas/DashboardProject"},"type":"array","title":"Projects"},"project_status":{"items":{"$ref":"#/components/schemas/DashboardProjectStatus"},"type":"array","title":"Project Status"}},"type":"object","required":["contacts","agents","projects","project_status"],"title":"DashboardListData"},"DashboardProject":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"contact":{"$ref":"#/components/schemas/DashboardProjectContact"},"status_project":{"$ref":"#/components/schemas/DashboardProjectStatus"},"rate":{"anyOf":[{"$ref":"#/components/schemas/DashboardRate"},{"type":"null"}]}},"type":"object","required":["id","name","contact","status_project"],"title":"DashboardProject"},"DashboardProjectContact":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"DashboardProjectContact"},"DashboardProjectStatus":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"primary_color":{"type":"string","title":"Primary Color"}},"type":"object","required":["id","name","primary_color"],"title":"DashboardProjectStatus"},"DashboardRate":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"form_type":{"type":"string","title":"Form Type"},"certified":{"type":"boolean","title":"Certified"},"payment_type":{"type":"string","title":"Payment Type"}},"type":"object","required":["id","name","form_type","certified","payment_type"],"title":"DashboardRate"},"EmailPayload":{"properties":{"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email","default":""}},"type":"object","title":"EmailPayload"},"EmailSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"email_type":{"type":"string","title":"Email Type"}},"type":"object","required":["id","email","email_type"],"title":"EmailSchema"},"FavoriteComercialOffer":{"properties":{"proposal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proposal"},"total":{"type":"number","title":"Total","default":0.0},"currency":{"type":"string","title":"Currency","default":"MXN"},"system_size":{"type":"number","title":"System Size","default":0.0},"annual_saving":{"type":"number","title":"Annual Saving","default":0.0},"interactive_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interactive Link"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"has_financing":{"type":"boolean","title":"Has Financing","default":false}},"type":"object","title":"FavoriteComercialOffer","description":"Lightweight summary of a project's favorite commercial offer.\n\nPopulated from the main Sunwise backend (apihub), because the financial\nfigures plus ``interactive_link`` (Sunpal) and ``has_financing`` (Sunpay)\nare not available in Boty's local replica."},"FavoriteCommercialOfferResponse":{"properties":{"commercial_offer":{"anyOf":[{"$ref":"#/components/schemas/BasicCommercialOfferParent"},{"type":"null"}]}},"type":"object","required":["commercial_offer"],"title":"FavoriteCommercialOfferResponse"},"FinancierInstallerRef":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"financier":{"anyOf":[{"$ref":"#/components/schemas/FinancierRef"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"FinancierInstallerRef","description":"Financier-installer link (`FinancierInstallerSerializer`)."},"FinancierProductAlertSchema":{"properties":{"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"is_mandatory":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Mandatory"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"condition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition"},"is_informative":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Informative"},"is_restrictive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Restrictive"},"requires_validation":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Requires Validation"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"value_100":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value 100"},"value_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Type"},"sim_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sim Time"},"sim_unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sim Unit"},"applicable_products":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Applicable Products"}},"type":"object","title":"FinancierProductAlertSchema"},"FinancierProductParametersSchema":{"properties":{"annual_increase":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Annual Increase"},"commission_credit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Commission Credit"},"dealer_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dealer Fee"},"hitch":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hitch"},"is_commission_percentage":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Commission Percentage"},"is_percentage":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Percentage"},"rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rate"},"residual":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Residual"},"terms":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms"}},"type":"object","title":"FinancierProductParametersSchema"},"FinancierProductSchema":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"types_business_company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Types Business Company"},"list_configs":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"List Configs"},"commision_configs":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Commision Configs"},"type_algorithm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type Algorithm"},"alerts":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/FinancierProductAlertSchema"},"type":"object"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Alerts"},"errors":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Errors"},"total":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total"},"is_selectable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Selectable"},"parameters":{"anyOf":[{"$ref":"#/components/schemas/FinancierProductParametersSchema"},{"type":"null"}]}},"type":"object","title":"FinancierProductSchema"},"FinancierRef":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"},"type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Type"}},"additionalProperties":true,"type":"object","title":"FinancierRef","description":"Financier summary (`FinancierSerializer` upstream)."},"FinancierRequirementSchema":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"category":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Category"},"required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Required"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"financier":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Financier"}},"type":"object","title":"FinancierRequirementSchema"},"FinancierSchema":{"properties":{"financier_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Financier Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"},"type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Type"},"has_alliance":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Alliance"},"requirement":{"anyOf":[{"$ref":"#/components/schemas/FinancierRequirementSchema"},{"type":"null"}]},"is_selectable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Selectable"},"financier_products":{"anyOf":[{"items":{"$ref":"#/components/schemas/FinancierProductSchema"},"type":"array"},{"type":"null"}],"title":"Financier Products"}},"type":"object","title":"FinancierSchema"},"FunnelContactRef":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"first_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Lastname"},"second_lastname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Second Lastname"},"branch_office":{"anyOf":[{"$ref":"#/components/schemas/SimpleBranchOffice"},{"type":"null"}]},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"}},"additionalProperties":true,"type":"object","title":"FunnelContactRef"},"FunnelListViewResponse":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/FunnelProjectItem"},"type":"array"},{"type":"null"}],"title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/FunnelPagination"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"FunnelListViewResponse"},"FunnelOfferSummary":{"properties":{"total":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"is_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Archived"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"},"proposal_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Proposal Number"},"kw_system_size":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Kw System Size"},"has_aftersales_configuration":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Aftersales Configuration"}},"additionalProperties":true,"type":"object","title":"FunnelOfferSummary"},"FunnelPagination":{"properties":{"total_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Rows"},"per_page":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Per Page"},"current_page":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Page"},"links":{"anyOf":[{"$ref":"#/components/schemas/FunnelPaginationLinks"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"FunnelPagination"},"FunnelPaginationLinks":{"properties":{"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"last":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last"},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"prev":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prev"}},"additionalProperties":true,"type":"object","title":"FunnelPaginationLinks"},"FunnelProjectItem":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"rate":{"anyOf":[{"$ref":"#/components/schemas/NamedRef"},{"type":"null"}]},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"project_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Project Status"},"status_project":{"anyOf":[{"$ref":"#/components/schemas/FunnelStatusRef"},{"type":"null"}]},"project_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Project Type"},"comercial_offer":{"anyOf":[{"$ref":"#/components/schemas/FunnelOfferSummary"},{"type":"null"}]},"contact":{"anyOf":[{"$ref":"#/components/schemas/FunnelContactRef"},{"type":"null"}]},"agent":{"anyOf":[{"$ref":"#/components/schemas/FunnelUserRef"},{"type":"null"}]},"created_by":{"anyOf":[{"$ref":"#/components/schemas/FunnelUserRef"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"order":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Order"},"service_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Number"},"proposals_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Proposals Count"},"auto_report":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Report"},"has_aftersales":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Aftersales"}},"additionalProperties":true,"type":"object","title":"FunnelProjectItem"},"FunnelStatusRef":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Color"}},"additionalProperties":true,"type":"object","title":"FunnelStatusRef"},"FunnelUserRef":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"profile_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Image"}},"additionalProperties":true,"type":"object","title":"FunnelUserRef"},"GdmthSummaryItem":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"initial_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initial Date"},"base_conpsumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Base Conpsumption"},"base_conpsumption_kw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Base Conpsumption Kw"},"intermediate_consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Intermediate Consumption"},"intermediate_consumption_kw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Intermediate Consumption Kw"},"peak_consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Peak Consumption"},"peak_consumption_kw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Peak Consumption Kw"},"power_factor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Power Factor"}},"additionalProperties":true,"type":"object","title":"GdmthSummaryItem","description":"One GDMTH billing-period summary (`GETGDMTHSummarySerializer`)."},"GetReadsIndicatorsSchema":{"properties":{"global_total_generated":{"type":"number","title":"Global Total Generated","default":0},"global_total_projects":{"type":"number","title":"Global Total Projects","default":0},"last_month_total_generated":{"type":"number","title":"Last Month Total Generated","default":0},"last_month_total_projects":{"type":"number","title":"Last Month Total Projects","default":0},"current_month_total_generated":{"type":"number","title":"Current Month Total Generated","default":0},"current_month_total_projects":{"type":"number","title":"Current Month Total Projects","default":0},"active_projects":{"type":"integer","title":"Active Projects","default":0},"alert_projects":{"type":"integer","title":"Alert Projects","default":0},"inactive_projects":{"type":"integer","title":"Inactive Projects","default":0},"unmonitored_project":{"type":"integer","title":"Unmonitored Project","default":0}},"type":"object","title":"GetReadsIndicatorsSchema"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IncompatibilityReason":{"type":"integer","enum":[0,1,2],"title":"IncompatibilityReason"},"InfoPattern":{"properties":{"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"project_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Project Type"},"node":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node"},"contact":{"anyOf":[{"$ref":"#/components/schemas/InfoPatternContact"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"InfoPattern"},"InfoPatternContact":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"}},"additionalProperties":true,"type":"object","title":"InfoPatternContact"},"Inverter":{"properties":{"discount":{"type":"number","title":"Discount"},"cost":{"type":"number","title":"Cost"},"percentage_discount":{"type":"number","title":"Percentage Discount"},"margin":{"type":"number","title":"Margin"},"unit_price":{"type":"number","title":"Unit Price"},"final_cost":{"type":"number","title":"Final Cost"},"final_cost_without_discount":{"type":"number","title":"Final Cost Without Discount"},"quantity":{"type":"integer","title":"Quantity"},"locked":{"type":"boolean","title":"Locked"},"incompatibility_reason":{"anyOf":[{"$ref":"#/components/schemas/IncompatibilityReason"},{"type":"null"}]},"max_panels":{"type":"integer","title":"Max Panels"},"min_panels":{"type":"integer","title":"Min Panels"},"inverter_branch_office":{"type":"string","title":"Inverter Branch Office"},"inverter_brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inverter Brand"},"watts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Watts"},"oversize":{"type":"integer","title":"Oversize"}},"type":"object","required":["discount","cost","percentage_discount","margin","unit_price","final_cost","final_cost_without_discount","quantity","locked","incompatibility_reason","max_panels","min_panels","inverter_branch_office","oversize"],"title":"Inverter"},"InverterOfferItem":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Discount"},"cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost"},"percentage_discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentage Discount"},"discount_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Discount Type"},"margin":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin"},"unit_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Unit Price"},"final_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Final Cost"},"final_cost_without_discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Final Cost Without Discount"},"quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantity"},"locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Locked"},"is_compatible":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Compatible"},"incompatibility_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Incompatibility Reason"},"max_panels":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Panels"},"min_panels":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Panels"},"inverter_branch_office":{"anyOf":[{"$ref":"#/components/schemas/SimpleBranchOffice"},{"type":"null"}]},"watts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Watts"},"oversize":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Oversize"}},"additionalProperties":true,"type":"object","title":"InverterOfferItem"},"InverterOfferUpdate":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"quantity":{"type":"integer","title":"Quantity"},"locked":{"type":"integer","title":"Locked","default":0},"product_branch_office":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Branch Office"},"discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Discount"},"discount_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Discount Type"},"margin":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin"},"cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost"}},"type":"object","required":["id","quantity"],"title":"InverterOfferUpdate","description":"Mirror of PutInverterOfferSerializer."},"Location":{"properties":{"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"}},"type":"object","required":["country","postal_code","state","city"],"title":"Location"},"LocationRef":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"political_division1":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Political Division1"},"political_division2":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Political Division2"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"}},"additionalProperties":true,"type":"object","title":"LocationRef"},"MappedPlantResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"alias":{"type":"string","maxLength":100,"title":"Alias"},"status":{"$ref":"#/components/schemas/ProjectStatus","default":0},"latitude":{"type":"number","title":"Latitude","default":23.6345},"longitude":{"type":"number","title":"Longitude","default":-102.5528},"address":{"anyOf":[{"type":"string","maxLength":150},{"type":"null"}],"title":"Address","default":""},"sunwise_project_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Sunwise Project Ids","default":[]},"plant_type":{"$ref":"#/components/schemas/PlantType","default":"own"}},"type":"object","required":["id","alias"],"title":"MappedPlantResponse"},"NamedRef":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"additionalProperties":true,"type":"object","title":"NamedRef","description":"Generic `{id, name}` reference used across sunwise payloads."},"NoCFEUserRPU":{"properties":{"service_number":{"type":"string","pattern":"^\\d{12}$","title":"Service Number"}},"type":"object","required":["service_number"],"title":"NoCFEUserRPU"},"OfferDetailsData":{"properties":{"value_consumption":{"anyOf":[{"$ref":"#/components/schemas/ValueConsumption"},{"type":"null"}]},"info_pattern":{"anyOf":[{"$ref":"#/components/schemas/InfoPattern"},{"type":"null"}]},"branch_office":{"anyOf":[{"$ref":"#/components/schemas/SimpleBranchOffice"},{"type":"null"}]},"commercial_offer":{"anyOf":[{"$ref":"#/components/schemas/OfferStatusInfo"},{"type":"null"}]},"location":{"anyOf":[{"$ref":"#/components/schemas/LocationRef"},{"type":"null"}]},"complements_offer":{"anyOf":[{"$ref":"#/components/schemas/ComplementsOfferDetails"},{"type":"null"}]},"sunpay":{"anyOf":[{"$ref":"#/components/schemas/SunpayInfo"},{"type":"null"}]},"credit_application_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credit Application Status"},"is_certified_rate":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Certified Rate"},"has_project_profiles":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Project Profiles"},"is_linked_to_i_project":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Linked To I Project"},"has_smart_documents":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Smart Documents"},"has_approbed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Approbed"},"business_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Type"}},"additionalProperties":true,"type":"object","title":"OfferDetailsData"},"OfferDetailsResponse":{"properties":{"success":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Success"},"data":{"anyOf":[{"$ref":"#/components/schemas/OfferDetailsData"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"OfferDetailsResponse"},"OfferDiscountUpdate":{"properties":{"type_discount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Type Discount"},"overall_discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall Discount"},"overall_discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall Discount Amount"},"increment_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Increment Amount"}},"type":"object","title":"OfferDiscountUpdate","description":"Mirror of DiscountProposalSerializer."},"OfferParentItem":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"branch_office":{"anyOf":[{"$ref":"#/components/schemas/SimpleBranchOffice"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"favorite":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Favorite"},"project":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project"},"commercial_offer":{"anyOf":[{"items":{"$ref":"#/components/schemas/OfferParentProposal"},"type":"array"},{"type":"null"}],"title":"Commercial Offer"}},"additionalProperties":true,"type":"object","title":"OfferParentItem"},"OfferParentProposal":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"total":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total"},"currency":{"anyOf":[{"$ref":"#/components/schemas/CurrencyRef"},{"type":"null"}]},"credit_item":{"anyOf":[{"$ref":"#/components/schemas/CreditItemRef"},{"type":"null"}]},"credit_application_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Credit Application Id"},"credit_application":{"title":"Credit Application"},"smart_documents":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Smart Documents"},"proposal_summary_linked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Proposal Summary Linked"},"status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"is_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Archived"},"status_interactive_proposal":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Interactive Proposal"},"interactive_link_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Interactive Link Active"},"ppa_values":{"anyOf":[{"$ref":"#/components/schemas/PpaValues"},{"type":"null"}]},"system_size":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"System Size"},"legacy":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Legacy"},"read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Read Only"},"invoice_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Invoice Id"},"permalink":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permalink"},"has_permalink":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Permalink"},"has_approbed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Approbed"},"has_signature":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Signature"},"views_counter":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Views Counter"},"has_request_buro":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Request Buro"},"has_credit_close":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Credit Close"},"types_business_company":{"title":"Types Business Company"},"has_financing":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Financing"},"has_financing_request":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Financing Request"},"has_aftersales_configuration":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Aftersales Configuration"}},"additionalProperties":true,"type":"object","title":"OfferParentProposal"},"OfferParentResponse":{"properties":{"success":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Success"},"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/OfferParentItem"},"type":"array"},{"type":"null"}],"title":"Data"}},"additionalProperties":true,"type":"object","title":"OfferParentResponse"},"OfferStatusInfo":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"commercial_offer_parent":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Commercial Offer Parent"},"status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status"},"is_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Archived"},"has_financing":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Financing"},"has_financing_request":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Financing Request"},"read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Read Only"}},"additionalProperties":true,"type":"object","title":"OfferStatusInfo"},"OutputGroupedDocument":{"properties":{"name":{"type":"string","title":"Name"},"service_number":{"type":"string","title":"Service Number"},"files":{"items":{"$ref":"#/components/schemas/ProjectFileInstruction"},"type":"array","title":"Files"}},"type":"object","required":["name","service_number","files"],"title":"OutputGroupedDocument"},"Panel":{"properties":{"discount":{"type":"number","title":"Discount"},"cost":{"type":"number","title":"Cost"},"percentage_discount":{"type":"number","title":"Percentage Discount"},"discount_type":{"type":"integer","title":"Discount Type"},"margin":{"type":"number","title":"Margin"},"unit_price":{"type":"number","title":"Unit Price"},"final_cost":{"type":"number","title":"Final Cost"},"final_cost_without_discount":{"type":"number","title":"Final Cost Without Discount"},"quantity":{"type":"integer","title":"Quantity"},"expansion":{"type":"integer","title":"Expansion"},"panel_branch_office":{"type":"string","title":"Panel Branch Office"},"panel_brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Panel Brand"},"slider_top_value":{"type":"integer","title":"Slider Top Value"},"system_size":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"System Size"},"height":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Height"},"width":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Width"},"watts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Watts"},"quantity_pvd":{"type":"integer","title":"Quantity Pvd"},"system_size_pvd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"System Size Pvd"}},"type":"object","required":["discount","cost","percentage_discount","discount_type","margin","unit_price","final_cost","final_cost_without_discount","quantity","expansion","panel_branch_office","slider_top_value","quantity_pvd"],"title":"Panel"},"PanelOfferItem":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Discount"},"cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost"},"percentage_discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentage Discount"},"discount_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Discount Type"},"margin":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin"},"unit_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Unit Price"},"final_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Final Cost"},"final_cost_without_discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Final Cost Without Discount"},"quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantity"},"expansion":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expansion"},"panel_branch_office":{"anyOf":[{"$ref":"#/components/schemas/SimpleBranchOffice"},{"type":"null"}]},"slider_top_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Slider Top Value"},"system_size":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"System Size"},"height":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Height"},"width":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Width"},"watts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Watts"},"quantity_pvd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantity Pvd"},"system_size_pvd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"System Size Pvd"}},"additionalProperties":true,"type":"object","title":"PanelOfferItem"},"PanelOfferUpdate":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Offer-panel row id (from products-offer)"},"quantity":{"type":"integer","maximum":10000000.0,"title":"Quantity"},"expansion":{"type":"integer","title":"Expansion"},"product_branch_office":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Branch Office","description":"Catalog panel to swap in"},"discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Discount"},"discount_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Discount Type"},"margin":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin"},"cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost"}},"type":"object","required":["id","quantity","expansion"],"title":"PanelOfferUpdate","description":"Mirror of PutPanelOfferSerializer."},"PersonName":{"properties":{"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"}},"type":"object","required":["first_name","last_name"],"title":"PersonName"},"PlantType":{"type":"string","enum":["own","shared_visible","shared_hidden"],"title":"PlantType","description":"Whether a plant is the company's own or a copy shared with it.\n\nMirrors after-sales' ``PlantType`` (SC-98798)."},"PpaValues":{"properties":{"ppa_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ppa Active"},"ppa_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ppa Price"},"ppa_percentage_increase":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ppa Percentage Increase"}},"additionalProperties":true,"type":"object","title":"PpaValues"},"ProductOfferItemBase":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Discount"},"cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost"},"percentage_discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentage Discount"},"discount_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Discount Type"},"margin":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin"},"unit_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Unit Price"},"final_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Final Cost"},"final_cost_without_discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Final Cost Without Discount"},"quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantity"}},"additionalProperties":true,"type":"object","title":"ProductOfferItemBase"},"ProductsOfferData":{"properties":{"panel_offer":{"anyOf":[{"items":{"$ref":"#/components/schemas/PanelOfferItem"},"type":"array"},{"type":"null"}],"title":"Panel Offer"},"inverter_offer":{"anyOf":[{"items":{"$ref":"#/components/schemas/InverterOfferItem"},"type":"array"},{"type":"null"}],"title":"Inverter Offer"},"battery_offer":{"anyOf":[{"items":{"$ref":"#/components/schemas/BatteryOfferItem"},"type":"array"},{"type":"null"}],"title":"Battery Offer"},"accessory_offer":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProductOfferItemBase"},"type":"array"},{"type":"null"}],"title":"Accessory Offer"},"structure_offer":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProductOfferItemBase"},"type":"array"},{"type":"null"}],"title":"Structure Offer"},"workforce_offer":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProductOfferItemBase"},"type":"array"},{"type":"null"}],"title":"Workforce Offer"},"additional_offer":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProductOfferItemBase"},"type":"array"},{"type":"null"}],"title":"Additional Offer"},"taxes_offer":{"anyOf":[{"items":{"$ref":"#/components/schemas/TaxOfferItem"},"type":"array"},{"type":"null"}],"title":"Taxes Offer"}},"additionalProperties":true,"type":"object","title":"ProductsOfferData"},"ProductsOfferResponse":{"properties":{"success":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Success"},"data":{"anyOf":[{"$ref":"#/components/schemas/ProductsOfferData"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"ProductsOfferResponse"},"ProjectFileInstruction":{"properties":{"file_name":{"type":"string","title":"File Name"},"file_type":{"$ref":"#/components/schemas/BotyDocumentType"},"read":{"type":"boolean","title":"Read","default":true}},"type":"object","required":["file_name","file_type"],"title":"ProjectFileInstruction"},"ProjectResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"rate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate"}},"type":"object","required":["id"],"title":"ProjectResponse"},"ProjectStatus":{"type":"integer","enum":[0,1,2],"title":"ProjectStatus","description":"Enum to store the project status\nACTIVE = 0\nALERT = 1\nINACTIVE = 2"},"ProjectStatusFlag":{"type":"string","enum":["active","inactive"],"title":"ProjectStatusFlag","description":"Normalized project status flag exposed by the contact-projects endpoint.\n\nThe underlying ``Project.status_flag`` can be active/archived/blocked, but\nconsumers only care about the active vs. inactive distinction (same rule as\nthe contacts serializer: anything that is not ``active`` is ``inactive``)."},"ProjectSummary":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"contact_id":{"type":"string","title":"Contact Id"},"contact_name":{"type":"string","title":"Contact Name"},"interactive_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interactive Data"},"projects":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Projects"}},"type":"object","required":["id","name","contact_id","contact_name","projects"],"title":"ProjectSummary"},"ProjectZapierSchemaResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"rate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate"},"project_status":{"type":"integer","title":"Project Status"},"status_project":{"type":"string","title":"Status Project"},"location":{"$ref":"#/components/schemas/Location"},"comercial_offer":{"anyOf":[{"$ref":"#/components/schemas/ComercialOffer"},{"type":"null"}]},"contact":{"$ref":"#/components/schemas/ContactZapierProjectRetrieve"},"agent":{"$ref":"#/components/schemas/PersonName"},"created_by":{"$ref":"#/components/schemas/PersonName"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","name","rate","project_status","status_project","location","contact","agent","created_by","created_at"],"title":"ProjectZapierSchemaResponse"},"ProjectsFilter":{"properties":{"contact_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contact Id"},"rate_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Rate Id"},"customize_rate_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Customize Rate Id"},"sunwise_project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Sunwise Project Id"},"political_division1_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Political Division1 Id"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"sw_project_status_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Sw Project Status Id"},"agent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Agent Id"},"provider":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Provider"},"status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status"},"ppa_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ppa Active"}},"type":"object","title":"ProjectsFilter"},"ProposalConfigureRequest":{"properties":{"panel":{"anyOf":[{"$ref":"#/components/schemas/PanelOfferUpdate"},{"type":"null"}]},"inverter":{"anyOf":[{"$ref":"#/components/schemas/InverterOfferUpdate"},{"type":"null"}]},"battery":{"anyOf":[{"$ref":"#/components/schemas/BatteryOfferUpdate"},{"type":"null"}]},"storage":{"anyOf":[{"$ref":"#/components/schemas/StorageOfferV3Update"},{"type":"null"}]},"costing_type":{"anyOf":[{"$ref":"#/components/schemas/CostingTypeUpdate"},{"type":"null"}]},"discount":{"anyOf":[{"$ref":"#/components/schemas/OfferDiscountUpdate"},{"type":"null"}]}},"type":"object","title":"ProposalConfigureRequest","description":"Apply several components to one proposal in a single call.\n\nThis is orchestration, not a transaction. sunwise-backend exposes one\nendpoint per component and each recomputes the whole proposal, so the\nsteps run sequentially here and stop at the first failure. Earlier\nsteps stay applied — there is no upstream rollback to call — so the\nresponse reports exactly which ones landed rather than implying an\natomicity we cannot provide.\n\nOrder is fixed (panel, inverter, storage, costing, discount) because\nthe upstream compatibility manager permutes inverters when the panel\nchanges; applying storage before panels would size the battery\nagainst consumption figures that the panel step then invalidates."},"ProposalConfigureResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"applied":{"items":{"type":"string"},"type":"array","title":"Applied"},"failed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failed"},"steps":{"items":{"$ref":"#/components/schemas/ProposalConfigureStep"},"type":"array","title":"Steps"},"total_seconds":{"type":"number","title":"Total Seconds"},"products_offer":{"anyOf":[{},{"type":"null"}],"title":"Products Offer"}},"type":"object","required":["success","applied","steps","total_seconds"],"title":"ProposalConfigureResponse","description":"Outcome of each step, plus the proposal's final product state."},"ProposalConfigureStep":{"properties":{"component":{"type":"string","title":"Component"},"status":{"type":"string","title":"Status"},"seconds":{"type":"number","title":"Seconds"},"detail":{"anyOf":[{},{"type":"null"}],"title":"Detail"}},"type":"object","required":["component","status","seconds"],"title":"ProposalConfigureStep","description":"One component applied by `configure_proposal`, and how it went.\n\n`seconds` is reported per step because each upstream write triggers a\nfull `ProposalDirector` recompute; it is the measurement that tells us\nwhether a real bulk endpoint upstream is worth building."},"ProposalCreatePayload":{"properties":{"preset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preset"},"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"ProposalCreatePayload"},"ProposalPlanDetailSchema":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status_flag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Flag"},"installation_type":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Installation Type"},"costing_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Costing Type"},"custom_offer_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Offer Template"},"external_custom_template_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"External Custom Template Id"},"branch_office":{"anyOf":[{"$ref":"#/components/schemas/SimpleBranchOffice"},{"type":"null"}]},"validity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Validity"},"saving_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Saving Percentage"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"panel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Panel"},"panel_branch_office":{"anyOf":[{"$ref":"#/components/schemas/SimpleBranchOfficeProduct"},{"type":"null"}]},"inverter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inverter"},"inverter_brand":{"anyOf":[{"$ref":"#/components/schemas/SimpleBrand"},{"type":"null"}]},"structure_branch_office":{"anyOf":[{"$ref":"#/components/schemas/SimpleBranchOfficeProduct"},{"type":"null"}]},"battery_branch_office":{"anyOf":[{"$ref":"#/components/schemas/SimpleBranchOfficeProduct"},{"type":"null"}]},"workforce_and_electric_materials":{"anyOf":[{"items":{"$ref":"#/components/schemas/SimpleBranchOfficeProduct"},"type":"array"},{"type":"null"}],"title":"Workforce And Electric Materials"},"workforce_and_electric_materials_branch_office":{"anyOf":[{"items":{"$ref":"#/components/schemas/SimpleBranchOfficeProduct"},"type":"array"},{"type":"null"}],"title":"Workforce And Electric Materials Branch Office"},"accessories_branch_office":{"anyOf":[{"items":{"$ref":"#/components/schemas/SimpleBranchOfficeProduct"},"type":"array"},{"type":"null"}],"title":"Accessories Branch Office"},"additionals_branch_office":{"anyOf":[{"items":{"$ref":"#/components/schemas/SimpleBranchOfficeProduct"},"type":"array"},{"type":"null"}],"title":"Additionals Branch Office"},"batteries":{"anyOf":[{"items":{"$ref":"#/components/schemas/SimpleBranchOfficeProduct"},"type":"array"},{"type":"null"}],"title":"Batteries"},"structures":{"anyOf":[{"items":{"$ref":"#/components/schemas/SimpleBranchOfficeProduct"},"type":"array"},{"type":"null"}],"title":"Structures"},"considerations":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Considerations"},"start_in_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Start In Months"},"tax_incentive_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Tax Incentive Enabled"},"tax_incentive_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tax Incentive Percentage"},"pre_2018_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pre 2018 Enabled"},"simulation_years":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Simulation Years"},"opex_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Opex Active"},"opex_costing_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Opex Costing Type"},"opex":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Opex"},"opex_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Opex Percentage"},"opex_periodicity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Opex Periodicity"},"desired_power_factor_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Desired Power Factor Enabled"},"desired_power_factor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Desired Power Factor"},"ppa_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ppa Active"},"ppa_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ppa Price"},"guaranteed_gen_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Guaranteed Gen Active"},"guaranteed_gen":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Guaranteed Gen"},"isr_simulation":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Isr Simulation"},"isr_simulation_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Isr Simulation Type"},"isr_offer_elements":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Isr Offer Elements"},"limit_rate_alert":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Limit Rate Alert"},"financial_product_presets":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Financial Product Presets"},"cost_ranges_kwh":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Cost Ranges Kwh"},"cost_ranges_watt":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Cost Ranges Watt"},"opex_cost_ranges_kw":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Opex Cost Ranges Kw"},"opex_cost_ranges_kwh":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Opex Cost Ranges Kwh"}},"type":"object","title":"ProposalPlanDetailSchema"},"ProposalPlanSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"company_id":{"type":"string","format":"uuid","title":"Company Id"},"external_custom_template_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"External Custom Template Id"},"is_deleted":{"type":"boolean","title":"Is Deleted","default":false},"is_active":{"type":"boolean","title":"Is Active","default":true},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","company_id","created_at","updated_at"],"title":"ProposalPlanSchema"},"ProposalResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"company_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Company Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"proposal_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proposal Status"},"proposal_phase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proposal Phase"}},"type":"object","required":["id"],"title":"ProposalResponse"},"ProposalSummary":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"project_id":{"type":"string","title":"Project Id"},"project_name":{"type":"string","title":"Project Name"},"contact_id":{"type":"string","title":"Contact Id"},"contact_name":{"type":"string","title":"Contact Name"},"interactive_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interactive Data"},"linked_proposals":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Linked Proposals"}},"type":"object","required":["id","name","project_id","project_name","contact_id","contact_name","linked_proposals"],"title":"ProposalSummary"},"QueuedProjectDocument":{"properties":{"file_name":{"type":"string","title":"File Name"},"file_type":{"$ref":"#/components/schemas/BotyDocumentType"},"read":{"type":"boolean","title":"Read","default":true},"id":{"type":"string","format":"uuid","title":"Id"},"file_path":{"type":"string","title":"File Path"},"lisa_project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Lisa Project Id"},"mode":{"type":"string","enum":["on-disk","on-memory"],"title":"Mode","default":"on-disk"}},"type":"object","required":["file_name","file_type","id","file_path","lisa_project_id"],"title":"QueuedProjectDocument"},"ReadsResponse":{"properties":{"status":{"type":"integer","title":"Status","default":200},"timestamp":{"items":{"type":"string","format":"date-time"},"type":"array","title":"Timestamp","default":[]},"estimated":{"items":{"type":"integer"},"type":"array","title":"Estimated","default":[]},"missing_values":{"items":{"type":"boolean"},"type":"array","title":"Missing Values","default":[]},"generation":{"items":{"type":"number"},"type":"array","title":"Generation","default":[]},"battery_soh":{"items":{"type":"number"},"type":"array","title":"Battery Soh","default":[]},"battery_soc":{"items":{"type":"number"},"type":"array","title":"Battery Soc","default":[]},"battery_power":{"items":{"type":"number"},"type":"array","title":"Battery Power","default":[]},"total_consumption":{"items":{"type":"number"},"type":"array","title":"Total Consumption","default":[]},"grid_consumption":{"items":{"type":"number"},"type":"array","title":"Grid Consumption","default":[]},"self_consumption":{"items":{"type":"number"},"type":"array","title":"Self Consumption","default":[]}},"type":"object","title":"ReadsResponse"},"ReportWithUrl":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"interactive_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interactive Data"},"project":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Project"}},"type":"object","required":["id","name"],"title":"ReportWithUrl"},"SearchiContactResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"emails":{"items":{"type":"string"},"type":"array","title":"Emails","default":[]},"phones":{"items":{"type":"string"},"type":"array","title":"Phones","default":[]},"company_name":{"type":"string","title":"Company Name","default":""},"status":{"type":"string","title":"Status","default":"active"},"company_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Id"},"branch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Id"},"agent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","name"],"title":"SearchiContactResponse","description":"Schema for Searchi API contact search response."},"SearchiProjectResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"customer_name":{"type":"string","title":"Customer Name","default":""},"contact_name":{"type":"string","title":"Contact Name","default":""},"contact_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contact Id"},"service_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Number"},"status":{"type":"string","title":"Status","default":"active"},"company_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Id"},"branch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Id"},"agent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","name"],"title":"SearchiProjectResponse","description":"Schema for Searchi API project search response."},"SearchiProjectSummaryResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"contact_name":{"type":"string","title":"Contact Name","default":""},"status":{"type":"string","title":"Status","default":"active"},"company_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Id"},"branch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Id"},"agent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","name"],"title":"SearchiProjectSummaryResponse","description":"Schema for Searchi API project summary search response."},"SearchiProposalResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"contact_name":{"type":"string","title":"Contact Name","default":""},"project_name":{"type":"string","title":"Project Name","default":""},"customer_name":{"type":"string","title":"Customer Name","default":""},"service_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Number"},"status":{"type":"string","title":"Status","default":"active"},"company_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Id"},"branch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Id"},"agent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","name"],"title":"SearchiProposalResponse","description":"Schema for Searchi API proposal search response."},"SearchiProposalSummaryResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"contact_name":{"type":"string","title":"Contact Name","default":""},"project_name":{"type":"string","title":"Project Name","default":""},"status":{"type":"string","title":"Status","default":"active"},"company_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Id"},"system_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Id"},"branch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Id"},"agent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","name"],"title":"SearchiProposalSummaryResponse","description":"Schema for Searchi API proposal summary search response."},"SearchiReportResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"contact_name":{"type":"string","title":"Contact Name","default":""},"project_name":{"type":"string","title":"Project Name","default":""},"status":{"type":"string","title":"Status","default":"active"},"company_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Id"},"branch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Id"},"agent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","name"],"title":"SearchiReportResponse","description":"Schema for Searchi API report search response."},"SimpleBranchOffice":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","title":"SimpleBranchOffice"},"SimpleBranchOfficeProduct":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status_flag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Flag"}},"type":"object","title":"SimpleBranchOfficeProduct"},"SimpleBrand":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","title":"SimpleBrand"},"StorageAdvancedStep":{"properties":{"discharge_power":{"type":"number","maximum":1000000.0,"minimum":0.0,"title":"Discharge Power"},"c_rate":{"enum":[0.25,0.5,1,1.5,2],"title":"C Rate"},"dod":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Dod"},"algorithm":{"type":"integer","enum":[0,1],"title":"Algorithm"},"charging_algorithm":{"type":"integer","enum":[0,1],"title":"Charging Algorithm"},"exported_energy_charge":{"type":"boolean","title":"Exported Energy Charge","default":false},"efficiency":{"type":"number","maximum":1.0,"minimum":0.1,"title":"Efficiency","default":0.9},"degradation_percentage":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Degradation Percentage","default":0.0},"charge_limits":{"items":{"$ref":"#/components/schemas/StorageTierValue"},"type":"array","title":"Charge Limits"},"discharge_limits":{"items":{"$ref":"#/components/schemas/StorageTierValue"},"type":"array","title":"Discharge Limits"}},"type":"object","required":["discharge_power","c_rate","dod","algorithm","charging_algorithm"],"title":"StorageAdvancedStep","description":"Mirror of `PSTS_fourth_step` (which extends `BEES_specs`).\n\n`discharge_power`, `c_rate`, `dod`, `algorithm` and\n`charging_algorithm` are required upstream, so this step is\nall-or-nothing: send it complete or leave it out."},"StorageApplicationStep":{"properties":{"application_type":{"type":"integer","enum":[0,1],"title":"Application Type"},"demand_response_energy_percentage":{"type":"number","maximum":1.0,"minimum":-1.0,"title":"Demand Response Energy Percentage","default":-1.0},"peak_shaving_energy_percentage":{"type":"number","maximum":1.0,"minimum":-1.0,"title":"Peak Shaving Energy Percentage","default":-1.0},"time_shifting_energy_percentage":{"type":"number","maximum":1.0,"minimum":-1.0,"title":"Time Shifting Energy Percentage","default":-1.0},"self_consumption_energy_percentage":{"type":"number","maximum":1.0,"minimum":-1.0,"title":"Self Consumption Energy Percentage","default":-1.0},"storage_percent":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Storage Percent","default":0}},"type":"object","required":["application_type"],"title":"StorageApplicationStep","description":"Mirror of `PSTS_first_step` — what the battery is *for*.\n\nThe four energy percentages are shares of the battery's duty. A\nnegative value means \"not used for this\", which is why the upstream\ndefault is -1.0 rather than 0: zero is a real setting."},"StorageBatteryStep":{"properties":{"battery_branch_office":{"type":"string","format":"uuid","title":"Battery Branch Office"}},"type":"object","required":["battery_branch_office"],"title":"StorageBatteryStep","description":"Mirror of `PSTS_second_step`: which battery from the catalog."},"StorageOfferV3Update":{"properties":{"application":{"anyOf":[{"$ref":"#/components/schemas/StorageApplicationStep"},{"type":"null"}]},"battery":{"anyOf":[{"$ref":"#/components/schemas/StorageBatteryStep"},{"type":"null"}]},"battery_size":{"anyOf":[{"$ref":"#/components/schemas/StorageSizeStep"},{"type":"null"}]},"advanced":{"anyOf":[{"$ref":"#/components/schemas/StorageAdvancedStep"},{"type":"null"}]},"backup":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Backup"}},"type":"object","title":"StorageOfferV3Update","description":"Body of `PUT /api/v3/storage-offer/{id}`, the portal's BESS screen.\n\nDistinct from `BatteryOfferUpdate`, which sets the battery quote\nrow directly: this drives the whole storage feature — application\ntype, sizing, discharge behaviour and backup events — by writing the\n`TimeShifting` row.\n\nEvery step is optional upstream, matching the screen's wizard: a\ncaller may send only the steps it means to change.\n\nSizing is upstream's job: sending `application.storage_percent`\ncauses the battery array to be auto-sized from the consumption\nprofile, so a caller asks for a *share of consumption covered*, not\na battery count."},"StorageSizeStep":{"properties":{"quantity":{"type":"integer","minimum":1.0,"title":"Quantity"},"peak_shaving":{"items":{"$ref":"#/components/schemas/StorageTierValue"},"type":"array","title":"Peak Shaving"}},"type":"object","required":["quantity"],"title":"StorageSizeStep","description":"Mirror of `PSTS_third_step`: peak-shaving tiers, and a sizing hint.\n\nCaution: `quantity` does NOT set the number of batteries. Upstream\nauto-sizes the array from the consumption profile (`size_battery`),\nand the value sent here is not used as the battery count — verified\nagainst staging, where `quantity: 2` with `storage_percent: 0.4`\nproduced 167 batteries. Use `storage_percent` on the application step\nto influence sizing, or the v2 route to set a literal count."},"StorageTierValue":{"properties":{"identifier":{"type":"integer","minimum":0.0,"title":"Identifier"},"max_power":{"type":"number","minimum":0.0,"title":"Max Power"}},"type":"object","required":["identifier","max_power"],"title":"StorageTierValue","description":"Mirror of `TierValue`: one rate tier and its power ceiling."},"Structure":{"properties":{"discount":{"type":"number","title":"Discount"},"cost":{"type":"number","title":"Cost"},"percentage_discount":{"type":"number","title":"Percentage Discount"},"margin":{"type":"number","title":"Margin"},"unit_price":{"type":"number","title":"Unit Price"},"final_cost":{"type":"number","title":"Final Cost"},"final_cost_without_discount":{"type":"number","title":"Final Cost Without Discount"},"quantity":{"type":"integer","title":"Quantity"},"product_branch_office":{"type":"string","title":"Product Branch Office"},"product_brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Brand"}},"type":"object","required":["discount","cost","percentage_discount","margin","unit_price","final_cost","final_cost_without_discount","quantity","product_branch_office"],"title":"Structure"},"SunpayInfo":{"properties":{"financier_installer":{"anyOf":[{"$ref":"#/components/schemas/FinancierInstallerRef"},{"type":"null"}]},"credit_offer_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credit Offer Status"},"financial_product_parameters":{"anyOf":[{"$ref":"#/components/schemas/CreditItemParameters"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"SunpayInfo"},"SunwiseCreateReportDataResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"commercial_offer":{"type":"string","title":"Commercial Offer"},"project_id":{"type":"string","title":"Project Id"},"interactive_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interactive Data"}},"type":"object","required":["id","name","commercial_offer","project_id"],"title":"SunwiseCreateReportDataResponse"},"SunwiseEnvelope":{"properties":{"success":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Success"},"data":{"title":"Data"},"errors":{"title":"Errors"}},"additionalProperties":true,"type":"object","title":"SunwiseEnvelope","description":"sunwise-backend's usual `{success, data}` response wrapper.\n\nExtra fields are kept: a proxy response model must never strip data\nthe upstream adds later."},"SwpmlCriticalHour":{"properties":{"date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date"},"day":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Day"},"month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Month"},"hour":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hour"},"system":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System"}},"additionalProperties":true,"type":"object","title":"SwpmlCriticalHour","description":"One critical-hour record (`CriticalHourRecord`)."},"SwpmlCriticalHours":{"properties":{"bonus":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bonus"},"critical_hours":{"items":{"$ref":"#/components/schemas/SwpmlCriticalHour"},"type":"array","title":"Critical Hours"}},"additionalProperties":true,"type":"object","title":"SwpmlCriticalHours","description":"Critical hours for a system (`CriticalHourRecordResponse`).\n\n`bonus` is the MBP value for the requested system."},"SwpmlDayPrices":{"properties":{"node":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node"},"date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date"},"value_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Type"},"values":{"items":{"$ref":"#/components/schemas/SwpmlHourPrice"},"type":"array","title":"Values"}},"additionalProperties":true,"type":"object","title":"SwpmlDayPrices","description":"One day of hourly prices (`NodePriceDayResponse`).\n\nA normal day carries 24 entries. Spain's DST fall-back day carries 25."},"SwpmlHourPrice":{"properties":{"hour":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hour"},"pml":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pml","description":"Marginal price per kWh"}},"additionalProperties":true,"type":"object","title":"SwpmlHourPrice","description":"One hour of a day's prices (`ValuesSchema`).\n\n`pml` is per **kWh**: swpml stores MWh values but scales them down by\n1000 when serialising (`ValuesSchema.scale_pml` upstream)."},"SwpmlMonthlyPrice":{"properties":{"year_month":{"type":"string","title":"Year Month","description":"Month as YYYY-MM"},"avg_pml":{"type":"number","title":"Avg Pml"},"min_pml":{"type":"number","title":"Min Pml"},"max_pml":{"type":"number","title":"Max Pml"},"hours":{"type":"integer","title":"Hours","description":"Hourly records aggregated into this month"}},"type":"object","required":["year_month","avg_pml","min_pml","max_pml","hours"],"title":"SwpmlMonthlyPrice","description":"One month of aggregated PML prices.\n\nNot an upstream shape — boty derives it so callers (and especially MCP\ntools) can summarise a long range without moving every hourly record."},"SwpmlNode":{"properties":{"clave":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clave","description":"Unique CENACE node code, e.g. 07RIN-161"},"nombre":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nombre","description":"Readable node name"},"sistema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sistema","description":"Electrical system: SIN, BCA or BCS"},"centro_control_regional":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Centro Control Regional"},"gerencia_divisional_distribucion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gerencia Divisional Distribucion"},"entidad_federativa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entidad Federativa","description":"State, per INEGI"},"municipio_inegi":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipio Inegi","description":"Municipality, per INEGI"},"zona_carga":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zona Carga","description":"CENACE load zone; absent on older records"}},"additionalProperties":true,"type":"object","title":"SwpmlNode","description":"A CENACE grid node (`NodeList` upstream)."},"SwpmlNodeWithLocation":{"properties":{"clave":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clave","description":"Unique CENACE node code, e.g. 07RIN-161"},"nombre":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nombre","description":"Readable node name"},"sistema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sistema","description":"Electrical system: SIN, BCA or BCS"},"centro_control_regional":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Centro Control Regional"},"gerencia_divisional_distribucion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gerencia Divisional Distribucion"},"entidad_federativa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entidad Federativa","description":"State, per INEGI"},"municipio_inegi":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipio Inegi","description":"Municipality, per INEGI"},"zona_carga":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zona Carga","description":"CENACE load zone; absent on older records"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"}},"additionalProperties":true,"type":"object","title":"SwpmlNodeWithLocation","description":"A node plus approximate coordinates (`NodeListWithLocation`)."},"SwpmlPriceSummary":{"properties":{"node":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node"},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"},"days":{"type":"integer","title":"Days","description":"Days returned by swpml"},"currency_note":{"type":"string","title":"Currency Note","description":"Unit reminder; swpml does not label the currency","default":"Prices are per kWh (MXN for CENACE nodes, EUR for ESIOS). swpml scales its stored MWh values down by 1000 on output."},"monthly":{"items":{"$ref":"#/components/schemas/SwpmlMonthlyPrice"},"type":"array","title":"Monthly"}},"type":"object","required":["days"],"title":"SwpmlPriceSummary","description":"Monthly rollup of a node's PML prices over a date range."},"SwpmlRegion":{"properties":{"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"node_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Node Count"},"systems":{"items":{"type":"string"},"type":"array","title":"Systems","description":"Electrical systems in the region"},"states":{"items":{"type":"string"},"type":"array","title":"States"}},"additionalProperties":true,"type":"object","title":"SwpmlRegion","description":"A regional control centre and its node count (`RegionNodesSummary`)."},"TaxOffer":{"properties":{"amount":{"type":"number","title":"Amount"},"name":{"type":"string","title":"Name"},"value":{"type":"number","title":"Value"}},"type":"object","required":["amount","name","value"],"title":"TaxOffer"},"TaxOfferItem":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"is_percentage":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Percentage"},"taxes_offers_elements":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Taxes Offers Elements"},"compounded_taxes_offers_elements":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Compounded Taxes Offers Elements"}},"additionalProperties":true,"type":"object","title":"TaxOfferItem"},"TelephonePayload":{"properties":{"telephone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Telephone","default":""}},"type":"object","title":"TelephonePayload"},"TelephoneSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"telephone":{"type":"string","title":"Telephone"},"phone_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Key"}},"type":"object","required":["id","telephone"],"title":"TelephoneSchema"},"TierPeriod":{"properties":{"initial_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initial Date"},"final_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Final Date"},"energy":{"anyOf":[{"items":{"$ref":"#/components/schemas/TierReading"},"type":"array"},{"type":"null"}],"title":"Energy"},"demand":{"anyOf":[{"items":{"$ref":"#/components/schemas/TierReading"},"type":"array"},{"type":"null"}],"title":"Demand"},"contracted_demand":{"anyOf":[{"items":{"$ref":"#/components/schemas/TierReading"},"type":"array"},{"type":"null"}],"title":"Contracted Demand"}},"additionalProperties":true,"type":"object","title":"TierPeriod","description":"One tiers-consumption period (GET `PeriodSerializer`)."},"TierReading":{"properties":{"tier":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tier"},"consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Consumption"},"tier_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tier Type"}},"additionalProperties":true,"type":"object","title":"TierReading","description":"One tier entry (`TierEnergyConsumptionSerializer`)."},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","required":["access_token"],"title":"Token"},"TrackingPurposeSchema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"value":{"type":"string","title":"Value"},"primary_color":{"type":"string","title":"Primary Color"}},"type":"object","required":["id","name","value","primary_color"],"title":"TrackingPurposeSchema"},"UserData":{"properties":{"email":{"type":"string","title":"Email"},"company_id":{"type":"string","format":"uuid","title":"Company Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"second_surname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Second Surname"},"id":{"type":"string","format":"uuid","title":"Id"},"full_name":{"type":"string","title":"Full Name"}},"type":"object","required":["email","company_id","first_name","last_name","id","full_name"],"title":"UserData"},"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"},"ValueConsumption":{"properties":{"annual_saving":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Annual Saving"},"energy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Energy"},"original_consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Original Consumption"},"system_generation":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"System Generation"},"solar_consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Solar Consumption"},"return_of_investment":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Return Of Investment"},"return_of_investment_contado":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Return Of Investment Contado"},"battery_energy_charged_first_year":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Battery Energy Charged First Year"},"battery_energy_discharged_first_year":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Battery Energy Discharged First Year"},"system_size":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"System Size"}},"additionalProperties":true,"type":"object","title":"ValueConsumption"},"WiseMediaFile":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"additionalProperties":true,"type":"object","title":"WiseMediaFile"},"Workforce":{"properties":{"discount":{"type":"number","title":"Discount"},"cost":{"type":"number","title":"Cost"},"percentage_discount":{"type":"number","title":"Percentage Discount"},"margin":{"type":"number","title":"Margin"},"unit_price":{"type":"number","title":"Unit Price"},"final_cost":{"type":"number","title":"Final Cost"},"final_cost_without_discount":{"type":"number","title":"Final Cost Without Discount"},"quantity":{"type":"integer","title":"Quantity"},"product_branch_office":{"type":"string","title":"Product Branch Office"},"product_brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Brand"}},"type":"object","required":["discount","cost","percentage_discount","margin","unit_price","final_cost","final_cost_without_discount","quantity","product_branch_office"],"title":"Workforce"}},"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","description":"Paste your Sunwise API key (sw_live_…). \n\nIt is sent as `Authorization: Bearer <key>`."}}}}