Source code for britecore_sdk.api.api_calls.v2.quotes

"""BriteCore v2 Quotes API endpoint wrappers.

These wrappers cover quote creation and retrieval workflows exposed by the SDK's
current v2 quote surface. The quote paths remain known spec-gap wrappers, so the
docstrings describe the intended API contract first and call out SDK-specific
response normalization where needed.
"""

from logging import Logger
from typing import Any, Unpack

from urllib3 import BaseHTTPResponse, HTTPResponse, Timeout

from britecore_sdk import BritecoreError, logger
from britecore_sdk.api.api_calls import (
    BritecoreAPIClient,
    RequestParameters,
    api_client,
    web_timeout_long,
)

LOGGER: Logger = logger

API_CLIENT: BritecoreAPIClient = api_client


[docs] def create_full_quote( quote_json: dict[str, Any], *, client: BritecoreAPIClient | None = None, **kwargs: Unpack[RequestParameters], ) -> tuple[dict[str, Any] | None, str | None]: """Create a full quote from the supplied payload. Uses the configured API client to submit a quote payload and returns both the normalized response body and the created quote ID. Args: quote_json: Full quote payload dictionary (required). client: Optional explicit client override. **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: A tuple of ``(quote_json, quote_id)``. Returns ``(None, None)`` when the API response is empty after normalization. Raises: BritecoreError.MissingParameter: If ``quote_json`` is missing or invalid. POST /api/v2/quotes/create_full_quote """ # Validate required parameters if not quote_json or not isinstance(quote_json, dict): raise BritecoreError.MissingParameter( "quote_json is required and must be a dict" ) # Preserve module-level API_CLIENT behavior while allowing explicit override. effective_client: BritecoreAPIClient = client or API_CLIENT # Quote creation is a long-running write; apply the long timeout unless the # caller has already provided an explicit request_timeout override. provided_timeout: Timeout | None = kwargs.get("request_timeout") if not provided_timeout: kwargs.update({"request_timeout": Timeout(web_timeout_long)}) request_result: BaseHTTPResponse | HTTPResponse | None = ( effective_client.do_request( path="/api/v2/quotes/create_full_quote", json=quote_json, **kwargs ) ) json_info: Any = effective_client.process_result( request_result, endpoint="/api/v2/quotes/create_full_quote" ) if not json_info: return None, None return json_info, json_info["id"]
[docs] def get_quote( quote_id: str, *, client: BritecoreAPIClient | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Retrieve a quote by ID. Args: quote_id: Internal quote ID (required). client: Optional explicit client override. **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: Normalized quote response payload. Raises: BritecoreError.MissingParameter: If ``quote_id`` is missing. POST /api/v2/quotes/get_quote """ # Validate required parameters if not quote_id or not quote_id.strip(): raise BritecoreError.MissingParameter("quote id is required") quote_json: dict[str, str] = {"id": quote_id} # Preserve module-level API_CLIENT behavior while allowing explicit override. effective_client: BritecoreAPIClient = client or API_CLIENT LOGGER.debug("Getting quote") request_result: BaseHTTPResponse | HTTPResponse | None = ( effective_client.do_request( path="/api/v2/quotes/get_quote", json=quote_json, **kwargs ) ) return effective_client.process_result( request_result, endpoint="/api/v2/quotes/get_quote" )
__all__ = ["create_full_quote", "get_quote"] # --- Autogenerated spec wrappers ---
[docs] def associate_agentcy_to_quote( quote_id: Any | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Associate an agency with an existing quote. Args: quote_id: Internal quote ID (required). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: Normalized API response for the association action. Raises: BritecoreError.MissingParameter: If ``quote_id`` is missing. POST /api/v2/quotes/associate_agentcy_to_quote """ if not quote_id: raise BritecoreError.MissingParameter("quote_id is required") request_json: dict[str, Any] = {"quote_id": quote_id} filtered_json = {k: v for k, v in request_json.items() if v is not None} request_result = API_CLIENT.do_request( path="/api/v2/quotes/associate_agentcy_to_quote", json=filtered_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/associate_agentcy_to_quote" )
[docs] def bind_full_quote( external_system_reference: str | None = None, id: str | None = None, submit_bound: bool | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Bind a full quote to a policy. Either ``id`` or ``external_system_reference`` must be provided. If both are provided, ``id`` takes priority. Args: id: The internal quote ID (takes priority if both are provided). external_system_reference: The external system reference for the quote. submit_bound: Whether to submit the bound quote immediately (default: False). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing the binding confirmation and policy details. Raises: BritecoreError.MissingParameter: If neither ``id`` nor ``external_system_reference`` is provided. Example: >>> bind_full_quote(id="quote-123", submit_bound=True) >>> bind_full_quote(external_system_reference="EXT-456") POST /api/v2/quotes/bind_full_quote """ verification_list = [ {"id": id}, {"external_system_reference": external_system_reference}, ] priority_list = ["id", "external_system_reference"] request_json: dict[str, Any] = API_CLIENT.multiple_parameter_verification( verification_list, priority_list ) if submit_bound is not None: request_json["submit_bound"] = submit_bound request_result = API_CLIENT.do_request( path="/api/v2/quotes/bind_full_quote", json=request_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/bind_full_quote" )
[docs] def copy_quote( quote_id: Any | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Create a copy of an existing quote. Args: quote_id: The internal ID of the quote to copy (required). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing the new quote details. Raises: BritecoreError.MissingParameter: If ``quote_id`` is not provided. Example: >>> copy_quote(quote_id="quote-123") POST /api/v2/quotes/copy_quote """ if not quote_id: raise BritecoreError.MissingParameter("quote_id is required") request_json: dict[str, Any] = {"quote_id": quote_id} request_result = API_CLIENT.do_request( path="/api/v2/quotes/copy_quote", json=request_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/copy_quote" )
[docs] def create_and_rate_full_quote( quote: dict[str, Any] | None = None, stateless: bool | None = None, rate_quote: bool | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Create a new quote and rate it in a single operation. This is a convenience wrapper that combines quote creation and rating, useful for workflows that need an estimated rate immediately. Args: quote: The complete quote payload dictionary (required). rate_quote: Whether to perform rating immediately after creation (default: True). stateless: Whether to use stateless mode for the request (default: False). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing the created quote with rating details. Raises: BritecoreError.MissingParameter: If ``quote`` is not provided or invalid. Example: >>> quote_payload = {"line_type": "...", "insured": {...}, ...} >>> create_and_rate_full_quote(quote=quote_payload, rate_quote=True) POST /api/v2/quotes/create_and_rate_full_quote """ if not quote or not isinstance(quote, dict): raise BritecoreError.MissingParameter("quote is required and must be a dict") request_json: dict[str, Any] = {"quote": quote} if stateless is not None: request_json["stateless"] = stateless if rate_quote is not None: request_json["rate_quote"] = rate_quote filtered_json = {k: v for k, v in request_json.items() if v is not None} request_result = API_CLIENT.do_request( path="/api/v2/quotes/create_and_rate_full_quote", json=filtered_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/create_and_rate_full_quote" )
[docs] def create_endorsement_quote( quote_external_system_reference: str | None = None, quote_id: str | None = None, endorsement_date: str | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Create an endorsement quote from an existing quote. Either ``quote_id`` or ``quote_external_system_reference`` must be provided. If both are provided, ``quote_id`` takes priority. Args: quote_id: The internal quote ID (takes priority if both are provided). quote_external_system_reference: The external system reference for the source quote. endorsement_date: The effective date for the endorsement (typically ISO 8601 format). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing the new endorsement quote details. Raises: BritecoreError.MissingParameter: If neither ``quote_id`` nor ``quote_external_system_reference`` is provided. Example: >>> create_endorsement_quote(quote_id="quote-123", endorsement_date="2024-08-01") >>> create_endorsement_quote(quote_external_system_reference="EXT-456") POST /api/v2/quotes/create_endorsement_quote """ verification_list = [ {"quote_id": quote_id}, {"quote_external_system_reference": quote_external_system_reference}, ] priority_list = ["quote_id", "quote_external_system_reference"] request_json = API_CLIENT.multiple_parameter_verification( verification_list, priority_list ) if endorsement_date is not None: request_json["endorsement_date"] = endorsement_date request_result = API_CLIENT.do_request( path="/api/v2/quotes/create_endorsement_quote", json=request_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/create_endorsement_quote" )
[docs] def create_renewal_quote( external_system_reference: str | None = None, quote_id: str | None = None, policy_number: str | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Create a renewal quote for an existing policy. Either ``quote_id`` or ``external_system_reference`` must be provided if creating from an existing quote. Alternatively, ``policy_number`` may be used to create a renewal from a policy directly. Args: quote_id: The internal quote ID (priority if both quote identifiers provided). external_system_reference: The external system reference for the source quote. policy_number: The policy number to renew (used instead of quote identifiers). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing the new renewal quote details. Raises: BritecoreError.MissingParameter: If no identifying parameters are provided. Example: >>> create_renewal_quote(quote_id="quote-123") >>> create_renewal_quote(policy_number="POL-456") POST /api/v2/quotes/create_renewal_quote """ if not quote_id and not external_system_reference and not policy_number: raise BritecoreError.MissingParameter( "At least one of quote_id, external_system_reference, or policy_number is required" ) request_json: dict[str, Any] = {} if quote_id or external_system_reference: verification_list = [ {"quote_id": quote_id}, {"external_system_reference": external_system_reference}, ] priority_list = ["quote_id", "external_system_reference"] quote_params = API_CLIENT.multiple_parameter_verification( verification_list, priority_list ) request_json.update(quote_params) elif policy_number: request_json["policy_number"] = policy_number request_result = API_CLIENT.do_request( path="/api/v2/quotes/create_renewal_quote", json=request_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/create_renewal_quote" )
[docs] def delete_full_quote( external_system_reference: str | None = None, id: str | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Delete a full quote by internal ID or external system reference. Either ``id`` or ``external_system_reference`` must be provided. If both are provided, ``id`` takes priority. Args: id: The internal quote ID (takes priority if both are provided). external_system_reference: The external system reference for the quote. **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response (typically empty on success). Raises: BritecoreError.MissingParameter: If neither ``id`` nor ``external_system_reference`` is provided. Example: >>> delete_full_quote(id="quote-123") >>> delete_full_quote(external_system_reference="EXT-456") POST /api/v2/quotes/delete_full_quote """ verification_list = [ {"id": id}, {"external_system_reference": external_system_reference}, ] priority_list = ["id", "external_system_reference"] request_json = API_CLIENT.multiple_parameter_verification( verification_list, priority_list ) request_result = API_CLIENT.do_request( path="/api/v2/quotes/delete_full_quote", json=request_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/delete_full_quote" )
[docs] def delete_quote( **kwargs: Unpack[RequestParameters], ) -> Any: """Delete a draft quote. This operation deletes a quote from the system. The quote must be in a draft state (not bound or issued). Use ``delete_full_quote`` for more control over which quote to delete. Args: **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response (typically empty on success). Example: >>> delete_quote() POST /api/v2/quotes/delete_quote """ request_json: dict[str, Any] = {} request_result = API_CLIENT.do_request( path="/api/v2/quotes/delete_quote", json=request_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/delete_quote" )
[docs] def get_estimated_quote( rate_quote: bool | None = None, quote_id: str | None = None, stateless: bool | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Get an estimated quote with optional rating. Args: quote_id: The internal quote ID (required). rate_quote: Whether to perform rating on the quote (default: False). stateless: Whether to use stateless mode for the request (default: False). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing the estimated quote details. Example: >>> get_estimated_quote(quote_id="quote-123", rate_quote=True) POST /api/v2/quotes/get_estimated_quote """ if not quote_id: raise BritecoreError.MissingParameter("quote_id is required") request_json: dict[str, Any] = {"quote_id": quote_id} if rate_quote is not None: request_json["rate_quote"] = rate_quote if stateless is not None: request_json["stateless"] = stateless filtered_json = {k: v for k, v in request_json.items() if v is not None} request_result = API_CLIENT.do_request( path="/api/v2/quotes/get_estimated_quote", json=filtered_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/get_estimated_quote" )
[docs] def get_quote_properties_summary( quote_id: Any | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Get a summary of all properties in a quote. Args: quote_id: The internal quote ID (required). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing a list of properties with summary details. Raises: BritecoreError.MissingParameter: If ``quote_id`` is not provided. Example: >>> get_quote_properties_summary(quote_id="quote-123") POST /api/v2/quotes/get_quote_properties_summary """ if not quote_id: raise BritecoreError.MissingParameter("quote_id is required") request_json: dict[str, Any] = {"quote_id": quote_id} request_result = API_CLIENT.do_request( path="/api/v2/quotes/get_quote_properties_summary", json=request_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/get_quote_properties_summary" )
[docs] def get_quote_wizard_plugin( integration_point_code: str | None = None, revision_id: str | None = None, integration_instance_id: str | None = None, property_id: str | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Retrieve quote wizard plugin output for a revision/property context. At minimum, callers should provide ``integration_point_code`` and ``revision_id`` for deterministic behavior. Args: integration_point_code: Plugin integration point code. revision_id: Revision ID used by the quote wizard plugin. integration_instance_id: Optional integration instance ID. property_id: Optional property ID context. **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: Normalized plugin payload. POST /api/v2/quotes/get_quote_wizard_plugin """ request_json: dict[str, Any] = { "integration_point_code": integration_point_code, "revision_id": revision_id, "integration_instance_id": integration_instance_id, "property_id": property_id, } filtered_json = {k: v for k, v in request_json.items() if v is not None} request_result = API_CLIENT.do_request( path="/api/v2/quotes/get_quote_wizard_plugin", json=filtered_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/get_quote_wizard_plugin" )
[docs] def get_risks( quote_id: str | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Get all risks (properties) associated with a quote. Returns a list of risks in the quote with their coverage details. Args: quote_id: The internal quote ID (required). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing a list of risks with coverage details. Raises: BritecoreError.MissingParameter: If ``quote_id`` is not provided. Example: >>> get_risks(quote_id="quote-123") POST /api/v2/quotes/get_risks """ if not quote_id: raise BritecoreError.MissingParameter("quote_id is required") request_json: dict[str, Any] = {"quote_id": quote_id} request_result = API_CLIENT.do_request( path="/api/v2/quotes/get_risks", json=request_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/get_risks" )
[docs] def issue_full_quote( external_system_reference: str | None = None, id: str | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Issue a full quote, making it ready for binding. Issues a quote which may trigger workflows such as generating documents, sending notifications, or triggering underwriting reviews depending on system configuration. Either ``id`` or ``external_system_reference`` must be provided. If both are provided, ``id`` takes priority. Args: id: The internal quote ID (takes priority if both are provided). external_system_reference: The external system reference for the quote. **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing confirmation of the issued quote. Raises: BritecoreError.MissingParameter: If neither ``id`` nor ``external_system_reference`` is provided. Example: >>> issue_full_quote(id="quote-123") >>> issue_full_quote(external_system_reference="EXT-456") POST /api/v2/quotes/issue_full_quote """ verification_list = [ {"id": id}, {"external_system_reference": external_system_reference}, ] priority_list = ["id", "external_system_reference"] request_json = API_CLIENT.multiple_parameter_verification( verification_list, priority_list ) request_result = API_CLIENT.do_request( path="/api/v2/quotes/issue_full_quote", json=request_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/issue_full_quote" )
[docs] def list_available_offers( contact_id: Any | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """List available insurance offers for a contact. Retrieves a list of products and coverages that can be offered to the contact, based on their profile, location, and risk profile. Args: contact_id: The internal contact ID (required). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing a list of available offers with pricing. Raises: BritecoreError.MissingParameter: If ``contact_id`` is not provided. Example: >>> list_available_offers(contact_id="contact-123") POST /api/v2/quotes/list_available_offers """ if not contact_id: raise BritecoreError.MissingParameter("contact_id is required") request_json: dict[str, Any] = {"contact_id": contact_id} request_result = API_CLIENT.do_request( path="/api/v2/quotes/list_available_offers", json=request_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/list_available_offers" )
[docs] def modify_full_quote( messages: list[str] | None = None, data: Any | dict[str, Any] | None = None, success: bool | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Modify an existing full quote with updated data. Updates quote details, coverage selections, or other parameters. This is typically used after retrieving a quote and making modifications before rebinding or rerating. Args: data: The quote data to update (contains modified quote parameters). messages: Optional list of messages or notes associated with the modification. success: Indicates whether the modification was successful (typically set by API). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing the modified quote details. Example: >>> modify_full_quote(data={"coverage_limits": {...}}, messages=["Updated coverage"]) POST /api/v2/quotes/modify_full_quote """ request_json: dict[str, Any] = {} if data is not None: request_json["data"] = data if messages is not None: request_json["messages"] = messages if success is not None: request_json["success"] = success filtered_json = {k: v for k, v in request_json.items() if v is not None} request_result = API_CLIENT.do_request( path="/api/v2/quotes/modify_full_quote", json=filtered_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/modify_full_quote" )
[docs] def prefill_loss_history( quote_id: Any | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Prefill quote loss history data for the given quote. Args: quote_id: Internal quote ID (required). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: Normalized prefill response payload. Raises: BritecoreError.MissingParameter: If ``quote_id`` is missing. POST /api/v2/quotes/prefill_loss_history """ if not quote_id: raise BritecoreError.MissingParameter("quote_id is required") request_json: dict[str, Any] = {"quote_id": quote_id} filtered_json = {k: v for k, v in request_json.items() if v is not None} request_result = API_CLIENT.do_request( path="/api/v2/quotes/prefill_loss_history", json=filtered_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/prefill_loss_history" )
[docs] def prefill_quote( api_key: str | None = None, id: str | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Prefill a quote with data from an external source. Populates a quote with data from an external system or data provider, such as prior underwriting information or third-party data sources. Either ``id`` or ``api_key`` may be required depending on the data source configuration. Args: id: The internal quote ID to prefill (required). api_key: Optional API key for accessing the data source. **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing the prefilled quote data. Example: >>> prefill_quote(id="quote-123", api_key="key-456") POST /api/v2/quotes/prefill_quote """ if not id: raise BritecoreError.MissingParameter("id is required") request_json: dict[str, Any] = {"id": id} if api_key is not None: request_json["api_key"] = api_key filtered_json = {k: v for k, v in request_json.items() if v is not None} request_result = API_CLIENT.do_request( path="/api/v2/quotes/prefill_quote", json=filtered_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/prefill_quote" )
[docs] def prefill_violations( quote_id: Any | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Prefill violations data for the given quote. Args: quote_id: Internal quote ID (required). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: Normalized prefill response payload. Raises: BritecoreError.MissingParameter: If ``quote_id`` is missing. POST /api/v2/quotes/prefill_violations """ if not quote_id: raise BritecoreError.MissingParameter("quote_id is required") request_json: dict[str, Any] = {"quote_id": quote_id} filtered_json = {k: v for k, v in request_json.items() if v is not None} request_result = API_CLIENT.do_request( path="/api/v2/quotes/prefill_violations", json=filtered_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/prefill_violations" )
[docs] def rate_full_quote( debug: bool | None = None, external_system_reference: str | None = None, id: str | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Rate a full quote to calculate premiums and coverage options. Sends a quote to the rating engine to calculate premium rates and available coverage variations. Either ``id`` or ``external_system_reference`` must be provided. If both are provided, ``id`` takes priority. Args: id: The internal quote ID (takes priority if both are provided). external_system_reference: The external system reference for the quote. debug: Enable debug mode for detailed rating diagnostics (default: False). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing rated quote with premium and coverage details. Raises: BritecoreError.MissingParameter: If neither ``id`` nor ``external_system_reference`` is provided. Example: >>> rate_full_quote(id="quote-123", debug=False) >>> rate_full_quote(external_system_reference="EXT-456") POST /api/v2/quotes/rate_full_quote """ verification_list = [ {"id": id}, {"external_system_reference": external_system_reference}, ] priority_list = ["id", "external_system_reference"] request_json: dict[str, Any] = API_CLIENT.multiple_parameter_verification( verification_list, priority_list ) if debug is not None: request_json["debug"] = debug filtered_json = {k: v for k, v in request_json.items() if v is not None} request_result = API_CLIENT.do_request( path="/api/v2/quotes/rate_full_quote", json=filtered_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/rate_full_quote" )
[docs] def rate_quote( quote_id: Any | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Rate a quote to calculate estimated premiums. Performs rating on the specified quote. Similar to ``rate_full_quote`` but used when only the quote ID is needed. Args: quote_id: The internal quote ID (required). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing rated quote with premium details. Raises: BritecoreError.MissingParameter: If ``quote_id`` is not provided. Example: >>> rate_quote(quote_id="quote-123") POST /api/v2/quotes/rate_quote """ if not quote_id: raise BritecoreError.MissingParameter("quote_id is required") request_json: dict[str, Any] = {"quote_id": quote_id} request_result = API_CLIENT.do_request( path="/api/v2/quotes/rate_quote", json=request_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/rate_quote" )
[docs] def retrieve_full_quote( external_system_reference: str | None = None, id: str | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Retrieve a full quote with all details. Fetches a complete quote record including coverage details, pricing, underwriting information, and status. Either ``id`` or ``external_system_reference`` must be provided. If both are provided, ``id`` takes priority. Args: id: The internal quote ID (takes priority if both are provided). external_system_reference: The external system reference for the quote. **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: API response containing the complete quote details. Raises: BritecoreError.MissingParameter: If neither ``id`` nor ``external_system_reference`` is provided. Example: >>> retrieve_full_quote(id="quote-123") >>> retrieve_full_quote(external_system_reference="EXT-456") POST /api/v2/quotes/retrieve_full_quote """ verification_list = [ {"id": id}, {"external_system_reference": external_system_reference}, ] priority_list = ["id", "external_system_reference"] request_json = API_CLIENT.multiple_parameter_verification( verification_list, priority_list ) request_result = API_CLIENT.do_request( path="/api/v2/quotes/retrieve_full_quote", json=request_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/retrieve_full_quote" )
[docs] def submit_application( **kwargs: Unpack[RequestParameters], ) -> Any: """Submit the current quote application workflow. Args: **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: Normalized submission response payload. POST /api/v2/quotes/submit_application """ request_json: dict[str, Any] = {} filtered_json = {k: v for k, v in request_json.items() if v is not None} request_result = API_CLIENT.do_request( path="/api/v2/quotes/submit_application", json=filtered_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/submit_application" )
[docs] def submit_change( **kwargs: Unpack[RequestParameters], ) -> Any: """Submit a pending quote change workflow. Args: **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: Normalized submission response payload. POST /api/v2/quotes/submit_change """ request_json: dict[str, Any] = {} filtered_json = {k: v for k, v in request_json.items() if v is not None} request_result = API_CLIENT.do_request( path="/api/v2/quotes/submit_change", json=filtered_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/submit_change" )
[docs] def summary( quote_id: Any | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Retrieve summary data for a quote. Args: quote_id: Internal quote ID (required). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: Normalized quote summary payload. Raises: BritecoreError.MissingParameter: If ``quote_id`` is missing. POST /api/v2/quotes/summary """ if not quote_id: raise BritecoreError.MissingParameter("quote_id is required") request_json: dict[str, Any] = {"quote_id": quote_id} filtered_json = {k: v for k, v in request_json.items() if v is not None} request_result = API_CLIENT.do_request( path="/api/v2/quotes/summary", json=filtered_json, method="POST", **kwargs, ) return API_CLIENT.process_result(request_result, endpoint="/api/v2/quotes/summary")
[docs] def turn_quote_into_application( quote_id: Any | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Convert a quote record into an application state. Args: quote_id: Internal quote ID (required). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: Normalized conversion response payload. Raises: BritecoreError.MissingParameter: If ``quote_id`` is missing. POST /api/v2/quotes/turn_quote_into_application """ if not quote_id: raise BritecoreError.MissingParameter("quote_id is required") request_json: dict[str, Any] = {"quote_id": quote_id} filtered_json = {k: v for k, v in request_json.items() if v is not None} request_result = API_CLIENT.do_request( path="/api/v2/quotes/turn_quote_into_application", json=filtered_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/turn_quote_into_application" )
[docs] def update_e_delivery_enabled( revision_id: Any | None = None, **kwargs: Unpack[RequestParameters], ) -> Any: """Update e-delivery settings for a revision. Args: revision_id: Revision ID to update (required). **kwargs: Additional request parameters (timeout, retry, headers, etc.). Returns: Normalized update response payload. Raises: BritecoreError.MissingParameter: If ``revision_id`` is missing. POST /api/v2/quotes/update_e_delivery_enabled """ if not revision_id: raise BritecoreError.MissingParameter("revision_id is required") request_json: dict[str, Any] = {"revision_id": revision_id} filtered_json = {k: v for k, v in request_json.items() if v is not None} request_result = API_CLIENT.do_request( path="/api/v2/quotes/update_e_delivery_enabled", json=filtered_json, method="POST", **kwargs, ) return API_CLIENT.process_result( request_result, endpoint="/api/v2/quotes/update_e_delivery_enabled" )
__all__.extend( [ "associate_agentcy_to_quote", "bind_full_quote", "copy_quote", "create_and_rate_full_quote", "create_endorsement_quote", "create_renewal_quote", "delete_full_quote", "delete_quote", "get_estimated_quote", "get_quote_properties_summary", "get_quote_wizard_plugin", "get_risks", "issue_full_quote", "list_available_offers", "modify_full_quote", "prefill_loss_history", "prefill_quote", "prefill_violations", "rate_full_quote", "rate_quote", "retrieve_full_quote", "submit_application", "submit_change", "summary", "turn_quote_into_application", "update_e_delivery_enabled", ] ) def list_quotes( page: int = 1, limit: int = 100, client: BritecoreAPIClient | None = None, **kwargs: Any, ) -> Any: """Return a paginated list of quotes. This function is a pagination helper used by ``iter_quotes``. The BriteCore v2 API does not currently expose a generic quote-list endpoint, so this implementation returns an empty result signalling no pages to iterate. Use ``get_quote`` to retrieve individual quotes by ID, or the search endpoints for filtered retrieval. Args: page: Page number (1-based). limit: Maximum results per page. client: Optional explicit client; defaults to the module-level client. **kwargs: Additional request parameters. Returns: Empty result dict (``{"data": []}``) — no list endpoint available. """ return {"data": []}