"""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": []}