# This file was auto-generated by Fern from our API Definition.

import datetime as dt
import typing

from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ..core.request_options import RequestOptions
from ..types.aemp_equipment_get_aemp_equipment_list_response_body import AempEquipmentGetAempEquipmentListResponseBody
from ..types.assets_inputs_get_assets_inputs_response_body import AssetsInputsGetAssetsInputsResponseBody
from ..types.create_report_config_object_request_body import CreateReportConfigObjectRequestBody
from ..types.depreciation_get_depreciation_transactions_response_body import (
    DepreciationGetDepreciationTransactionsResponseBody,
)
from ..types.detection_log_get_detections_response_body import DetectionLogGetDetectionsResponseBody
from ..types.devices_get_devices_response_body import DevicesGetDevicesResponseBody
from ..types.driver_efficiencies_response import DriverEfficienciesResponse
from ..types.engine_immobilizer_get_engine_immobilizer_states_response_body import (
    EngineImmobilizerGetEngineImmobilizerStatesResponseBody,
)
from ..types.equipment_patch_equipment_response_body import EquipmentPatchEquipmentResponseBody
from ..types.functions_start_function_run_response_body import FunctionsStartFunctionRunResponseBody
from ..types.goa_attribute_tiny import GoaAttributeTiny
from ..types.hos_daily_logs_update_shipping_docs_response_body import HosDailyLogsUpdateShippingDocsResponseBody
from ..types.hos_eld_events_get_hos_eld_events_response_body import HosEldEventsGetHosEldEventsResponseBody
from ..types.hub_custom_properties_list_hub_custom_properties_response_body import (
    HubCustomPropertiesListHubCustomPropertiesResponseBody,
)
from ..types.jobs_create_job_response_body import JobsCreateJobResponseBody
from ..types.jobs_delete_job_response_body import JobsDeleteJobResponseBody
from ..types.jobs_get_jobs_response_body import JobsGetJobsResponseBody
from ..types.jobs_patch_job_response_body import JobsPatchJobResponseBody
from ..types.order_input_object_request_body import OrderInputObjectRequestBody
from ..types.patch_job_object_request_body import PatchJobObjectRequestBody
from ..types.plan_orders_create_plan_orders_response_body import PlanOrdersCreatePlanOrdersResponseBody
from ..types.post_job_object_request_body import PostJobObjectRequestBody
from ..types.qualification_owner_request_object_request_body import QualificationOwnerRequestObjectRequestBody
from ..types.qualification_record_request_field_input_object_request_body import (
    QualificationRecordRequestFieldInputObjectRequestBody,
)
from ..types.qualification_type_request_object_request_body import QualificationTypeRequestObjectRequestBody
from ..types.qualifications_get_qualification_records_response_body import (
    QualificationsGetQualificationRecordsResponseBody,
)
from ..types.qualifications_get_qualification_records_stream_response_body import (
    QualificationsGetQualificationRecordsStreamResponseBody,
)
from ..types.qualifications_get_qualification_types_response_body import QualificationsGetQualificationTypesResponseBody
from ..types.qualifications_patch_qualification_record_response_body import (
    QualificationsPatchQualificationRecordResponseBody,
)
from ..types.qualifications_post_qualification_record_response_body import (
    QualificationsPostQualificationRecordResponseBody,
)
from ..types.reading_datapoint_request_body import ReadingDatapointRequestBody
from ..types.readings_get_readings_history_response_body import ReadingsGetReadingsHistoryResponseBody
from ..types.readings_get_readings_snapshot_response_body import ReadingsGetReadingsSnapshotResponseBody
from ..types.readings_list_readings_definitions_response_body import ReadingsListReadingsDefinitionsResponseBody
from ..types.reports_create_report_run_response_body import ReportsCreateReportRunResponseBody
from ..types.reports_get_datasets_response_body import ReportsGetDatasetsResponseBody
from ..types.reports_get_report_configs_response_body import ReportsGetReportConfigsResponseBody
from ..types.reports_get_report_run_data_response_body import ReportsGetReportRunDataResponseBody
from ..types.reports_get_report_runs_response_body import ReportsGetReportRunsResponseBody
from ..types.ridership_accounts_create_ridership_account_response_body import (
    RidershipAccountsCreateRidershipAccountResponseBody,
)
from ..types.ridership_accounts_get_ridership_account_response_body import (
    RidershipAccountsGetRidershipAccountResponseBody,
)
from ..types.ridership_accounts_list_ridership_accounts_response_body import (
    RidershipAccountsListRidershipAccountsResponseBody,
)
from ..types.ridership_accounts_update_ridership_account_response_body import (
    RidershipAccountsUpdateRidershipAccountResponseBody,
)
from ..types.ridership_passenger_identifier_input_request_body import RidershipPassengerIdentifierInputRequestBody
from ..types.ridership_passenger_special_instructions_input_request_body import (
    RidershipPassengerSpecialInstructionsInputRequestBody,
)
from ..types.ridership_passengers_create_ridership_passenger_response_body import (
    RidershipPassengersCreateRidershipPassengerResponseBody,
)
from ..types.ridership_passengers_get_ridership_passenger_response_body import (
    RidershipPassengersGetRidershipPassengerResponseBody,
)
from ..types.ridership_passengers_list_ridership_passengers_response_body import (
    RidershipPassengersListRidershipPassengersResponseBody,
)
from ..types.ridership_passengers_update_ridership_passenger_response_body import (
    RidershipPassengersUpdateRidershipPassengerResponseBody,
)
from ..types.ridership_route_setup_passenger_input_request_body import RidershipRouteSetupPassengerInputRequestBody
from ..types.ridership_route_setups_create_ridership_route_setup_response_body import (
    RidershipRouteSetupsCreateRidershipRouteSetupResponseBody,
)
from ..types.ridership_route_setups_get_ridership_route_setup_response_body import (
    RidershipRouteSetupsGetRidershipRouteSetupResponseBody,
)
from ..types.ridership_route_setups_update_ridership_route_setup_response_body import (
    RidershipRouteSetupsUpdateRidershipRouteSetupResponseBody,
)
from ..types.safety_scores_get_driver_safety_score_trips_response_body import (
    SafetyScoresGetDriverSafetyScoreTripsResponseBody,
)
from ..types.safety_scores_get_driver_safety_scores_response_body import SafetyScoresGetDriverSafetyScoresResponseBody
from ..types.safety_scores_get_tag_group_safety_scores_response_body import (
    SafetyScoresGetTagGroupSafetyScoresResponseBody,
)
from ..types.safety_scores_get_tag_safety_scores_response_body import SafetyScoresGetTagSafetyScoresResponseBody
from ..types.safety_scores_get_vehicle_safety_score_trips_response_body import (
    SafetyScoresGetVehicleSafetyScoreTripsResponseBody,
)
from ..types.safety_scores_get_vehicle_safety_scores_response_body import SafetyScoresGetVehicleSafetyScoresResponseBody
from ..types.trailer_stats_get_trailer_stats_feed_response_body import TrailerStatsGetTrailerStatsFeedResponseBody
from ..types.trailer_stats_get_trailer_stats_history_response_body import TrailerStatsGetTrailerStatsHistoryResponseBody
from ..types.trailer_stats_get_trailer_stats_snapshot_response_body import (
    TrailerStatsGetTrailerStatsSnapshotResponseBody,
)
from ..types.update_engine_immobilizer_relay_state_request_body_request_body import (
    UpdateEngineImmobilizerRelayStateRequestBodyRequestBody,
)
from .raw_client import AsyncRawBetaApIsClient, RawBetaApIsClient
from .types.functions_start_function_run_request_body_params_override import (
    FunctionsStartFunctionRunRequestBodyParamsOverride,
)
from .types.get_assets_inputs_request_type import GetAssetsInputsRequestType
from .types.get_driver_efficiency_request_driver_activation_status import (
    GetDriverEfficiencyRequestDriverActivationStatus,
)
from .types.get_hos_eld_events_request_driver_activation_status import GetHosEldEventsRequestDriverActivationStatus
from .types.get_jobs_request_status import GetJobsRequestStatus
from .types.get_qualification_records_stream_request_entity_type import GetQualificationRecordsStreamRequestEntityType
from .types.get_qualification_types_request_entity_type import GetQualificationTypesRequestEntityType
from .types.get_tag_group_safety_scores_request_score_type import GetTagGroupSafetyScoresRequestScoreType
from .types.get_tag_safety_scores_request_score_type import GetTagSafetyScoresRequestScoreType
from .types.ridership_passengers_create_ridership_passenger_request_body_classification import (
    RidershipPassengersCreateRidershipPassengerRequestBodyClassification,
)
from .types.ridership_passengers_update_ridership_passenger_request_body_classification import (
    RidershipPassengersUpdateRidershipPassengerRequestBodyClassification,
)

# this is used as the default value for optional parameters
OMIT = typing.cast(typing.Any, ...)


class BetaApIsClient:
    def __init__(self, *, client_wrapper: SyncClientWrapper):
        self._raw_client = RawBetaApIsClient(client_wrapper=client_wrapper)

    @property
    def with_raw_response(self) -> RawBetaApIsClient:
        """
        Retrieves a raw implementation of this client that returns raw responses.

        Returns
        -------
        RawBetaApIsClient
        """
        return self._raw_client

    def get_depreciation_transactions(
        self,
        *,
        start_time: typing.Optional[dt.datetime] = None,
        end_time: typing.Optional[dt.datetime] = None,
        asset_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> DepreciationGetDepreciationTransactionsResponseBody:
        """
        Returns depreciation and adjustment transactions for assets. Transactions are returned ordered by updatedAt in ascending order (oldest to newest). Use startTime parameter for incremental sync.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Assets** under the Assets category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        start_time : typing.Optional[dt.datetime]
            RFC 3339 timestamp. Returns transactions updated after this time. Compared against updatedAt. If not provided, returns all transactions. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        end_time : typing.Optional[dt.datetime]
            RFC 3339 timestamp. Returns transactions updated before this time. Compared against updatedAt. If not provided, behaves as an unending feed of changes. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        asset_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Filter by asset IDs. Up to 50 ids.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        DepreciationGetDepreciationTransactionsResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_depreciation_transactions()
        """
        _response = self._raw_client.get_depreciation_transactions(
            start_time=start_time, end_time=end_time, asset_ids=asset_ids, after=after, request_options=request_options
        )
        return _response.data

    def get_assets_inputs(
        self,
        *,
        type: GetAssetsInputsRequestType,
        start_time: str,
        ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        end_time: typing.Optional[str] = None,
        include_external_ids: typing.Optional[bool] = None,
        include_tags: typing.Optional[bool] = None,
        include_attributes: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> AssetsInputsGetAssetsInputsResponseBody:
        """
        This endpoint will return data collected from the inputs of your organization's assets based on the time parameters passed in. Results are paginated. If you include an endTime, the endpoint will return data up until that point. If you don’t include an endTime, you can continue to poll the API real-time with the pagination cursor that gets returned on every call. The endpoint will only return data up until the endTime that has been processed by the server at the time of the original request. You will need to request the same [startTime, endTime) range again to receive data for assets processed after the original request time. This endpoint sorts data by time ascending.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Assets** under the Assets category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        type : GetAssetsInputsRequestType
            Input stat type to query for.  Valid values: `auxInput1`, `auxInput2`, `auxInput3`, `auxInput4`, `auxInput5`, `auxInput6`, `auxInput7`, `auxInput8`, `auxInput9`, `auxInput10`, `auxInput11`, `auxInput12`, `auxInput13`, `analogInput1Voltage`, `analogInput2Voltage`, `analogInput1Current`, `analogInput2Current`, `batteryVoltage`

        start_time : str
            A start time in RFC 3339 format. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Comma-separated list of asset IDs. Limited to 100 ID's for each request.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        end_time : typing.Optional[str]
             An end time in RFC 3339 format. Defaults to never if not provided; if not provided then pagination will not cease, and a valid pagination cursor will always be returned. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        include_external_ids : typing.Optional[bool]
            Optional boolean indicating whether to return external IDs on supported entities

        include_tags : typing.Optional[bool]
            Optional boolean indicating whether to return tags on supported entities

        include_attributes : typing.Optional[bool]
            Optional boolean indicating whether to return attributes on supported entities

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        AssetsInputsGetAssetsInputsResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_assets_inputs(
            type="auxInput1",
            start_time="startTime",
        )
        """
        _response = self._raw_client.get_assets_inputs(
            type=type,
            start_time=start_time,
            ids=ids,
            after=after,
            end_time=end_time,
            include_external_ids=include_external_ids,
            include_tags=include_tags,
            include_attributes=include_attributes,
            request_options=request_options,
        )
        return _response.data

    def get_aemp_equipment_list(
        self, page_number: str, *, request_options: typing.Optional[RequestOptions] = None
    ) -> AempEquipmentGetAempEquipmentListResponseBody:
        """
        Get a list of equipment following the AEMP ISO 15143-3 standard.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read AEMP** under the Equipment category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        page_number : str
            The number corresponding to a specific page of paginated results, defaulting to the first page if not provided. The default page size is 100 records.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        AempEquipmentGetAempEquipmentListResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_aemp_equipment_list(
            page_number="pageNumber",
        )
        """
        _response = self._raw_client.get_aemp_equipment_list(page_number, request_options=request_options)
        return _response.data

    def get_driver_efficiency(
        self,
        *,
        driver_activation_status: typing.Optional[GetDriverEfficiencyRequestDriverActivationStatus] = None,
        driver_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        driver_tag_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        driver_parent_tag_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        start_time: typing.Optional[dt.datetime] = None,
        end_time: typing.Optional[dt.datetime] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> DriverEfficienciesResponse:
        """
        Get all driver and associated vehicle efficiency data.

         This is a legacy endpoint, consider using this endpoint [/driver-efficiency/drivers](https://developers.samsara.com/reference/getdriverefficiencybydrivers) instead. The endpoint will continue to function as documented.

         <b>Rate limit:</b> 50 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        To use this endpoint, select **Read Fuel & Energy** under the Fuel & Energy category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>

        Parameters
        ----------
        driver_activation_status : typing.Optional[GetDriverEfficiencyRequestDriverActivationStatus]
            If value is `deactivated`, only drivers that are deactivated will appear in the response. This parameter will default to `active` if not provided (fetching only active drivers).

        driver_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            A filter on the data based on this comma-separated list of driver IDs. Cannot be used with tag filtering or driver status. Example: `driverIds=1234,5678`

        after : typing.Optional[str]
            If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        driver_tag_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Filters summary to drivers based on this comma-separated list of tag IDs. Data from all the drivers' respective vehicles will be included in the summary, regardless of which tag the vehicle is associated with. Should not be provided in addition to `driverIds`. Example: driverTagIds=1234,5678

        driver_parent_tag_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Filters like `driverTagIds` but includes descendants of all the given parent tags. Should not be provided in addition to `driverIds`. Example: `driverParentTagIds=1234,5678`

        start_time : typing.Optional[dt.datetime]
            A start time in RFC 3339 format. The results will be truncated to the hour mark for the provided time. For example, if `startTime` is 2020-03-17T12:06:19Z then the results will include data starting from 2020-03-17T12:00:00Z. The provided start time cannot be in the future. Start time can be at most 31 days before the end time. If the start time is within the last hour, the results will be empty. Default: 24 hours prior to endTime.

            Note that the most recent 72 hours of data may still be processing and is subject to change and latency, so it is not recommended to request data for the most recent 72 hours.

        end_time : typing.Optional[dt.datetime]
            An end time in RFC 3339 format. The results will be truncated to the hour mark for the provided time. For example, if `endTime` is 2020-03-17T12:06:19Z then the results will include data up until 2020-03-17T12:00:00Z. The provided end time cannot be in the future. End time can be at most 31 days after the start time. Default: The current time truncated to the hour mark.

            Note that the most recent 72 hours of data may still be processing and is subject to change and latency, so it is not recommended to request data for the most recent 72 hours

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        DriverEfficienciesResponse
            List of all driver and associated vehicle efficiency data

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_driver_efficiency()
        """
        _response = self._raw_client.get_driver_efficiency(
            driver_activation_status=driver_activation_status,
            driver_ids=driver_ids,
            after=after,
            driver_tag_ids=driver_tag_ids,
            driver_parent_tag_ids=driver_parent_tag_ids,
            start_time=start_time,
            end_time=end_time,
            request_options=request_options,
        )
        return _response.data

    def patch_equipment(
        self,
        id: str,
        *,
        attributes: typing.Optional[typing.Sequence[GoaAttributeTiny]] = OMIT,
        engine_hours: typing.Optional[int] = OMIT,
        equipment_serial_number: typing.Optional[str] = OMIT,
        external_ids: typing.Optional[typing.Dict[str, str]] = OMIT,
        name: typing.Optional[str] = OMIT,
        notes: typing.Optional[str] = OMIT,
        odometer_meters: typing.Optional[int] = OMIT,
        tag_ids: typing.Optional[typing.Sequence[str]] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> EquipmentPatchEquipmentResponseBody:
        """
        Update an equipment.  **Note** this implementation of patch uses [the JSON merge patch](https://tools.ietf.org/html/rfc7396) proposed standard.
         This means that any fields included in the patch request will _overwrite_ fields which exist on the target resource.
         For arrays, this means any array included in the request will _replace_ the array that exists at the specified path, it will not _add_ to the existing array

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Equipment** under the Equipment category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            The unique Samsara ID of the Equipment. This is automatically generated when the Equipment object is created. It cannot be changed.

        attributes : typing.Optional[typing.Sequence[GoaAttributeTiny]]
            List of attributes associated with the entity

        engine_hours : typing.Optional[int]
            When you provide a manual engine hours override, Samsara will begin updating a equipment's engine hours used since this override was set.

        equipment_serial_number : typing.Optional[str]
            The serial number of the equipment.

        external_ids : typing.Optional[typing.Dict[str, str]]
            A map of external ids

        name : typing.Optional[str]
            The human-readable name of the Equipment. This is set by a fleet administrator and will appear in both Samsara’s cloud dashboard as well as the Samsara Driver mobile app. By default, this name is the serial number of the Samsara Asset Gateway. It can be set or updated through the Samsara Dashboard or through the API at any time.

        notes : typing.Optional[str]
            These are generic notes about the Equipment. Empty by default. Can be set or updated through the Samsara Dashboard or the API at any time.

        odometer_meters : typing.Optional[int]
            When you provide a manual odometer override, Samsara will begin updating a equipment's odometer using GPS distance traveled since this override was set.

        tag_ids : typing.Optional[typing.Sequence[str]]
            An array of IDs of tags to associate with this equipment. If your access to the API is scoped by one or more tags, this field is required to pass in.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        EquipmentPatchEquipmentResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.patch_equipment(
            id="id",
        )
        """
        _response = self._raw_client.patch_equipment(
            id,
            attributes=attributes,
            engine_hours=engine_hours,
            equipment_serial_number=equipment_serial_number,
            external_ids=external_ids,
            name=name,
            notes=notes,
            odometer_meters=odometer_meters,
            tag_ids=tag_ids,
            request_options=request_options,
        )
        return _response.data

    def get_hos_eld_events(
        self,
        *,
        start_time: str,
        end_time: str,
        driver_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        tag_ids: typing.Optional[str] = None,
        parent_tag_ids: typing.Optional[str] = None,
        driver_activation_status: typing.Optional[GetHosEldEventsRequestDriverActivationStatus] = None,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> HosEldEventsGetHosEldEventsResponseBody:
        """
        Get all HOS ELD events in a time range, grouped by driver. Attributes will be populated depending on which ELD Event Type is being returned.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read ELD Compliance Settings (US)** under the Compliance category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        start_time : str
             A start time in RFC 3339 format. Defaults to now if not provided. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        end_time : str
             An end time in RFC 3339 format. Defaults to now if not provided. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        driver_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
             A filter on the data based on this comma-separated list of driver IDs and externalIds. Example: `driverIds=1234,5678,payroll:4841`

        tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of tag IDs. Example: `tagIds=1234,5678`

        parent_tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of parent tag IDs, for use by orgs with tag hierarchies. Specifying a parent tag will implicitly include all descendent tags of the parent tag. Example: `parentTagIds=345,678`

        driver_activation_status : typing.Optional[GetHosEldEventsRequestDriverActivationStatus]
            If value is `deactivated`, only drivers that are deactivated will appear in the response. This parameter will default to `active` if not provided (fetching only active drivers).  Valid values: `active`, `deactivated`

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            The limit for how many objects will be in the response. Default and max for this value is 25 objects.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        HosEldEventsGetHosEldEventsResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_hos_eld_events(
            start_time="startTime",
            end_time="endTime",
        )
        """
        _response = self._raw_client.get_hos_eld_events(
            start_time=start_time,
            end_time=end_time,
            driver_ids=driver_ids,
            tag_ids=tag_ids,
            parent_tag_ids=parent_tag_ids,
            driver_activation_status=driver_activation_status,
            after=after,
            limit=limit,
            request_options=request_options,
        )
        return _response.data

    def get_trailer_stats_snapshot(
        self,
        *,
        types: str,
        tag_ids: typing.Optional[str] = None,
        parent_tag_ids: typing.Optional[str] = None,
        after: typing.Optional[str] = None,
        trailer_ids: typing.Optional[str] = None,
        time: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> TrailerStatsGetTrailerStatsSnapshotResponseBody:
        """
        Returns the last known stats of all trailers at the given `time`. If no `time` is specified, the current time is used.

         <b>Rate limit:</b> 25 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Trailer Statistics** under the Trailers category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        types : str
            The stat types you want this endpoint to return information on.

            You may list **up to 3** types using comma-separated format. For example: `types=gps,reeferAmbientAirTemperatureMilliC,gpsOdometerMeters`.

            * `gps`: GPS data including lat/long, heading, speed, and a reverse geocode address.
            * `gpsOdometerMeters`: Odometer reading provided by GPS calculations. You must provide a manual odometer reading before this value is updated. Manual odometer readings can be provided via the PATCH /fleet/trailers/{id} endpoint or through the [cloud dashboard](https://kb.samsara.com/hc/en-us/articles/115005273667-Editing-Odometer-Reading). Odometer readings wthat are manually set will update as GPS trip data is gathered.
            * `reeferAmbientAirTemperatureMilliC`: The ambient air temperature reading of the reefer in millidegree Celsius.
            * `reeferObdEngineSeconds`: The cumulative number of seconds the reefer has run according to onboard diagnostics. Only supported on reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone1`: The supply or discharge air temperature zone 1 in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone2`: The supply or discharge air temperature zone 2 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone3`: The supply or discharge air temperature zone 3 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferFuelPercent`: The fuel level of the reefer unit in percentage points (e.g. `99`, `50`, etc). Only supported on reefer solutions.
            * `carrierReeferState`: The overall state of the reefer (`Off`, `On`). Only supported on multizone Carrier reefer solutions.
            * `reeferStateZone1`: The state of the reefer in zone 1. For single zone reefers, this applies tot he single zone. Only supported on multizone reefer solutions.
            * `reeferStateZone2`: The state of the reefer in zone 2. Only supported on multizone reefer solutions.
            * `reeferStateZone3`: The state of the reefer in zone 3. Only supported on multizone reefer solutions.
            * `reeferRunMode`: The operational mode of the reefer (`Start/Stop`, `Continuous`)
            * `reeferAlarms`: Any alarms that are present on the reefer. Only supported on reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone1`: The return air temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone2`: The return air temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone3`: The return air temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone1`: The set point temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone2`: The set point temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone3`: The set point temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone1`: The door status in zone 1 of the reefer. For single zone reefers, this applies to the single zone.
            * `reeferDoorStateZone2`: The door status in zone 2 of the reefer. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone3`: The door status in zone 3 of the reefer. Only supported on multizone reefer solutions.

        tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of tag IDs. Example: `tagIds=1234,5678`

        parent_tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of parent tag IDs, for use by orgs with tag hierarchies. Specifying a parent tag will implicitly include all descendent tags of the parent tag. Example: `parentTagIds=345,678`

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        trailer_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of trailer IDs and externalIds. Example: `trailerIds=1234,5678,samsara.vin:1HGBH41JXMN109186`

        time : typing.Optional[str]
             A filter on the data that returns the last known data points with timestamps less than or equal to this value. Defaults to now if not provided. Must be a string in RFC 3339 Format. Millisecond precision and timezones are supported.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        TrailerStatsGetTrailerStatsSnapshotResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_trailer_stats_snapshot(
            types="types",
        )
        """
        _response = self._raw_client.get_trailer_stats_snapshot(
            types=types,
            tag_ids=tag_ids,
            parent_tag_ids=parent_tag_ids,
            after=after,
            trailer_ids=trailer_ids,
            time=time,
            request_options=request_options,
        )
        return _response.data

    def get_trailer_stats_feed(
        self,
        *,
        types: str,
        tag_ids: typing.Optional[str] = None,
        parent_tag_ids: typing.Optional[str] = None,
        after: typing.Optional[str] = None,
        trailer_ids: typing.Optional[str] = None,
        decorations: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> TrailerStatsGetTrailerStatsFeedResponseBody:
        """
        Follow a feed of trailer stats.

        The first call to this endpoint will provide the most recent stats for each trailer and an `endCursor`.

        Providing the `endCursor` value to the `after` query parameter will fetch all updates since the previous API call.

        If `hasNextPage` is false, no new data is immediately available. Please wait a minimum of 5 seconds before making a subsequent request.

         <b>Rate limit:</b> 25 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Trailer Statistics** under the Trailers category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        types : str
            The stat types you want this endpoint to return information on.

            You may list **up to 3** types using comma-separated format. For example: `types=gps,reeferAmbientAirTemperatureMilliC,gpsOdometerMeters`.

            * `gps`: GPS data including lat/long, heading, speed, and a reverse geocode address.
            * `gpsOdometerMeters`: Odometer reading provided by GPS calculations. You must provide a manual odometer reading before this value is updated. Manual odometer readings can be provided via the PATCH /fleet/trailers/{id} endpoint or through the [cloud dashboard](https://kb.samsara.com/hc/en-us/articles/115005273667-Editing-Odometer-Reading). Odometer readings wthat are manually set will update as GPS trip data is gathered.
            * `reeferAmbientAirTemperatureMilliC`: The ambient air temperature reading of the reefer in millidegree Celsius.
            * `reeferObdEngineSeconds`: The cumulative number of seconds the reefer has run according to onboard diagnostics. Only supported on reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone1`: The supply or discharge air temperature zone 1 in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone2`: The supply or discharge air temperature zone 2 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone3`: The supply or discharge air temperature zone 3 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferFuelPercent`: The fuel level of the reefer unit in percentage points (e.g. `99`, `50`, etc). Only supported on reefer solutions.
            * `carrierReeferState`: The overall state of the reefer (`Off`, `On`). Only supported on multizone Carrier reefer solutions.
            * `reeferStateZone1`: The state of the reefer in zone 1. For single zone reefers, this applies tot he single zone. Only supported on multizone reefer solutions.
            * `reeferStateZone2`: The state of the reefer in zone 2. Only supported on multizone reefer solutions.
            * `reeferStateZone3`: The state of the reefer in zone 3. Only supported on multizone reefer solutions.
            * `reeferRunMode`: The operational mode of the reefer (`Start/Stop`, `Continuous`)
            * `reeferAlarms`: Any alarms that are present on the reefer. Only supported on reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone1`: The return air temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone2`: The return air temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone3`: The return air temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone1`: The set point temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone2`: The set point temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone3`: The set point temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone1`: The door status in zone 1 of the reefer. For single zone reefers, this applies to the single zone.
            * `reeferDoorStateZone2`: The door status in zone 2 of the reefer. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone3`: The door status in zone 3 of the reefer. Only supported on multizone reefer solutions.

        tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of tag IDs. Example: `tagIds=1234,5678`

        parent_tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of parent tag IDs, for use by orgs with tag hierarchies. Specifying a parent tag will implicitly include all descendent tags of the parent tag. Example: `parentTagIds=345,678`

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        trailer_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of trailer IDs and externalIds. Example: `trailerIds=1234,5678,samsara.vin:1HGBH41JXMN109186`

        decorations : typing.Optional[str]
            Decorations add to the primary stats listed in the `types` parameter. For example, if you wish to know the trailer's location whenever the odometer updates, you may set `types=gpsOdometerMeters&decorations=gps`.

            You may list **up to 2** types using comma-separated format. If multiple stats are listed in the types parameter, the decorations will be added to each type. For example: `types=reeferStateZone1,reeferAmbientAirTemperatureMilliC,gpsOdometerMeters&decorations=gps` will list GPS decorations for each reeferStateZone1 reading, each reeferAmbientAirTemperatureMilliC reding, and gpsOdometerMeters reading.

            Note that decorations may significantly increase the response payload size.

            * `gps`: GPS data including lat/long, heading, speed, and a reverse geocode address.
            * `gpsOdometerMeters`: Odometer reading provided by GPS calculations. You must provide a manual odometer reading before this value is updated. Manual odometer readings can be provided via the PATCH /fleet/trailers/{id} endpoint or through the [cloud dashboard](https://kb.samsara.com/hc/en-us/articles/115005273667-Editing-Odometer-Reading). Odometer readings wthat are manually set will update as GPS trip data is gathered.
            * `reeferAmbientAirTemperatureMilliC`: The ambient air temperature reading of the reefer in millidegree Celsius.
            * `reeferObdEngineSeconds`: The cumulative number of seconds the reefer has run according to onboard diagnostics. Only supported on reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone1`: The supply or discharge air temperature zone 1 in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone2`: The supply or discharge air temperature zone 2 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone3`: The supply or discharge air temperature zone 3 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferFuelPercent`: The fuel level of the reefer unit in percentage points (e.g. `99`, `50`, etc). Only supported on reefer solutions.
            * `carrierReeferState`: The overall state of the reefer (`Off`, `On`). Only supported on multizone Carrier reefer solutions.
            * `reeferStateZone1`: The state of the reefer in zone 1. For single zone reefers, this applies tot he single zone. Only supported on multizone reefer solutions.
            * `reeferStateZone2`: The state of the reefer in zone 2. Only supported on multizone reefer solutions.
            * `reeferStateZone3`: The state of the reefer in zone 3. Only supported on multizone reefer solutions.
            * `reeferRunMode`: The operational mode of the reefer (`Start/Stop`, `Continuous`)
            * `reeferAlarms`: Any alarms that are present on the reefer. Only supported on reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone1`: The return air temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone2`: The return air temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone3`: The return air temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone1`: The set point temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone2`: The set point temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone3`: The set point temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone1`: The door status in zone 1 of the reefer. For single zone reefers, this applies to the single zone.
            * `reeferDoorStateZone2`: The door status in zone 2 of the reefer. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone3`: The door status in zone 3 of the reefer. Only supported on multizone reefer solutions.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        TrailerStatsGetTrailerStatsFeedResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_trailer_stats_feed(
            types="types",
        )
        """
        _response = self._raw_client.get_trailer_stats_feed(
            types=types,
            tag_ids=tag_ids,
            parent_tag_ids=parent_tag_ids,
            after=after,
            trailer_ids=trailer_ids,
            decorations=decorations,
            request_options=request_options,
        )
        return _response.data

    def get_trailer_stats_history(
        self,
        *,
        start_time: str,
        end_time: str,
        types: str,
        tag_ids: typing.Optional[str] = None,
        parent_tag_ids: typing.Optional[str] = None,
        after: typing.Optional[str] = None,
        trailer_ids: typing.Optional[str] = None,
        decorations: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> TrailerStatsGetTrailerStatsHistoryResponseBody:
        """
        Returns trailer stats during the given time range for all trailers. This can be optionally filtered by tags or specific trailer IDs.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Trailer Statistics** under the Trailers category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        start_time : str
             A start time in RFC 3339 format. Defaults to now if not provided. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        end_time : str
             An end time in RFC 3339 format. Defaults to now if not provided. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        types : str
            The stat types you want this endpoint to return information on.

            You may list **up to 3** types using comma-separated format. For example: `types=gps,reeferAmbientAirTemperatureMilliC,gpsOdometerMeters`.

            * `gps`: GPS data including lat/long, heading, speed, and a reverse geocode address.
            * `gpsOdometerMeters`: Odometer reading provided by GPS calculations. You must provide a manual odometer reading before this value is updated. Manual odometer readings can be provided via the PATCH /fleet/trailers/{id} endpoint or through the [cloud dashboard](https://kb.samsara.com/hc/en-us/articles/115005273667-Editing-Odometer-Reading). Odometer readings wthat are manually set will update as GPS trip data is gathered.
            * `reeferAmbientAirTemperatureMilliC`: The ambient air temperature reading of the reefer in millidegree Celsius.
            * `reeferObdEngineSeconds`: The cumulative number of seconds the reefer has run according to onboard diagnostics. Only supported on reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone1`: The supply or discharge air temperature zone 1 in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone2`: The supply or discharge air temperature zone 2 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone3`: The supply or discharge air temperature zone 3 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferFuelPercent`: The fuel level of the reefer unit in percentage points (e.g. `99`, `50`, etc). Only supported on reefer solutions.
            * `carrierReeferState`: The overall state of the reefer (`Off`, `On`). Only supported on multizone Carrier reefer solutions.
            * `reeferStateZone1`: The state of the reefer in zone 1. For single zone reefers, this applies tot he single zone. Only supported on multizone reefer solutions.
            * `reeferStateZone2`: The state of the reefer in zone 2. Only supported on multizone reefer solutions.
            * `reeferStateZone3`: The state of the reefer in zone 3. Only supported on multizone reefer solutions.
            * `reeferRunMode`: The operational mode of the reefer (`Start/Stop`, `Continuous`)
            * `reeferAlarms`: Any alarms that are present on the reefer. Only supported on reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone1`: The return air temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone2`: The return air temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone3`: The return air temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone1`: The set point temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone2`: The set point temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone3`: The set point temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone1`: The door status in zone 1 of the reefer. For single zone reefers, this applies to the single zone.
            * `reeferDoorStateZone2`: The door status in zone 2 of the reefer. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone3`: The door status in zone 3 of the reefer. Only supported on multizone reefer solutions.

        tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of tag IDs. Example: `tagIds=1234,5678`

        parent_tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of parent tag IDs, for use by orgs with tag hierarchies. Specifying a parent tag will implicitly include all descendent tags of the parent tag. Example: `parentTagIds=345,678`

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        trailer_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of trailer IDs and externalIds. Example: `trailerIds=1234,5678,samsara.vin:1HGBH41JXMN109186`

        decorations : typing.Optional[str]
            Decorations add to the primary stats listed in the `types` parameter. For example, if you wish to know the trailer's location whenever the odometer updates, you may set `types=gpsOdometerMeters&decorations=gps`.

            You may list **up to 2** types using comma-separated format. If multiple stats are listed in the types parameter, the decorations will be added to each type. For example: `types=reeferStateZone1,reeferAmbientAirTemperatureMilliC,gpsOdometerMeters&decorations=gps` will list GPS decorations for each reeferStateZone1 reading, each reeferAmbientAirTemperatureMilliC reding, and gpsOdometerMeters reading.

            Note that decorations may significantly increase the response payload size.

            * `gps`: GPS data including lat/long, heading, speed, and a reverse geocode address.
            * `gpsOdometerMeters`: Odometer reading provided by GPS calculations. You must provide a manual odometer reading before this value is updated. Manual odometer readings can be provided via the PATCH /fleet/trailers/{id} endpoint or through the [cloud dashboard](https://kb.samsara.com/hc/en-us/articles/115005273667-Editing-Odometer-Reading). Odometer readings wthat are manually set will update as GPS trip data is gathered.
            * `reeferAmbientAirTemperatureMilliC`: The ambient air temperature reading of the reefer in millidegree Celsius.
            * `reeferObdEngineSeconds`: The cumulative number of seconds the reefer has run according to onboard diagnostics. Only supported on reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone1`: The supply or discharge air temperature zone 1 in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone2`: The supply or discharge air temperature zone 2 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone3`: The supply or discharge air temperature zone 3 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferFuelPercent`: The fuel level of the reefer unit in percentage points (e.g. `99`, `50`, etc). Only supported on reefer solutions.
            * `carrierReeferState`: The overall state of the reefer (`Off`, `On`). Only supported on multizone Carrier reefer solutions.
            * `reeferStateZone1`: The state of the reefer in zone 1. For single zone reefers, this applies tot he single zone. Only supported on multizone reefer solutions.
            * `reeferStateZone2`: The state of the reefer in zone 2. Only supported on multizone reefer solutions.
            * `reeferStateZone3`: The state of the reefer in zone 3. Only supported on multizone reefer solutions.
            * `reeferRunMode`: The operational mode of the reefer (`Start/Stop`, `Continuous`)
            * `reeferAlarms`: Any alarms that are present on the reefer. Only supported on reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone1`: The return air temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone2`: The return air temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone3`: The return air temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone1`: The set point temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone2`: The set point temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone3`: The set point temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone1`: The door status in zone 1 of the reefer. For single zone reefers, this applies to the single zone.
            * `reeferDoorStateZone2`: The door status in zone 2 of the reefer. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone3`: The door status in zone 3 of the reefer. Only supported on multizone reefer solutions.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        TrailerStatsGetTrailerStatsHistoryResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_trailer_stats_history(
            start_time="startTime",
            end_time="endTime",
            types="types",
        )
        """
        _response = self._raw_client.get_trailer_stats_history(
            start_time=start_time,
            end_time=end_time,
            types=types,
            tag_ids=tag_ids,
            parent_tag_ids=parent_tag_ids,
            after=after,
            trailer_ids=trailer_ids,
            decorations=decorations,
            request_options=request_options,
        )
        return _response.data

    def update_engine_immobilizer_state(
        self,
        id: int,
        *,
        relay_states: typing.Sequence[UpdateEngineImmobilizerRelayStateRequestBodyRequestBody],
        request_options: typing.Optional[RequestOptions] = None,
    ) -> None:
        """
        Update the engine immobilizer state of a vehicle. This requires an engine immobilizer to be installed on the vehicle gateway.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Vehicle Immobilization** under the Vehicles category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : int
            Vehicle ID

        relay_states : typing.Sequence[UpdateEngineImmobilizerRelayStateRequestBodyRequestBody]
            A list of relay states. If a relay is omitted, its state won't be updated. If the list is empty, a 400 bad request status code will be returned. If there are multiple states for the same relay, a 400 bad request status code will be returned.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from samsara import (
            Samsara,
            UpdateEngineImmobilizerRelayStateRequestBodyRequestBody,
        )

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.update_engine_immobilizer_state(
            id=1000000,
            relay_states=[
                UpdateEngineImmobilizerRelayStateRequestBodyRequestBody(
                    id="relay1",
                    is_open=True,
                )
            ],
        )
        """
        _response = self._raw_client.update_engine_immobilizer_state(
            id, relay_states=relay_states, request_options=request_options
        )
        return _response.data

    def get_jobs(
        self,
        *,
        id: typing.Optional[str] = None,
        start_date: typing.Optional[str] = None,
        end_date: typing.Optional[str] = None,
        industrial_asset_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        fleet_device_ids: typing.Optional[typing.Union[int, typing.Sequence[int]]] = None,
        status: typing.Optional[GetJobsRequestStatus] = None,
        customer_name: typing.Optional[str] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> JobsGetJobsResponseBody:
        """
        Fetches jobs based on id/uuid or provided filters.

        To use this endpoint, select **Read Jobs** under the Equipment category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : typing.Optional[str]
            A jobId or uuid in STRING format. JobId must be prefixed with `jobId:`(Examples: `"8d218e6c-7a16-4f9f-90f7-cc1d93b9e596"`, `"jobId:98765"`).

        start_date : typing.Optional[str]
             A start time in RFC 3339 format. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        end_date : typing.Optional[str]
             An end time in RFC 3339 format. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        industrial_asset_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            IndustrialAssetId in STRING format. (Example: `"8d218e6c-7a16-4f9f-90f7-cc1d93b9e596"`).

        fleet_device_ids : typing.Optional[typing.Union[int, typing.Sequence[int]]]
            FleetDeviceId in INTEGER format. (Example: `123456`).

        status : typing.Optional[GetJobsRequestStatus]
            A job status in STRING format. Job statuses can be one of three (ignores case): `"active", "scheduled", "completed"`  Valid values: `active`, `scheduled`, `completed`

        customer_name : typing.Optional[str]
            Customer name to filter by

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        JobsGetJobsResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_jobs()
        """
        _response = self._raw_client.get_jobs(
            id=id,
            start_date=start_date,
            end_date=end_date,
            industrial_asset_ids=industrial_asset_ids,
            fleet_device_ids=fleet_device_ids,
            status=status,
            customer_name=customer_name,
            after=after,
            request_options=request_options,
        )
        return _response.data

    def create_job(
        self, *, job: PostJobObjectRequestBody, request_options: typing.Optional[RequestOptions] = None
    ) -> JobsCreateJobResponseBody:
        """
        Creates a new job and returns it.

        To use this endpoint, select **Write Jobs** under the Equipment category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        job : PostJobObjectRequestBody

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        JobsCreateJobResponseBody
            OK response.

        Examples
        --------
        from samsara import PostJobObjectRequestBody, Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.create_job(
            job=PostJobObjectRequestBody(
                end_date="2019-06-13T19:08:25Z",
                id="8d218e6c-7a16-4f9f-90f7-cc1d93b9e596",
                name="My Job Name",
                start_date="2019-06-13T19:08:25Z",
            ),
        )
        """
        _response = self._raw_client.create_job(job=job, request_options=request_options)
        return _response.data

    def delete_job(
        self, *, id: str, request_options: typing.Optional[RequestOptions] = None
    ) -> JobsDeleteJobResponseBody:
        """
        Deletes an existing job.

        To use this endpoint, select **Write Jobs** under the Equipment category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            A jobId or uuid in STRING format. JobId must be prefixed with `jobId:`(Examples: `"8d218e6c-7a16-4f9f-90f7-cc1d93b9e596"`, `"jobId:98765"`).

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        JobsDeleteJobResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.delete_job(
            id="id",
        )
        """
        _response = self._raw_client.delete_job(id=id, request_options=request_options)
        return _response.data

    def patch_job(
        self,
        *,
        id: str,
        job: PatchJobObjectRequestBody,
        keep_history: typing.Optional[bool] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> JobsPatchJobResponseBody:
        """
        Patches an existing job and returns it.

        To use this endpoint, select **Write Jobs** under the Equipment category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            A jobId or uuid in STRING format. JobId must be prefixed with `jobId:`(Examples: `"8d218e6c-7a16-4f9f-90f7-cc1d93b9e596"`, `"jobId:98765"`).

        job : PatchJobObjectRequestBody

        keep_history : typing.Optional[bool]
            Defaults to true if user does not want to overwrite entire history for an active job (irrelevant for scheduled/completed jobs)

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        JobsPatchJobResponseBody
            OK response.

        Examples
        --------
        from samsara import PatchJobObjectRequestBody, Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.patch_job(
            id="id",
            job=PatchJobObjectRequestBody(),
        )
        """
        _response = self._raw_client.patch_job(
            id=id, job=job, keep_history=keep_history, request_options=request_options
        )
        return _response.data

    def get_detections(
        self,
        *,
        start_time: str,
        driver_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        asset_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        detection_behavior_labels: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        inbox_filter_reason: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        inbox_event: typing.Optional[bool] = None,
        in_cab_alert_played: typing.Optional[bool] = None,
        tag_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        include_asset: typing.Optional[bool] = None,
        include_driver: typing.Optional[bool] = None,
        end_time: typing.Optional[str] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> DetectionLogGetDetectionsResponseBody:
        """
        This endpoint will return all detections detected by in-vehicle assets and associated metadata. To get core endpoint data, select View Safety Detection Log under the Safety & Cameras category when creating or editing an API token.

        If you include an endTime, the endpoint will return data up until that point. If you don’t include an endTime, you can continue to poll the API real-time with the pagination cursor that gets returned on every call. Results are paginated.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Detection Log** under the Safety & Cameras category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        start_time : str
            Required RFC 3339 timestamp that indicates when to begin receiving data. Value is compared against `updatedAtTime`. (Example: 2024-04-16T19:08:25Z)

        driver_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional string of comma separated driver IDs. If driver ID is present, events for the specified driver(s) will be returned. Max for this value is 2000 objects. (Example: 281474982859091,281471982957527)

        asset_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional string of comma separated asset IDs. If asset ID is present, events for the specified asset(s) will be returned. Max for this value is 2000 objects. (Example: 281474982859091,281471982957527)

        detection_behavior_labels : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional string of comma separated labels to filter behavior labels. Uses OR semantics for filtering. An empty list allows all values. Valid values: `acceleration`, `braking`, `crash`, `drowsy`, `eatingDrinking`, `edgeRailroadCrossingViolation`, `followingDistance`, `forwardCollisionWarning`, `genericDistraction`, `harshTurn`, `heavySpeeding`, `laneDeparture`, `lightSpeeding`, `maxSpeed`, `mobileUsage`, `moderateSpeeding`, `noSeatbelt`, `obstructedCamera`, `passenger`, `policyViolationMask`, `ranRedLight`, `rearCollisionWarning`, `rollingStop`, `rolloverProtection`, `severeSpeeding`, `smoking`, `speeding`, `unsafeParking`, `vehicleInBlindSpotWarning`, `vulnerableRoadUserCollisionWarning`, `yawControl`. (Example: rollingStop,obstructedCamera,noSeatbelt)

        inbox_filter_reason : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional string of comma separated reasons to filter detections. Uses OR semantics for filtering. An empty list allows all values. Valid values: `overDailyLimit`, `overHourlyLimit`, `overTripLimit`, `belowConfidenceThreshold`, `belowSeverityThreshold`, `overEventRateLimit`, `geofenceFilter`, `belowNudgeThreshold`, `belowSpeedThreshold`, `nighttimeFilter`, `speedingFilter`, `inCabAlertOnly`, `unknown`. (Example: overDailyLimit,overHourlyLimit,belowConfidenceThreshold)

        inbox_event : typing.Optional[bool]
            Indicates whether or not to return detections with an associated Safety Inbox event. An empty entry allows all values. (Example: true)

        in_cab_alert_played : typing.Optional[bool]
            Indicates whether or not to return detections where in-cab alert played. An empty entry allows all values. (Example: true)

        tag_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            An optional filter on the data based on this comma-separated list of tag IDs. The filtering is OR inclusive for asset and driver tags. (Example: 1234,5678)

        include_asset : typing.Optional[bool]
            Indicates whether or not to return expanded data for asset objects. (Example: true)

        include_driver : typing.Optional[bool]
            Indicates whether or not to return expanded data for driver objects. (Example: true)

        end_time : typing.Optional[str]
            Optional RFC 3339 timestamp. If not provided then the endpoint behaves as an unending feed of changes. If endTime is set the same as startTime, the most recent data point before that time will be returned per asset. Value is compared against `updatedAtTime`. (Example: 2024-04-23T19:08:25Z)

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        DetectionLogGetDetectionsResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_detections(
            start_time="startTime",
        )
        """
        _response = self._raw_client.get_detections(
            start_time=start_time,
            driver_ids=driver_ids,
            asset_ids=asset_ids,
            detection_behavior_labels=detection_behavior_labels,
            inbox_filter_reason=inbox_filter_reason,
            inbox_event=inbox_event,
            in_cab_alert_played=in_cab_alert_played,
            tag_ids=tag_ids,
            include_asset=include_asset,
            include_driver=include_driver,
            end_time=end_time,
            after=after,
            request_options=request_options,
        )
        return _response.data

    def get_devices(
        self,
        *,
        models: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        health_statuses: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        include_health: typing.Optional[bool] = None,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        include_tags: typing.Optional[bool] = None,
        tag_ids: typing.Optional[str] = None,
        parent_tag_ids: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> DevicesGetDevicesResponseBody:
        """
        Returns all installed cameras (CM3x), vehicle gateways (VGs), and asset gateways (AGs) and their health information within an organization.

        **Beta:** This endpoint is in beta and is likely to change before being broadly available. Reach out to your Samsara Representative to have Devices API enabled for your organization.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Devices** under the Devices category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        models : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional string of comma separated device models. Valid values: `CM31`, `CM32`, `CM33`, `CM34`, `VG34`, `VG34M`, `VG34EU`, `VG34FN`, `VG54NA`, `VG54EU`, `VG55NA`, `VG55EU`, `AG24`, `AG24EU`, `AG26`, `AG26EU`, `AG45`, `AG45EU`, `AG46`, `AG46EU`, `AG46P`, `AG46PEU`, `AG51`, `AG51EU`, `AG52`, `AG52EU`, `AG53`, `AG53EU`

        health_statuses : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional string of comma separated device health statuses. Valid values: `healthy`, `needsAttention`, `needsReplacement`, `dataPending`.

        include_health : typing.Optional[bool]
            Optional boolean to control whether device health information is returned in the response. Defaults to false.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            The limit for how many objects will be in the response. Default and max for this value is 100 objects.

        include_tags : typing.Optional[bool]
            Optional boolean to control whether tags are returned in the response. Defaults to false.

        tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of tag IDs. Example: `tagIds=1234,5678`

        parent_tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of parent tag IDs, for use by orgs with tag hierarchies. Specifying a parent tag will implicitly include all descendent tags of the parent tag. Example: `parentTagIds=345,678`

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        DevicesGetDevicesResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_devices()
        """
        _response = self._raw_client.get_devices(
            models=models,
            health_statuses=health_statuses,
            include_health=include_health,
            after=after,
            limit=limit,
            include_tags=include_tags,
            tag_ids=tag_ids,
            parent_tag_ids=parent_tag_ids,
            request_options=request_options,
        )
        return _response.data

    def get_engine_immobilizer_states(
        self,
        *,
        vehicle_ids: str,
        start_time: str,
        end_time: typing.Optional[str] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> EngineImmobilizerGetEngineImmobilizerStatesResponseBody:
        """
        Get the engine immobilizer states of the queried vehicles. If a vehicle has never had an engine immobilizer connected, there won't be any state returned for that vehicle.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Vehicle Immobilization** under the Vehicles category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        vehicle_ids : str
             A filter on the data based on this comma-separated list of vehicle IDs and externalIds. Example: `vehicleIds=1234,5678,samsara.vin:1HGBH41JXMN109186`

        start_time : str
            A start time in RFC 3339 format. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        end_time : typing.Optional[str]
             An end time in RFC 3339 format. Defaults to now if not provided. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        EngineImmobilizerGetEngineImmobilizerStatesResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_engine_immobilizer_states(
            vehicle_ids="vehicleIds",
            start_time="startTime",
        )
        """
        _response = self._raw_client.get_engine_immobilizer_states(
            vehicle_ids=vehicle_ids,
            start_time=start_time,
            end_time=end_time,
            after=after,
            request_options=request_options,
        )
        return _response.data

    def start_function_run(
        self,
        name: str,
        *,
        params_override: FunctionsStartFunctionRunRequestBodyParamsOverride,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> FunctionsStartFunctionRunResponseBody:
        """
        Start an asynchronous run for the specified Function. This endpoint allows you to override parameters available at runtime.

         <b>Rate limit:</b> 2 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Functions** under the Closed Beta category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        name : str
            The name of the Function to run.

        params_override : FunctionsStartFunctionRunRequestBodyParamsOverride
            Parameter overrides for the Function execution. Can be an empty object but must be provided.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        FunctionsStartFunctionRunResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara
        from samsara.beta_ap_is import (
            FunctionsStartFunctionRunRequestBodyParamsOverride,
        )

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.start_function_run(
            name="name",
            params_override=FunctionsStartFunctionRunRequestBodyParamsOverride(),
        )
        """
        _response = self._raw_client.start_function_run(
            name, params_override=params_override, request_options=request_options
        )
        return _response.data

    def update_shipping_docs(
        self,
        *,
        hos_date: str,
        driver_id: str,
        shipping_docs: str,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> HosDailyLogsUpdateShippingDocsResponseBody:
        """
        Update the shippingDocs field of an existing assignment.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write ELD Hours of Service (US)** under the Compliance category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        hos_date : str
            A start date in yyyy-mm-dd format. Required.

        driver_id : str
            ID of the driver for whom the duty status is being set.

        shipping_docs : str
            ShippingDocs associated with the driver for the day.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        HosDailyLogsUpdateShippingDocsResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.update_shipping_docs(
            hos_date="hosDate",
            driver_id="driverID",
            shipping_docs="ShippingID1, ShippingID2",
        )
        """
        _response = self._raw_client.update_shipping_docs(
            hos_date=hos_date, driver_id=driver_id, shipping_docs=shipping_docs, request_options=request_options
        )
        return _response.data

    def list_hub_custom_properties(
        self,
        *,
        hub_id: str,
        custom_property_ids: typing.Optional[str] = None,
        custom_property_names: typing.Optional[str] = None,
        start_time: typing.Optional[dt.datetime] = None,
        end_time: typing.Optional[dt.datetime] = None,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> HubCustomPropertiesListHubCustomPropertiesResponseBody:
        """
        Retrieve custom properties for a specific hub.

        **Beta:** This endpoint is in beta and is likely to change before being broadly available. Reach out to your Samsara Representative to have RoutePlanning APIs enabled for your organization.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Routes** under the Driver Workflow category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        hub_id : str
            The hub identifier

        custom_property_ids : typing.Optional[str]
            A comma-separated list of custom property IDs that can be used for filtering.

        custom_property_names : typing.Optional[str]
            A comma-separated list of custom property names that can be used for filtering.

        start_time : typing.Optional[dt.datetime]
            Time filter of when the custom property was updated, in RFC 3339 format

        end_time : typing.Optional[dt.datetime]
            Time filter of when the custom property was updated, in RFC 3339 format

        after : typing.Optional[str]
            If specified, should be the endCursor from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            Maximum number of objects to return. Default and maximum is 100

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        HubCustomPropertiesListHubCustomPropertiesResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.list_hub_custom_properties(
            hub_id="hubId",
        )
        """
        _response = self._raw_client.list_hub_custom_properties(
            hub_id=hub_id,
            custom_property_ids=custom_property_ids,
            custom_property_names=custom_property_names,
            start_time=start_time,
            end_time=end_time,
            after=after,
            limit=limit,
            request_options=request_options,
        )
        return _response.data

    def create_plan_orders(
        self,
        *,
        data: typing.Sequence[OrderInputObjectRequestBody],
        enable_update_existing_orders: typing.Optional[bool] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> PlanOrdersCreatePlanOrdersResponseBody:
        """
        Create one or more orders (bulk upsert). Pass an array of order objects; any object whose customerOrderId already exists will be updated, otherwise a new order is created. Functions can return JSON arrays in this Order POST format. Orders are initially created at the plan level but will migrate to hub-level entities, with planId becoming optional in future versions.

        **Beta:** This endpoint is in beta and is likely to change before being broadly available. Reach out to your Samsara Representative to have RoutePlanning APIs enabled for your organization.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Routes** under the Driver Workflow category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        data : typing.Sequence[OrderInputObjectRequestBody]
            An array of order objects to be created or updated

        enable_update_existing_orders : typing.Optional[bool]
            Enable update of existing orders if an order with the same customerOrderId exists. The input must match the same quantity dimensions as the existing order. If not provided, requests will fail if an order's customerOrderId already exists.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        PlanOrdersCreatePlanOrdersResponseBody
            OK response.

        Examples
        --------
        from samsara import OrderInputObjectRequestBody, Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.create_plan_orders(
            data=[
                OrderInputObjectRequestBody(
                    customer_order_id="ORDER-2024-001",
                    hub_id="550e8400-e29b-41d4-a716-446655440000",
                    plan_id="650e8400-e29b-41d4-a716-446655440023",
                )
            ],
        )
        """
        _response = self._raw_client.create_plan_orders(
            data=data, enable_update_existing_orders=enable_update_existing_orders, request_options=request_options
        )
        return _response.data

    def get_qualification_records(
        self,
        *,
        ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> QualificationsGetQualificationRecordsResponseBody:
        """
        Returns qualification records for the specified list of IDs.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            A comma-separated list containing up to 100 qualification record IDs to filter on. This can either be the Samsara-specified ID, or an external ID. External IDs are customer specified key-value pairs created in the POST or PATCH requests of this resource. To specify an external ID as part of a query parameter, use the following format: key:value.

        include_external_ids : typing.Optional[bool]
            If true, externalIds for qualification record and for the owner entity are returned.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        QualificationsGetQualificationRecordsResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_qualification_records()
        """
        _response = self._raw_client.get_qualification_records(
            ids=ids, include_external_ids=include_external_ids, request_options=request_options
        )
        return _response.data

    def post_qualification_record(
        self,
        *,
        issue_date: dt.datetime,
        owner: QualificationOwnerRequestObjectRequestBody,
        qualification_type: QualificationTypeRequestObjectRequestBody,
        expiration_date: typing.Optional[dt.datetime] = OMIT,
        external_ids: typing.Optional[typing.Dict[str, str]] = OMIT,
        fields: typing.Optional[typing.Sequence[QualificationRecordRequestFieldInputObjectRequestBody]] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> QualificationsPostQualificationRecordResponseBody:
        """
        Creates a new qualification record.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        issue_date : dt.datetime
            Issue/effective date. UTC timestamp in RFC 3339 format.

        owner : QualificationOwnerRequestObjectRequestBody

        qualification_type : QualificationTypeRequestObjectRequestBody

        expiration_date : typing.Optional[dt.datetime]
            Expiration date. UTC timestamp in RFC 3339 format.

        external_ids : typing.Optional[typing.Dict[str, str]]
            A map of external ids

        fields : typing.Optional[typing.Sequence[QualificationRecordRequestFieldInputObjectRequestBody]]
            Other custom fields in a qualification record.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        QualificationsPostQualificationRecordResponseBody
            Created response.

        Examples
        --------
        import datetime

        from samsara import (
            QualificationOwnerRequestObjectRequestBody,
            QualificationRecordRequestFieldInputObjectRequestBody,
            QualificationTypeRequestObjectRequestBody,
            Samsara,
        )

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.post_qualification_record(
            fields=[
                QualificationRecordRequestFieldInputObjectRequestBody(
                    id="9814a1fa-f0c6-408b-bf85-51dc3bc71ac7",
                    type="number",
                )
            ],
            issue_date=datetime.datetime.fromisoformat(
                "2025-08-27 10:20:30+00:00",
            ),
            owner=QualificationOwnerRequestObjectRequestBody(
                entity_type="worker",
                id="281474",
            ),
            qualification_type=QualificationTypeRequestObjectRequestBody(
                id="9814a1fa-f0c6-408b-bf85-51dc3bc71ac7",
            ),
        )
        """
        _response = self._raw_client.post_qualification_record(
            issue_date=issue_date,
            owner=owner,
            qualification_type=qualification_type,
            expiration_date=expiration_date,
            external_ids=external_ids,
            fields=fields,
            request_options=request_options,
        )
        return _response.data

    def delete_qualification_record(self, *, id: str, request_options: typing.Optional[RequestOptions] = None) -> None:
        """
        Deletes an existing qualification record.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            ID of the qualification record to delete.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.delete_qualification_record(
            id="9814a1fa-f0c6-408b-bf85-51dc3bc71ac7",
        )
        """
        _response = self._raw_client.delete_qualification_record(id=id, request_options=request_options)
        return _response.data

    def patch_qualification_record(
        self,
        *,
        id: str,
        expiration_date: typing.Optional[dt.datetime] = OMIT,
        external_ids: typing.Optional[typing.Dict[str, str]] = OMIT,
        fields: typing.Optional[typing.Sequence[QualificationRecordRequestFieldInputObjectRequestBody]] = OMIT,
        issue_date: typing.Optional[dt.datetime] = OMIT,
        owner: typing.Optional[QualificationOwnerRequestObjectRequestBody] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> QualificationsPatchQualificationRecordResponseBody:
        """
        Updates an existing qualification record.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            ID of the qualification record to update.

        expiration_date : typing.Optional[dt.datetime]
            Expiration date. UTC timestamp in RFC 3339 format. Set to '1970-01-01T00:00:00Z' to clear existing expiration date.

        external_ids : typing.Optional[typing.Dict[str, str]]
            A map of external ids

        fields : typing.Optional[typing.Sequence[QualificationRecordRequestFieldInputObjectRequestBody]]
            Other custom fields in a qualification record. Only set fields that needs to be updated.

        issue_date : typing.Optional[dt.datetime]
            Issue/effective date. UTC timestamp in RFC 3339 format.

        owner : typing.Optional[QualificationOwnerRequestObjectRequestBody]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        QualificationsPatchQualificationRecordResponseBody
            OK response.

        Examples
        --------
        import datetime

        from samsara import QualificationOwnerRequestObjectRequestBody, Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.patch_qualification_record(
            id="9814a1fa-f0c6-408b-bf85-51dc3bc71ac7",
            issue_date=datetime.datetime.fromisoformat(
                "2025-08-27 10:20:30+00:00",
            ),
            owner=QualificationOwnerRequestObjectRequestBody(
                entity_type="worker",
                id="281474",
            ),
        )
        """
        _response = self._raw_client.patch_qualification_record(
            id=id,
            expiration_date=expiration_date,
            external_ids=external_ids,
            fields=fields,
            issue_date=issue_date,
            owner=owner,
            request_options=request_options,
        )
        return _response.data

    def archive_qualification_record(self, *, id: str, request_options: typing.Optional[RequestOptions] = None) -> None:
        """
        Archives an existing qualification record.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            ID of the qualification record to archive.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.archive_qualification_record(
            id="9814a1fa-f0c6-408b-bf85-51dc3bc71ac7",
        )
        """
        _response = self._raw_client.archive_qualification_record(id=id, request_options=request_options)
        return _response.data

    def get_qualification_records_stream(
        self,
        *,
        entity_type: GetQualificationRecordsStreamRequestEntityType,
        start_time: dt.datetime,
        end_time: typing.Optional[dt.datetime] = None,
        after: typing.Optional[str] = None,
        qualification_type_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        owner_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        include_deleted: typing.Optional[bool] = None,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> QualificationsGetQualificationRecordsStreamResponseBody:
        """
        Returns all qualification records that have been created or modified for your organization based on the time parameters passed in. Results are paginated and are sorted by last modified date. If you include an endTime, the endpoint will return data up until that point (exclusive). If you don't include an endTime, the API will continue to poll with the pagination cursor that gets returned on every call. The hasNextPage response value will be true if there is no endTime specified and endCursor is nonempty.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        entity_type : GetQualificationRecordsStreamRequestEntityType
            String of entity type.  Valid values: `worker`, `asset`

        start_time : dt.datetime
            A start time in RFC 3339 format. Millisecond precision and timezones are supported. Examples: '2019-06-13T19:08:25Z' (basic UTC), '2019-06-13T19:08:25.455Z' (with milliseconds), '2015-09-15T14:00:12-04:00' (with timezone).

        end_time : typing.Optional[dt.datetime]
            An end time in RFC 3339 format. Optional and defaults to now if not provided. Millisecond precision and timezones are supported. Examples: '2019-06-13T19:08:25Z' (basic UTC), '2019-06-13T19:08:25.455Z' (with milliseconds), '2015-09-15T14:00:12-04:00' (with timezone).

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        qualification_type_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional comma-separated list containing up to 100 qualification type IDs to filter on.

        owner_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional comma-separated list of unique Samsara IDs of workers (if "entityType" is "worker") or assets (if "entityType" is "asset") to filter on. Max value for this field is 100 objects.

        include_deleted : typing.Optional[bool]
            If true, deleted qualification records are returned.

        include_external_ids : typing.Optional[bool]
            If true, externalIds for qualification record and for the owner entity are returned.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        QualificationsGetQualificationRecordsStreamResponseBody
            OK response.

        Examples
        --------
        import datetime

        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_qualification_records_stream(
            entity_type="worker",
            start_time=datetime.datetime.fromisoformat(
                "2024-01-15 09:30:00+00:00",
            ),
        )
        """
        _response = self._raw_client.get_qualification_records_stream(
            entity_type=entity_type,
            start_time=start_time,
            end_time=end_time,
            after=after,
            qualification_type_ids=qualification_type_ids,
            owner_ids=owner_ids,
            include_deleted=include_deleted,
            include_external_ids=include_external_ids,
            request_options=request_options,
        )
        return _response.data

    def unarchive_qualification_record(
        self, *, id: str, request_options: typing.Optional[RequestOptions] = None
    ) -> None:
        """
        Unarchives an existing qualification record.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            ID of the qualification record to unarchive.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.unarchive_qualification_record(
            id="9814a1fa-f0c6-408b-bf85-51dc3bc71ac7",
        )
        """
        _response = self._raw_client.unarchive_qualification_record(id=id, request_options=request_options)
        return _response.data

    def get_qualification_types(
        self,
        *,
        entity_type: GetQualificationTypesRequestEntityType,
        ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> QualificationsGetQualificationTypesResponseBody:
        """
        Returns a list of qualification types for the specified list of IDs. If no IDs are provided, all qualification types will be returned.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        entity_type : GetQualificationTypesRequestEntityType
            String of entity type.  Valid values: `worker`, `asset`

        ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional comma-separated list containing up to 100 qualification type IDs to filter on. If no IDs are provided, all qualification types will be returned.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        QualificationsGetQualificationTypesResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_qualification_types(
            entity_type="worker",
        )
        """
        _response = self._raw_client.get_qualification_types(
            entity_type=entity_type, ids=ids, after=after, request_options=request_options
        )
        return _response.data

    def post_readings(
        self,
        *,
        data: typing.Sequence[ReadingDatapointRequestBody],
        request_options: typing.Optional[RequestOptions] = None,
    ) -> None:
        """
        Ingest new readings. This endpoint allows the ingestion of batches of readings.

        Ingesting readings is only supported for assets created using the POST /assets API endpoint with readingsIngestionEnabled set to true. To see a full list of readings available for ingestion use the GET readings definitions API. When ingesting location data, the readingID 'location' must be used and the value object must contain at least the following fields: 'speed', 'latitude', 'longitude'.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Readings** under the Closed Beta category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        data : typing.Sequence[ReadingDatapointRequestBody]
            An array of readings data points to create.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from samsara import ReadingDatapointRequestBody, Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.post_readings(
            data=[
                ReadingDatapointRequestBody(
                    entity_id="123451234512345",
                    entity_type="asset",
                    happened_at_time="2023-10-27T10:00:00Z",
                    reading_id="airInletPressure",
                    value={"key": "value"},
                )
            ],
        )
        """
        _response = self._raw_client.post_readings(data=data, request_options=request_options)
        return _response.data

    def list_readings_definitions(
        self,
        *,
        after: typing.Optional[str] = None,
        ids: typing.Optional[str] = None,
        entity_types: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReadingsListReadingsDefinitionsResponseBody:
        """
        An introspection endpoint for discovering the set of readings including their name, description, data type, unit, and other metadata.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Readings** under the Closed Beta category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        ids : typing.Optional[str]
            A String of comma separated reading IDs. Include up to 50 readings IDs. If not set, all readings are returned.

        entity_types : typing.Optional[str]
            A list of entity type to return readings for. (Examples: asset, sensor)

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReadingsListReadingsDefinitionsResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.list_readings_definitions()
        """
        _response = self._raw_client.list_readings_definitions(
            after=after, ids=ids, entity_types=entity_types, request_options=request_options
        )
        return _response.data

    def get_readings_history(
        self,
        *,
        reading_id: str,
        entity_type: str,
        after: typing.Optional[str] = None,
        entity_ids: typing.Optional[str] = None,
        external_ids: typing.Optional[str] = None,
        start_time: typing.Optional[str] = None,
        end_time: typing.Optional[str] = None,
        feed: typing.Optional[bool] = None,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReadingsGetReadingsHistoryResponseBody:
        """
        Get the values of a reading for a set of entities within the specified time range. Returns a paginated response with data for the specified resource IDs where startTime <= happenedAtTime < endTime. End time of null implies endTime is infinite and all known readings are returned.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Readings** under the Closed Beta category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        reading_id : str
            The reading ID to retrieve data for. Use /readings/definitions endpoint to get a list of valid reading IDs. (Examples: engineRpm,fuelLevel)

            Available reading IDs (by category):


            <details>
            <summary><strong>diagnostic</strong></summary>

            * `airInletPressure` (Air Inlet Pressure): Air inlet pressure. (kilopascal)
            * `airTemp` (Air Inlet (Ambient Air) Temp): Air inlet (ambient air) temperature. (celsius)
            * `altitude` (Altitude): The altitude of the asset (meter)
            * `altitudeAccuracy` (Altitude Uncertainty): The uncertainty of the asset's GPS-based altitude. (meter)
            * `assetStatus` (Status): Combined movement and equipment status derived from location & Digio events. (values: movementStart | movementEnd | stopped | none | equipmentOn | equipmentOff)
            * `averageACCurrent` (Average AC Current): Average AC current in amperes. (ampere)
            * `averageACFrequency` (Average AC Frequency): Average AC frequency in Hertz. (hertz)
            * `averageLineToLineACRMSVoltage` (Average Line-to-Line Voltage): Average RMS voltage between AC lines in volts. (volt)
            * `averageLineToNeutralACRMSVoltage` (Average Line-to-Neutral Voltage): Average RMS voltage from AC line to neutral in volts. (volt)
            * `barometerPressure` (Barometric Pressure): Atmospheric pressure as measured by the barometer. (kilopascal)
            * `batteryPotentialSwitched` (Battery Potential (Switched)): Switched battery potential in volts. (volt)
            * `batteryVoltage` (Battery Voltage): Voltage of the asset's battery. (volt)
            * `boostPressureEngineTurbocharger1` (Engine Turbocharger 1 Boost Pressure): Represents the boost pressure for engine turbocharger 1. (kilopascal)
            * `boostPressurePa` (Boost Pressure): Represents the boost pressure. (kilopascal)
            * `boostPressureTurbocharger2` (Boost Pressure (Turbocharger 2)): Boost pressure from the second turbocharger in kPa. (kilopascal)
            * `canBusType` (CAN Bus Status): Indicates whether the CAN Bus system is active or provides an invalid reading. (values: invalid | active)
            * `checkEngineLightJ1939Emissions` (Check Engine Light (J1939) - Emissions): Indicates whether the J1939 check engine light emissions indicator is active or inactive. (values: off | on)
            * `checkEngineLightJ1939Protect` (Check Engine Light (J1939) - Protect): Indicates whether the J1939 check engine light protect indicator is active or inactive. (values: off | on)
            * `checkEngineLightJ1939Stop` (Check Engine Light (J1939) - Stop): Indicates whether the J1939 check engine light stop indicator is active or inactive. (values: off | on)
            * `checkEngineLightJ1939Warning` (Check Engine Light (J1939) - Warning): Indicates whether the J1939 check engine light warning indicator is active or inactive. (values: off | on)
            * `checkEngineLightPassenger` (Check Engine Light (Passenger)): Indicates whether the passenger check engine light indicator is active or inactive. (values: off | on)
            * `coolantTemp` (Engine Coolant Temp): Represents the engine coolant temperature. (celsius)
            * `defLevel` (DEF Level): Represents the DEF (Diesel Exhaust Fluid) level percentage. (percent)
            * `derivedFuelConsumed` (Lifetime Fuel Consumed (Samsara)): Samsara-maintained fuel consumption since the device was firstinstalled. (liter)
            * `deviceOrientation` (Device Orientation): Indicates orientation of the device. (values: invalid | unknown | topDown | bottomDown | leftDown | rightDown | backDown | frontDown)
            * `digioInput1` (Digital IO #1): Represents the state of digital IO #1. (values: off | on)
            * `dpfLampStatus` (DPF Lamp Status): Status of the Diesel Particulate Filter warning lamp. (values: off | on | blinking)
            * `dpfSootLoadPercent` (DPF Soot Load): Diesel Particulate Filter soot load percentage. (percent)
            * `ecuHistoryTotalRunTime` (ECU Total Run Time): Total engine run time from ECU in seconds. (second)
            * `engineHours` (Engine Hours (ECU)): Represents the total engine runtime in hours as reported by the ECU. (second)
            * `engineHoursDigioBased` (Engine Hours (Synthetic - Aux input)): Represents the synthetic total engine runtime in hours based on auxiliary input. (millisecond)
            * `engineHoursEngineStateBased` (Engine Hours (Synthetic)): Represents the synthetic total engine runtime in hours based on engine state. (millisecond)
            * `engineIntakeAirTemp` (Engine Intake Air Temperature): Represents the engine intake air temperature. (celsius)
            * `engineLoadPercent` (Engine Load): Engine load percentage. (percent)
            * `engineState` (Engine State): Indicates the current state of the engine, such as running, stopped. (values: off | running | idling)
            * `ev24VoltDcDcInverterCurrent` (EV 24V DC/DC Inverter Current): Current from the 24V DC-DC inverter in amperes. (ampere)
            * `evAverageCellTemperature` (EV Average Cell Temperature): Average temperature of EV battery cells in degrees Celsius. (celsius)
            * `evChargingErrorStatus` (EV Charging Error Status): Indicates if the EV charging system has an error. (values: noError | batteryTooHotOrCold | vehicleNotInPark | connectorLockFault | chargingSystemFault | chargingCurrentDifferential | chargingVoltageOutOfRange | chargingSystemNotCompatible | noDataUndeterminedStatus | notAvailable | unknownError)
            * `evHighCapacityBatteryCurrent` (EV High Capacity Battery Current): Current from the high capacity EV battery in amperes. (ampere)
            * `evHighCapacityBatteryVoltage` (High Capacity EV Battery Voltage): Represents the voltage of the high capacity EV battery. (volt)
            * `evMaxAllowedStateOfChargePercent` (EV Max Allowed State of Charge): Maximum allowed state of charge percentage. (percent)
            * `evMaxCellTemperature` (EV Max Cell Temperature): Maximum temperature of EV battery cells in degrees Celsius. (celsius)
            * `evMinAllowedStateOfChargePercent` (EV Min Allowed State of Charge): Minimum allowed state of charge percentage. (percent)
            * `evMinCellTemperature` (EV Min Cell Temperature): Minimum temperature of EV battery cells in degrees Celsius. (celsius)
            * `exhaustGasPressure` (Exhaust Gas Pressure): Represents the exhaust gas pressure. (kilopascal)
            * `fuelConsumptionRate` (Fuel Consumption Rate): The rate at which an asset uses fuel (litersperhour)
            * `fuelLevelPerc` (Fuel Level): Percentage of fuel remaining in the tank. (percent)
            * `fuelSource` (Fuel Source): Type of fuel used by the asset. (values: gasoline | diesel)
            * `geoCoordinates` (Geo Coordinates): GPS coordinates (latitude and longitude) of the asset's location.
            * `gpsSpeed` (GPS Speed): Asset speed measured by the gateway's GPS receiver. (meterspersec)
            * `ignitionStatus` (Ignitions Status): Indicates the current ignition status as a voltage (values: off | on)
            * `latitude` (Latitude): Latitude coordinate of the asset's location. (decimaldegrees)
            * `lifetimeFuelConsumed` (Lifetime Fuel Consumed): Represents the vehicle maintained lifetime fuel consumption as reported by the vehicle. (liter)
            * `location` (Location): Represents the current address of the asset.
            * `longitude` (Longitude): Longitude coordinate of the asset's location. (decimaldegrees)
            * `mnfldTemp` (Intake Manifold Temp): Represents the intake manifold temperature. (celsius)
            * `ngFuelPressure` (NG Fuel Pressure): Represents the natural gas fuel pressure. (kilopascal)
            * `odometerEcu` (Odometer (ECU)): Represents the total distance traveled as recorded by the ECU. (meter)
            * `odometerGps` (Odometer (GPS)): Represents the total distance traveled as determined by GPS. (meter)
            * `oilPressure` (Engine Oil Pressure): Represents the oil pressure in the engine. (kilopascal)
            * `phaseAACFrequency` (Phase A AC Frequency): AC frequency for Phase A in Hertz. (hertz)
            * `phaseAAmpsRms` (Phase A Current (RMS)): RMS current for Phase A in amperes. (ampere)
            * `phaseALLVolts` (Phase A Line-to-Line Voltage): Line-to-line voltage for Phase A in volts. (volt)
            * `phaseALNVolts` (Phase A Line-to-Neutral Voltage): Line-to-neutral voltage for Phase A in volts. (volt)
            * `phaseBAmpsRms` (Phase B Current (RMS)): RMS current for Phase B in amperes. (ampere)
            * `phaseBLLVolts` (Phase B Line-to-Line Voltage): Line-to-line voltage for Phase B in volts. (volt)
            * `phaseBLNVolts` (Phase B Line-to-Neutral Voltage): Line-to-neutral voltage for Phase B in volts. (volt)
            * `phaseCAmpsRms` (Phase C Current (RMS)): RMS current for Phase C in amperes. (ampere)
            * `phaseCLLVolts` (Phase C Line-to-Line Voltage): Line-to-line voltage for Phase C in volts. (volt)
            * `phaseCLNVolts` (Phase C Line-to-Neutral Voltage): Line-to-neutral voltage for Phase C in volts. (volt)
            * `powerFactorRatio` (Power Factor Ratio): Represents the power factor ratio. (percent)
            * `rfidCardIdScan` (RFID Card Scan): The card number from RFID Card scans used for identification. When a user taps their RFID card on the reader, this captures the unique card code.
            * `samsaraEngineHours` (Samsara Engine Hours): Samsara's intelligent engine hours calculation that combines ECU data, synthetic calculations, and manual overrides with automatic fallbacks for optimal accuracy across all asset types. (millisecond)
            * `samsaraEngineHoursWithSource` (Samsara Engine Hours with Source): Samsara's intelligent engine hours calculation including detailed source metadata to indicate the origin of the data (ECU, synthetic, or manual override). Useful for debugging and understanding data provenance.
            * `samsaraOdometer` (Samsara Odometer): Samsara automatically pulls odometer readings from a vehicle's engine control unit (ECU). If the reading isn't available and the vehicle is unregulated, you can manually enter the odometer value for maintenance tracking—this value will then update based on GPS trip data. (kilometer)
            * `samsaraSpeed` (Samsara Speed): Samsara's best estimate of the asset speed, combining multiple data sources such as ECU and GPS. (meterspersec)
            * `samsaraSpeedLimit` (Samsara Speed Limit): Speed limit at the location of the asset. (meterspersec)
            * `seatbeltDriver` (Seatbelt (Driver)): Indicates whether the driver's seatbelt is buckled or unbuckled. (values: unbuckled | buckled)
            * `seatbeltPassenger` (Seatbelt (Passenger)): Indicates whether the passenger's seatbelt is buckled or unbuckled. (values: unbuckled | buckled)
            * `supportFindNearby` (Support Find Nearby): Indicates if the asset can support find nearby. (values: noData | notCompatible | pendingUpgrade | Ready)
            * `tirePressuresBackLeft` (Tire pressure, back left): Represents the tire pressure for the back-left tire. (kilopascal)
            * `tirePressuresBackRight` (Tire pressure, back right): Represents the tire pressure for the back-right tire. (kilopascal)
            * `tirePressuresFrontLeft` (Tire pressure, front left): Represents the tire pressure for the front-left tire. (kilopascal)
            * `tirePressuresFrontRight` (Tire pressure, front right): Represents the tire pressure for the front-right tire. (kilopascal)
            * `torquePercent` (Torque): Engine torque as a percentage. (percent)
            * `totalApparentPower` (Total Apparent Power): Total apparent power in volt-amperes. (voltAmpere)
            * `totalEnergyExported` (Total Energy Exported): Represents the total energy exported in kilowatt-hours (kWh). (kilowatthour)
            * `totalReactivePower` (Total Reactive Power): Total reactive power in volt-amperes reactive. (voltAmpereReactive)
            * `totalRealPower` (Total Real Power): Total real power in watts. (watt)

            </details>

            <details>
            <summary><strong>levelMonitoring</strong></summary>

            * `fillCriticality` (Fill Level Criticality): Indicates if the state of the fill level is critical. (values: normal | criticallyHigh | criticallyLow)
            * `fillMass` (Fill Mass): Mass of material in the vessel. (kilogram)
            * `fillMassAvailableCapacity` (Fill Mass Available Capacity): Available mass to be filled in the vessel. (kilogram)
            * `fillPercent` (Fill Level Percent): Fill level of the vessel as a percentage full. (percent)
            * `fillVolume` (Fill Volume): Volume of material in the vessel. (liter)
            * `fillVolumeAvailableCapacity` (Fill Volume Available Capacity): Available volume to be filled in the vessel. (liter)
            * `fluidLevelStatus` (Battery Water Level): The status of the battery's water level. Will be OK or LOW. (values: noData | ok | low)

            </details>

            <details>
            <summary><strong>obd</strong></summary>

            * `accDistanceAlertSignal` (ACC Distance Alert): Distance Alert Signal from the Adaptive Cruise Control system. (values: notActive | active)
            * `adaptiveCruiseControlMode` (ACC Mode): Current mode of the Adaptive Cruise Control System. (values: off | speedControlActive | distanceControlActive | overtakeMode | holdMode | finishMode | disabledOrError)
            * `aebsDriverActivationDemand` (AEBS Activation): Whether Advanced Emergency Braking is enabled or disabled by the driver. (values: deactivated | activated)
            * `cruiseControlFinalSetSpeed` (Cruise Control Final Set Speed): Includes driver set point and overrides from the ACC system. (kmperhr)
            * `cruiseControlSetSpeed` (Cruise Control Set Speed): Driver's set speed for the cruise control system. (kmperhr)
            * `cruiseControlSwitch` (Cruise Control Switch): The state of the cruise control switch. (values: off | on | error)
            * `driverAlertnessWarning` (Driver Alertness Warning): Driver Alertness Warning. (values: noConditionDetected | level1MildDistraction | level2Degradation | level3Warning)
            * `driverAlertnessWarningSystemState` (Driver Alertness Warning State): State of the Driver Alertness Warning system. (values: installedButDisabled | initializing | temporarilyNotAvailable | available | monitoringDriverBehavior)
            * `ecuSpeed` (ECU Speed): Speed read from the asset's OBD port. (kmperhr)
            * `emergencyBrakingActive` (Emergency Braking State): State of the Emergency Braking System. (values: inactive | active)
            * `emergencyBrakingAebsState` (AEBS State (Collision)): State of the Emergency Braking System for Forward Collision. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | readyAndActivated | driverOverrides | forwardCollisionWarningActive | forwardCollisionWarningWithBraking | forwardCollisionEmergencyBrakingActive | performanceLimited | error)
            * `externalBrakeRequestReason` (Self-Braking Reason/Mode): Brake reason/mode for the emergency self-braking system. (values: collisionAvoidance | stabilityControl | cruiseControlRoadSpeed | adaptiveCruiseControlDistanceControl | driverWarningHapticIndicator)
            * `forwardCollisionWarningLevel` (AEBS FCW Level): Severity level of the AEBS Forward Collision Warning. (values: noWarning | level1 | level2 | level3 | level4 | level5 | level6 | level7)
            * `forwardCollisionWarningStatus` (ACC FCW Status): Status of the Adaptive Cruise Control Forward Collision Warning system. (values: noWarning | collisionImminent | error)
            * `forwardLaneImagerStatus` (Forward Lane Imager State): State of the Forward Lane Imager. (values: fullyOperational | warmingUp | partiallyBlocked | fullyBlocked | misaligned | viewDegraded | error)
            * `imminentLeftLaneDeparture` (Imminent Left Lane Departure): State of the Imminent Left Lane Departure detection. (values: notImminent | imminent)
            * `imminentRightLaneDeparture` (Imminent Right Lane Departure): State of the Imminent Right Lane Departure detection. (values: notImminent | imminent)
            * `laneCenteringSystemState` (Lane Centering State): State of the Lane Centering System. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | ready | suppressedByOperator | actuating | error)
            * `laneDepartureIndicationStatus` (LDW Indication): State of the Lane Departure Indication system. (values: disabled | enabled)
            * `laneDepartureWarningSystemState` (LDW System State): State of the Lane Departure Warning system. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | ready | warningSuppressed | warningLaneDeparture | error)
            * `laneKeepingAssistSystemState` (LKAS State): State of the Lane Keep Assist System. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | ready | suppressedByOperator | actuating | error)
            * `leftLaneDeparture` (Left Lane Departure): State of the Left Lane Departure detection. (values: notDeparting | departing)
            * `rightLaneDeparture` (Right Lane Departure): State of the Right Lane Departure detection. (values: notDeparting | departing)
            * `roadDepartureAebsState` (AEBS State (Lane Departure)): State of the AEBS system for Lane Departure. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | readyAndActivated | driverOverrides | roadDepartureWarningActive | roadDepartureWarningWithBraking | roadDepartureEmergencyBrakingActive | performanceLimited | error)
            * `ropBrakeControlActive` (ROP Brake Control Active): Indicates whether Roll Over Prevention (ROP) has activated brake control. (values: passive | active)
            * `ropEngineControlActive` (ROP Engine Control Active): Indicates whether Roll Over Prevention (ROP) has commanded engine control to be active. (values: passive | active)
            * `tractionControlOverrideSwitch` (Traction Control Override Switch): When the switch is on, the automatic traction control function is disabled by the driver. (values: off | on | error)
            * `turnSignal` (Turn Signal): State of the turn signal switch (blinker). (values: off | left | right)
            * `vdcFullyOperational` (VDC Fully Operational): Indicates whether the Vehicle Dynamic Stability Control (VDC) system is fully operational. (values: notFullyOperational | fullyOperational)
            * `vehicleGear` (Vehicle Gear): The gear of the vehicle that is currently selected. (values: unknown | park | neutral | reverse | drive)
            * `xbrActiveControlMode` (Emergency Self-Braking System Mode): Current mode of the emergency self-braking system. (values: noBrakeDemand | driverBrakeDemand | additionMode | maximumMode | brakeHold)
            * `xbrSystemState` (Emergency Self-Braking System Operational State): State of the emergency self-braking system. (values: fullyOperational | highestPriorityOnly | noRequestsAccepted)
            * `ycBrakeControlActive` (YC Brake Control Active): Indicates whether Yaw Control (YC) has activated brake control. (values: passive | active)
            * `ycEngineControlActive` (YC Engine Control Active): Indicates whether Yaw Control (YC) has commanded engine control to be active. (values: passive | active)

            </details>

            <details>
            <summary><strong>pressureVesselHealth</strong></summary>

            * `pressureVesselBatteryLevelPercentage` (Pressure Vessel Battery Level Percentage): Battery level percentage of the pressure vessel. (percent)
            * `pressureVesselPressure` (Pressure Vessel Pressure): Pressure of the pressure vessel. (kilopascal)
            * `pressureVesselTemperature` (Pressure Vessel Temperature): Temperature of the pressure vessel. (celsius)

            </details>

            <details>
            <summary><strong>reefer</strong></summary>

            * `reeferAlarm` (Reefer Alarms): Array of active alarm codes for the refrigeration unit with metadata
            * `reeferAlarmSeverity` (Reefer Alarm Severity): Highest severity level across active reefer alarms (green, yellow, red, orange) (values: none | green | yellow | red | orange)
            * `reeferAmbientAir` (Reefer Ambient Air Temperature): External environment temperature for the reefer (celsius)
            * `reeferBatteryVoltage` (Reefer Battery Voltage): The voltage of the Refrigeration Unit's battery. (volt)
            * `reeferDoorOpenZone1` (Reefer Door Open (Zone 1)): Status indicating whether the reefer's door (zone 1) is closed or open (values: closed | open)
            * `reeferDoorOpenZone2` (Reefer Door Open (Zone 2)): Status indicating whether the reefer's door (zone 2) is closed or open (values: closed | open)
            * `reeferDoorOpenZone3` (Reefer Door Open (Zone 3)): Status indicating whether the reefer's door (zone 3) is closed or open (values: closed | open)
            * `reeferEngineHours` (Reefer Engine Hours): The total accumulated hours that the Refrigeration Unit has been running on its engine. (hour)
            * `reeferFuelLevel` (Reefer Fuel Level): Refrigeration Unit Fuel Level (%) (percent)
            * `reeferPowerSource` (Reefer Power Source): The power source of the refrigeration unit (Diesel, Electric or Cryo) (values: engine | electric | cryo)
            * `reeferReturnAirZone1` (Reefer Return Air Temperature (Zone 1)): Return air temperature for the reefer's zone 1 (celsius)
            * `reeferReturnAirZone2` (Reefer Return Air Temperature (Zone 2)): Return air temperature for the reefer's zone 2 (celsius)
            * `reeferReturnAirZone3` (Reefer Return Air Temperature (Zone 3)): Return air temperature for the reefer's zone 3 (celsius)
            * `reeferRunMode` (Reefer Run Mode): The run mode of the refrigeration unit (Continuous or Start/Stop) (values: continuous | startStop)
            * `reeferSetPointZone1` (Reefer Set Point (Zone 1)): Current set point for the reefer's zone 1 (celsius)
            * `reeferSetPointZone2` (Reefer Set Point (Zone 2)): Current set point for the reefer's zone 2 (celsius)
            * `reeferSetPointZone3` (Reefer Set Point (Zone 3)): Current set point for the reefer's zone 3 (celsius)
            * `reeferState` (Reefer State): The on/off state of the refrigeration unit (values: off | active | error | inactive)
            * `reeferStateZone1` (Reefer State (Zone 1)): The on/off state of the refrigeration unit (Zone 1) (values: off | active | error | inactive)
            * `reeferStateZone2` (Reefer State (Zone 2)): The on/off state of the refrigeration unit (Zone 2) (values: off | active | error | inactive)
            * `reeferStateZone3` (Reefer State (Zone 3)): The on/off state of the refrigeration unit (Zone 3) (values: off | active | error | inactive)
            * `reeferSupplyAirZone1` (Reefer Supply Air Temperature (Zone 1)): Supply air temperature for the reefer's zone 1 (celsius)
            * `reeferSupplyAirZone2` (Reefer Supply Air Temperature (Zone 2)): Supply air temperature for the reefer's zone 2 (celsius)
            * `reeferSupplyAirZone3` (Reefer Supply Air Temperature (Zone 3)): Supply air temperature for the reefer's zone 3 (celsius)
            * `reeferTemperatureRecorder1` (Reefer Temperature Recorder (Zone 1)): Temperature recorder reading for reefer zone 1 (celsius)
            * `reeferTemperatureRecorder2` (Reefer Temperature Recorder (Zone 2)): Temperature recorder reading for reefer zone 2 (celsius)
            * `reeferTemperatureRecorder3` (Reefer Temperature Recorder (Zone 3)): Temperature recorder reading for reefer zone 3 (celsius)
            * `reeferTemperatureRecorder4` (Reefer Temperature Recorder (Zone 4)): Temperature recorder reading for reefer zone 4 (celsius)
            * `reeferTemperatureRecorder5` (Reefer Temperature Recorder (Zone 5)): Temperature recorder reading for reefer zone 5 (celsius)
            * `reeferTemperatureRecorder6` (Reefer Temperature Recorder (Zone 6)): Temperature recorder reading for reefer zone 6 (celsius)

            </details>

            <details>
            <summary><strong>smartTrailer</strong></summary>

            * `addressEntry` (Address Entry): Address data from the address entry event
            * `addressExit` (Address Exit): Address data from the address exit event
            * `ag51BatteryStatus` (AG51 Battery Status): Battery status of the AG51 gateway based on temperature-compensated voltage threshold. The threshold varies from 3672mV at -40°C to 4579mV at 60°C. (values: ok | low)
            * `ag51BatteryTemperature` (AG51 Battery Temperature): Internal temperature of the AG51 gateway battery in degrees Celsius (celsius)
            * `ag51BatteryVoltage` (AG51 Battery Voltage): Total battery voltage of the AG51 gateway (sum of all 3 cells) in volts (volt)
            * `atisLamp` (Atis Lamp status): Atis lamp on/off status (values: off | on)
            * `derivedCargoState` (Cargo Status): Indicates if the overall cargo status of the asset is Empty, Partially Empty, Full, or Unknown. (values: unknown | empty | partiallyEmpty | full)
            * `doorClosedStatus` (Door Closed Status): Status indicating whether a door is closed or open (values: open | closed)
            * `doorClosedStatusAdvanced` (Door Closed Status (Advanced)): Status indicating whether a door is closed or open (values: open | closed)
            * `environmentMonitorAmbientTemperature` (Ambient Temperature): Air temperature at the environmental monitor device (built-in sensor). (celsius)
            * `environmentMonitorThermistorTemperature` (Thermistor Temperature): Temperature from an external thermistor probe (e.g. cable probe in cargo or reefer). (celsius)
            * `trailerMovingWithoutPower` (Trailer Moving Without Power): Trailer moving without power status (values: off | on)
            * `validBrakeScore` (Braking Performance Value): Percent score representing trailer braking effectiveness using regression analysis over the past 90 days, guaranteed to have under 3% margin of error. (percent)
            * `widgetBatteryVoltage` (Widget Battery Voltage): Battery voltage level of the widget sensor in millivolts (volt)
            * `widgetBatteryVoltageLow` (Widget Battery Voltage Low): Indicates if widget battery voltage is below 1500mV threshold (values: normal | low)
            * `widgetDisconnect` (Widget Disconnection Status): Connection status between widget and device (values: connected | disconnected)

            </details>

            **Note:** This is not an exhaustive list. Your organization may have access to additional readings based on enabled features or custom configurations. Use the `/readings/definitions` endpoint to retrieve all available reading IDs for your organization.

        entity_type : str
            A entity type of the entityIds or externalIds to fetch readings for. Use /readings/definitions endpoint to get a list of valid entity types. (Examples: asset, sensor)

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        entity_ids : typing.Optional[str]
            A filter on the data based on this comma-separated list of entity IDs or external IDs. If not set, all entities are returned.

        external_ids : typing.Optional[str]
            A filter on the data based on this comma-separated list of external IDs. (Examples: samsara.serial:ZPXKLMN7VJ, samsara.serial:ABXKIMN4NM)

        start_time : typing.Optional[str]
            A filter on the data that returns the last known data points with timestamps greater than or equal to this value. Must be a string in RFC 3339 format. Millisecond precision and timezones are supported. (Examples: 2020-01-27T07:06:25Z)

        end_time : typing.Optional[str]
            A filter on the data that returns the last known data points with timestamps less than or equal to this value. If not set, the time of the request is considered the endTime. Must be a string in RFC 3339 format. Millisecond precision and timezones are supported. (Examples: 2020-01-27T07:06:25Z)

        feed : typing.Optional[bool]
            Set to true to enable feed mode for continuous reading updates. When enabled, the API always includes an endCursor in the response. If hasNextPage is false, it indicates that no new data is currently available — wait at least 5 seconds before making the next request to avoid unnecessary polling.

        include_external_ids : typing.Optional[bool]
            Optional boolean indicating whether to return external IDs on supported entities

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReadingsGetReadingsHistoryResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_readings_history(
            reading_id="readingId",
            entity_type="entityType",
        )
        """
        _response = self._raw_client.get_readings_history(
            reading_id=reading_id,
            entity_type=entity_type,
            after=after,
            entity_ids=entity_ids,
            external_ids=external_ids,
            start_time=start_time,
            end_time=end_time,
            feed=feed,
            include_external_ids=include_external_ids,
            request_options=request_options,
        )
        return _response.data

    def get_readings_snapshot(
        self,
        *,
        reading_ids: str,
        entity_type: str,
        after: typing.Optional[str] = None,
        entity_ids: typing.Optional[str] = None,
        external_ids: typing.Optional[str] = None,
        as_of_time: typing.Optional[str] = None,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReadingsGetReadingsSnapshotResponseBody:
        """
        An endpoint to get the last value of a reading for a set of entities at the specified time.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Readings** under the Closed Beta category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        reading_ids : str
            A collection of comma separated reading IDs. Include up to 3 readings IDs. Use /readings/definitions endpoint to get a list of valid reading IDs. (Examples: engineRpm,fuelLevel)

            Available reading IDs (by category):


            <details>
            <summary><strong>diagnostic</strong></summary>

            * `airInletPressure` (Air Inlet Pressure): Air inlet pressure. (kilopascal)
            * `airTemp` (Air Inlet (Ambient Air) Temp): Air inlet (ambient air) temperature. (celsius)
            * `altitude` (Altitude): The altitude of the asset (meter)
            * `altitudeAccuracy` (Altitude Uncertainty): The uncertainty of the asset's GPS-based altitude. (meter)
            * `assetStatus` (Status): Combined movement and equipment status derived from location & Digio events. (values: movementStart | movementEnd | stopped | none | equipmentOn | equipmentOff)
            * `averageACCurrent` (Average AC Current): Average AC current in amperes. (ampere)
            * `averageACFrequency` (Average AC Frequency): Average AC frequency in Hertz. (hertz)
            * `averageLineToLineACRMSVoltage` (Average Line-to-Line Voltage): Average RMS voltage between AC lines in volts. (volt)
            * `averageLineToNeutralACRMSVoltage` (Average Line-to-Neutral Voltage): Average RMS voltage from AC line to neutral in volts. (volt)
            * `barometerPressure` (Barometric Pressure): Atmospheric pressure as measured by the barometer. (kilopascal)
            * `batteryPotentialSwitched` (Battery Potential (Switched)): Switched battery potential in volts. (volt)
            * `batteryVoltage` (Battery Voltage): Voltage of the asset's battery. (volt)
            * `boostPressureEngineTurbocharger1` (Engine Turbocharger 1 Boost Pressure): Represents the boost pressure for engine turbocharger 1. (kilopascal)
            * `boostPressurePa` (Boost Pressure): Represents the boost pressure. (kilopascal)
            * `boostPressureTurbocharger2` (Boost Pressure (Turbocharger 2)): Boost pressure from the second turbocharger in kPa. (kilopascal)
            * `canBusType` (CAN Bus Status): Indicates whether the CAN Bus system is active or provides an invalid reading. (values: invalid | active)
            * `checkEngineLightJ1939Emissions` (Check Engine Light (J1939) - Emissions): Indicates whether the J1939 check engine light emissions indicator is active or inactive. (values: off | on)
            * `checkEngineLightJ1939Protect` (Check Engine Light (J1939) - Protect): Indicates whether the J1939 check engine light protect indicator is active or inactive. (values: off | on)
            * `checkEngineLightJ1939Stop` (Check Engine Light (J1939) - Stop): Indicates whether the J1939 check engine light stop indicator is active or inactive. (values: off | on)
            * `checkEngineLightJ1939Warning` (Check Engine Light (J1939) - Warning): Indicates whether the J1939 check engine light warning indicator is active or inactive. (values: off | on)
            * `checkEngineLightPassenger` (Check Engine Light (Passenger)): Indicates whether the passenger check engine light indicator is active or inactive. (values: off | on)
            * `coolantTemp` (Engine Coolant Temp): Represents the engine coolant temperature. (celsius)
            * `defLevel` (DEF Level): Represents the DEF (Diesel Exhaust Fluid) level percentage. (percent)
            * `derivedFuelConsumed` (Lifetime Fuel Consumed (Samsara)): Samsara-maintained fuel consumption since the device was firstinstalled. (liter)
            * `deviceOrientation` (Device Orientation): Indicates orientation of the device. (values: invalid | unknown | topDown | bottomDown | leftDown | rightDown | backDown | frontDown)
            * `digioInput1` (Digital IO #1): Represents the state of digital IO #1. (values: off | on)
            * `dpfLampStatus` (DPF Lamp Status): Status of the Diesel Particulate Filter warning lamp. (values: off | on | blinking)
            * `dpfSootLoadPercent` (DPF Soot Load): Diesel Particulate Filter soot load percentage. (percent)
            * `ecuHistoryTotalRunTime` (ECU Total Run Time): Total engine run time from ECU in seconds. (second)
            * `engineHours` (Engine Hours (ECU)): Represents the total engine runtime in hours as reported by the ECU. (second)
            * `engineHoursDigioBased` (Engine Hours (Synthetic - Aux input)): Represents the synthetic total engine runtime in hours based on auxiliary input. (millisecond)
            * `engineHoursEngineStateBased` (Engine Hours (Synthetic)): Represents the synthetic total engine runtime in hours based on engine state. (millisecond)
            * `engineIntakeAirTemp` (Engine Intake Air Temperature): Represents the engine intake air temperature. (celsius)
            * `engineLoadPercent` (Engine Load): Engine load percentage. (percent)
            * `engineState` (Engine State): Indicates the current state of the engine, such as running, stopped. (values: off | running | idling)
            * `ev24VoltDcDcInverterCurrent` (EV 24V DC/DC Inverter Current): Current from the 24V DC-DC inverter in amperes. (ampere)
            * `evAverageCellTemperature` (EV Average Cell Temperature): Average temperature of EV battery cells in degrees Celsius. (celsius)
            * `evChargingErrorStatus` (EV Charging Error Status): Indicates if the EV charging system has an error. (values: noError | batteryTooHotOrCold | vehicleNotInPark | connectorLockFault | chargingSystemFault | chargingCurrentDifferential | chargingVoltageOutOfRange | chargingSystemNotCompatible | noDataUndeterminedStatus | notAvailable | unknownError)
            * `evHighCapacityBatteryCurrent` (EV High Capacity Battery Current): Current from the high capacity EV battery in amperes. (ampere)
            * `evHighCapacityBatteryVoltage` (High Capacity EV Battery Voltage): Represents the voltage of the high capacity EV battery. (volt)
            * `evMaxAllowedStateOfChargePercent` (EV Max Allowed State of Charge): Maximum allowed state of charge percentage. (percent)
            * `evMaxCellTemperature` (EV Max Cell Temperature): Maximum temperature of EV battery cells in degrees Celsius. (celsius)
            * `evMinAllowedStateOfChargePercent` (EV Min Allowed State of Charge): Minimum allowed state of charge percentage. (percent)
            * `evMinCellTemperature` (EV Min Cell Temperature): Minimum temperature of EV battery cells in degrees Celsius. (celsius)
            * `exhaustGasPressure` (Exhaust Gas Pressure): Represents the exhaust gas pressure. (kilopascal)
            * `fuelConsumptionRate` (Fuel Consumption Rate): The rate at which an asset uses fuel (litersperhour)
            * `fuelLevelPerc` (Fuel Level): Percentage of fuel remaining in the tank. (percent)
            * `fuelSource` (Fuel Source): Type of fuel used by the asset. (values: gasoline | diesel)
            * `geoCoordinates` (Geo Coordinates): GPS coordinates (latitude and longitude) of the asset's location.
            * `gpsSpeed` (GPS Speed): Asset speed measured by the gateway's GPS receiver. (meterspersec)
            * `ignitionStatus` (Ignitions Status): Indicates the current ignition status as a voltage (values: off | on)
            * `latitude` (Latitude): Latitude coordinate of the asset's location. (decimaldegrees)
            * `lifetimeFuelConsumed` (Lifetime Fuel Consumed): Represents the vehicle maintained lifetime fuel consumption as reported by the vehicle. (liter)
            * `location` (Location): Represents the current address of the asset.
            * `longitude` (Longitude): Longitude coordinate of the asset's location. (decimaldegrees)
            * `mnfldTemp` (Intake Manifold Temp): Represents the intake manifold temperature. (celsius)
            * `ngFuelPressure` (NG Fuel Pressure): Represents the natural gas fuel pressure. (kilopascal)
            * `odometerEcu` (Odometer (ECU)): Represents the total distance traveled as recorded by the ECU. (meter)
            * `odometerGps` (Odometer (GPS)): Represents the total distance traveled as determined by GPS. (meter)
            * `oilPressure` (Engine Oil Pressure): Represents the oil pressure in the engine. (kilopascal)
            * `phaseAACFrequency` (Phase A AC Frequency): AC frequency for Phase A in Hertz. (hertz)
            * `phaseAAmpsRms` (Phase A Current (RMS)): RMS current for Phase A in amperes. (ampere)
            * `phaseALLVolts` (Phase A Line-to-Line Voltage): Line-to-line voltage for Phase A in volts. (volt)
            * `phaseALNVolts` (Phase A Line-to-Neutral Voltage): Line-to-neutral voltage for Phase A in volts. (volt)
            * `phaseBAmpsRms` (Phase B Current (RMS)): RMS current for Phase B in amperes. (ampere)
            * `phaseBLLVolts` (Phase B Line-to-Line Voltage): Line-to-line voltage for Phase B in volts. (volt)
            * `phaseBLNVolts` (Phase B Line-to-Neutral Voltage): Line-to-neutral voltage for Phase B in volts. (volt)
            * `phaseCAmpsRms` (Phase C Current (RMS)): RMS current for Phase C in amperes. (ampere)
            * `phaseCLLVolts` (Phase C Line-to-Line Voltage): Line-to-line voltage for Phase C in volts. (volt)
            * `phaseCLNVolts` (Phase C Line-to-Neutral Voltage): Line-to-neutral voltage for Phase C in volts. (volt)
            * `powerFactorRatio` (Power Factor Ratio): Represents the power factor ratio. (percent)
            * `rfidCardIdScan` (RFID Card Scan): The card number from RFID Card scans used for identification. When a user taps their RFID card on the reader, this captures the unique card code.
            * `samsaraEngineHours` (Samsara Engine Hours): Samsara's intelligent engine hours calculation that combines ECU data, synthetic calculations, and manual overrides with automatic fallbacks for optimal accuracy across all asset types. (millisecond)
            * `samsaraEngineHoursWithSource` (Samsara Engine Hours with Source): Samsara's intelligent engine hours calculation including detailed source metadata to indicate the origin of the data (ECU, synthetic, or manual override). Useful for debugging and understanding data provenance.
            * `samsaraOdometer` (Samsara Odometer): Samsara automatically pulls odometer readings from a vehicle's engine control unit (ECU). If the reading isn't available and the vehicle is unregulated, you can manually enter the odometer value for maintenance tracking—this value will then update based on GPS trip data. (kilometer)
            * `samsaraSpeed` (Samsara Speed): Samsara's best estimate of the asset speed, combining multiple data sources such as ECU and GPS. (meterspersec)
            * `samsaraSpeedLimit` (Samsara Speed Limit): Speed limit at the location of the asset. (meterspersec)
            * `seatbeltDriver` (Seatbelt (Driver)): Indicates whether the driver's seatbelt is buckled or unbuckled. (values: unbuckled | buckled)
            * `seatbeltPassenger` (Seatbelt (Passenger)): Indicates whether the passenger's seatbelt is buckled or unbuckled. (values: unbuckled | buckled)
            * `supportFindNearby` (Support Find Nearby): Indicates if the asset can support find nearby. (values: noData | notCompatible | pendingUpgrade | Ready)
            * `tirePressuresBackLeft` (Tire pressure, back left): Represents the tire pressure for the back-left tire. (kilopascal)
            * `tirePressuresBackRight` (Tire pressure, back right): Represents the tire pressure for the back-right tire. (kilopascal)
            * `tirePressuresFrontLeft` (Tire pressure, front left): Represents the tire pressure for the front-left tire. (kilopascal)
            * `tirePressuresFrontRight` (Tire pressure, front right): Represents the tire pressure for the front-right tire. (kilopascal)
            * `torquePercent` (Torque): Engine torque as a percentage. (percent)
            * `totalApparentPower` (Total Apparent Power): Total apparent power in volt-amperes. (voltAmpere)
            * `totalEnergyExported` (Total Energy Exported): Represents the total energy exported in kilowatt-hours (kWh). (kilowatthour)
            * `totalReactivePower` (Total Reactive Power): Total reactive power in volt-amperes reactive. (voltAmpereReactive)
            * `totalRealPower` (Total Real Power): Total real power in watts. (watt)

            </details>

            <details>
            <summary><strong>levelMonitoring</strong></summary>

            * `fillCriticality` (Fill Level Criticality): Indicates if the state of the fill level is critical. (values: normal | criticallyHigh | criticallyLow)
            * `fillMass` (Fill Mass): Mass of material in the vessel. (kilogram)
            * `fillMassAvailableCapacity` (Fill Mass Available Capacity): Available mass to be filled in the vessel. (kilogram)
            * `fillPercent` (Fill Level Percent): Fill level of the vessel as a percentage full. (percent)
            * `fillVolume` (Fill Volume): Volume of material in the vessel. (liter)
            * `fillVolumeAvailableCapacity` (Fill Volume Available Capacity): Available volume to be filled in the vessel. (liter)
            * `fluidLevelStatus` (Battery Water Level): The status of the battery's water level. Will be OK or LOW. (values: noData | ok | low)

            </details>

            <details>
            <summary><strong>obd</strong></summary>

            * `accDistanceAlertSignal` (ACC Distance Alert): Distance Alert Signal from the Adaptive Cruise Control system. (values: notActive | active)
            * `adaptiveCruiseControlMode` (ACC Mode): Current mode of the Adaptive Cruise Control System. (values: off | speedControlActive | distanceControlActive | overtakeMode | holdMode | finishMode | disabledOrError)
            * `aebsDriverActivationDemand` (AEBS Activation): Whether Advanced Emergency Braking is enabled or disabled by the driver. (values: deactivated | activated)
            * `cruiseControlFinalSetSpeed` (Cruise Control Final Set Speed): Includes driver set point and overrides from the ACC system. (kmperhr)
            * `cruiseControlSetSpeed` (Cruise Control Set Speed): Driver's set speed for the cruise control system. (kmperhr)
            * `cruiseControlSwitch` (Cruise Control Switch): The state of the cruise control switch. (values: off | on | error)
            * `driverAlertnessWarning` (Driver Alertness Warning): Driver Alertness Warning. (values: noConditionDetected | level1MildDistraction | level2Degradation | level3Warning)
            * `driverAlertnessWarningSystemState` (Driver Alertness Warning State): State of the Driver Alertness Warning system. (values: installedButDisabled | initializing | temporarilyNotAvailable | available | monitoringDriverBehavior)
            * `ecuSpeed` (ECU Speed): Speed read from the asset's OBD port. (kmperhr)
            * `emergencyBrakingActive` (Emergency Braking State): State of the Emergency Braking System. (values: inactive | active)
            * `emergencyBrakingAebsState` (AEBS State (Collision)): State of the Emergency Braking System for Forward Collision. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | readyAndActivated | driverOverrides | forwardCollisionWarningActive | forwardCollisionWarningWithBraking | forwardCollisionEmergencyBrakingActive | performanceLimited | error)
            * `externalBrakeRequestReason` (Self-Braking Reason/Mode): Brake reason/mode for the emergency self-braking system. (values: collisionAvoidance | stabilityControl | cruiseControlRoadSpeed | adaptiveCruiseControlDistanceControl | driverWarningHapticIndicator)
            * `forwardCollisionWarningLevel` (AEBS FCW Level): Severity level of the AEBS Forward Collision Warning. (values: noWarning | level1 | level2 | level3 | level4 | level5 | level6 | level7)
            * `forwardCollisionWarningStatus` (ACC FCW Status): Status of the Adaptive Cruise Control Forward Collision Warning system. (values: noWarning | collisionImminent | error)
            * `forwardLaneImagerStatus` (Forward Lane Imager State): State of the Forward Lane Imager. (values: fullyOperational | warmingUp | partiallyBlocked | fullyBlocked | misaligned | viewDegraded | error)
            * `imminentLeftLaneDeparture` (Imminent Left Lane Departure): State of the Imminent Left Lane Departure detection. (values: notImminent | imminent)
            * `imminentRightLaneDeparture` (Imminent Right Lane Departure): State of the Imminent Right Lane Departure detection. (values: notImminent | imminent)
            * `laneCenteringSystemState` (Lane Centering State): State of the Lane Centering System. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | ready | suppressedByOperator | actuating | error)
            * `laneDepartureIndicationStatus` (LDW Indication): State of the Lane Departure Indication system. (values: disabled | enabled)
            * `laneDepartureWarningSystemState` (LDW System State): State of the Lane Departure Warning system. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | ready | warningSuppressed | warningLaneDeparture | error)
            * `laneKeepingAssistSystemState` (LKAS State): State of the Lane Keep Assist System. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | ready | suppressedByOperator | actuating | error)
            * `leftLaneDeparture` (Left Lane Departure): State of the Left Lane Departure detection. (values: notDeparting | departing)
            * `rightLaneDeparture` (Right Lane Departure): State of the Right Lane Departure detection. (values: notDeparting | departing)
            * `roadDepartureAebsState` (AEBS State (Lane Departure)): State of the AEBS system for Lane Departure. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | readyAndActivated | driverOverrides | roadDepartureWarningActive | roadDepartureWarningWithBraking | roadDepartureEmergencyBrakingActive | performanceLimited | error)
            * `ropBrakeControlActive` (ROP Brake Control Active): Indicates whether Roll Over Prevention (ROP) has activated brake control. (values: passive | active)
            * `ropEngineControlActive` (ROP Engine Control Active): Indicates whether Roll Over Prevention (ROP) has commanded engine control to be active. (values: passive | active)
            * `tractionControlOverrideSwitch` (Traction Control Override Switch): When the switch is on, the automatic traction control function is disabled by the driver. (values: off | on | error)
            * `turnSignal` (Turn Signal): State of the turn signal switch (blinker). (values: off | left | right)
            * `vdcFullyOperational` (VDC Fully Operational): Indicates whether the Vehicle Dynamic Stability Control (VDC) system is fully operational. (values: notFullyOperational | fullyOperational)
            * `vehicleGear` (Vehicle Gear): The gear of the vehicle that is currently selected. (values: unknown | park | neutral | reverse | drive)
            * `xbrActiveControlMode` (Emergency Self-Braking System Mode): Current mode of the emergency self-braking system. (values: noBrakeDemand | driverBrakeDemand | additionMode | maximumMode | brakeHold)
            * `xbrSystemState` (Emergency Self-Braking System Operational State): State of the emergency self-braking system. (values: fullyOperational | highestPriorityOnly | noRequestsAccepted)
            * `ycBrakeControlActive` (YC Brake Control Active): Indicates whether Yaw Control (YC) has activated brake control. (values: passive | active)
            * `ycEngineControlActive` (YC Engine Control Active): Indicates whether Yaw Control (YC) has commanded engine control to be active. (values: passive | active)

            </details>

            <details>
            <summary><strong>pressureVesselHealth</strong></summary>

            * `pressureVesselBatteryLevelPercentage` (Pressure Vessel Battery Level Percentage): Battery level percentage of the pressure vessel. (percent)
            * `pressureVesselPressure` (Pressure Vessel Pressure): Pressure of the pressure vessel. (kilopascal)
            * `pressureVesselTemperature` (Pressure Vessel Temperature): Temperature of the pressure vessel. (celsius)

            </details>

            <details>
            <summary><strong>reefer</strong></summary>

            * `reeferAlarm` (Reefer Alarms): Array of active alarm codes for the refrigeration unit with metadata
            * `reeferAlarmSeverity` (Reefer Alarm Severity): Highest severity level across active reefer alarms (green, yellow, red, orange) (values: none | green | yellow | red | orange)
            * `reeferAmbientAir` (Reefer Ambient Air Temperature): External environment temperature for the reefer (celsius)
            * `reeferBatteryVoltage` (Reefer Battery Voltage): The voltage of the Refrigeration Unit's battery. (volt)
            * `reeferDoorOpenZone1` (Reefer Door Open (Zone 1)): Status indicating whether the reefer's door (zone 1) is closed or open (values: closed | open)
            * `reeferDoorOpenZone2` (Reefer Door Open (Zone 2)): Status indicating whether the reefer's door (zone 2) is closed or open (values: closed | open)
            * `reeferDoorOpenZone3` (Reefer Door Open (Zone 3)): Status indicating whether the reefer's door (zone 3) is closed or open (values: closed | open)
            * `reeferEngineHours` (Reefer Engine Hours): The total accumulated hours that the Refrigeration Unit has been running on its engine. (hour)
            * `reeferFuelLevel` (Reefer Fuel Level): Refrigeration Unit Fuel Level (%) (percent)
            * `reeferPowerSource` (Reefer Power Source): The power source of the refrigeration unit (Diesel, Electric or Cryo) (values: engine | electric | cryo)
            * `reeferReturnAirZone1` (Reefer Return Air Temperature (Zone 1)): Return air temperature for the reefer's zone 1 (celsius)
            * `reeferReturnAirZone2` (Reefer Return Air Temperature (Zone 2)): Return air temperature for the reefer's zone 2 (celsius)
            * `reeferReturnAirZone3` (Reefer Return Air Temperature (Zone 3)): Return air temperature for the reefer's zone 3 (celsius)
            * `reeferRunMode` (Reefer Run Mode): The run mode of the refrigeration unit (Continuous or Start/Stop) (values: continuous | startStop)
            * `reeferSetPointZone1` (Reefer Set Point (Zone 1)): Current set point for the reefer's zone 1 (celsius)
            * `reeferSetPointZone2` (Reefer Set Point (Zone 2)): Current set point for the reefer's zone 2 (celsius)
            * `reeferSetPointZone3` (Reefer Set Point (Zone 3)): Current set point for the reefer's zone 3 (celsius)
            * `reeferState` (Reefer State): The on/off state of the refrigeration unit (values: off | active | error | inactive)
            * `reeferStateZone1` (Reefer State (Zone 1)): The on/off state of the refrigeration unit (Zone 1) (values: off | active | error | inactive)
            * `reeferStateZone2` (Reefer State (Zone 2)): The on/off state of the refrigeration unit (Zone 2) (values: off | active | error | inactive)
            * `reeferStateZone3` (Reefer State (Zone 3)): The on/off state of the refrigeration unit (Zone 3) (values: off | active | error | inactive)
            * `reeferSupplyAirZone1` (Reefer Supply Air Temperature (Zone 1)): Supply air temperature for the reefer's zone 1 (celsius)
            * `reeferSupplyAirZone2` (Reefer Supply Air Temperature (Zone 2)): Supply air temperature for the reefer's zone 2 (celsius)
            * `reeferSupplyAirZone3` (Reefer Supply Air Temperature (Zone 3)): Supply air temperature for the reefer's zone 3 (celsius)
            * `reeferTemperatureRecorder1` (Reefer Temperature Recorder (Zone 1)): Temperature recorder reading for reefer zone 1 (celsius)
            * `reeferTemperatureRecorder2` (Reefer Temperature Recorder (Zone 2)): Temperature recorder reading for reefer zone 2 (celsius)
            * `reeferTemperatureRecorder3` (Reefer Temperature Recorder (Zone 3)): Temperature recorder reading for reefer zone 3 (celsius)
            * `reeferTemperatureRecorder4` (Reefer Temperature Recorder (Zone 4)): Temperature recorder reading for reefer zone 4 (celsius)
            * `reeferTemperatureRecorder5` (Reefer Temperature Recorder (Zone 5)): Temperature recorder reading for reefer zone 5 (celsius)
            * `reeferTemperatureRecorder6` (Reefer Temperature Recorder (Zone 6)): Temperature recorder reading for reefer zone 6 (celsius)

            </details>

            <details>
            <summary><strong>smartTrailer</strong></summary>

            * `addressEntry` (Address Entry): Address data from the address entry event
            * `addressExit` (Address Exit): Address data from the address exit event
            * `ag51BatteryStatus` (AG51 Battery Status): Battery status of the AG51 gateway based on temperature-compensated voltage threshold. The threshold varies from 3672mV at -40°C to 4579mV at 60°C. (values: ok | low)
            * `ag51BatteryTemperature` (AG51 Battery Temperature): Internal temperature of the AG51 gateway battery in degrees Celsius (celsius)
            * `ag51BatteryVoltage` (AG51 Battery Voltage): Total battery voltage of the AG51 gateway (sum of all 3 cells) in volts (volt)
            * `atisLamp` (Atis Lamp status): Atis lamp on/off status (values: off | on)
            * `derivedCargoState` (Cargo Status): Indicates if the overall cargo status of the asset is Empty, Partially Empty, Full, or Unknown. (values: unknown | empty | partiallyEmpty | full)
            * `doorClosedStatus` (Door Closed Status): Status indicating whether a door is closed or open (values: open | closed)
            * `doorClosedStatusAdvanced` (Door Closed Status (Advanced)): Status indicating whether a door is closed or open (values: open | closed)
            * `environmentMonitorAmbientTemperature` (Ambient Temperature): Air temperature at the environmental monitor device (built-in sensor). (celsius)
            * `environmentMonitorThermistorTemperature` (Thermistor Temperature): Temperature from an external thermistor probe (e.g. cable probe in cargo or reefer). (celsius)
            * `trailerMovingWithoutPower` (Trailer Moving Without Power): Trailer moving without power status (values: off | on)
            * `validBrakeScore` (Braking Performance Value): Percent score representing trailer braking effectiveness using regression analysis over the past 90 days, guaranteed to have under 3% margin of error. (percent)
            * `widgetBatteryVoltage` (Widget Battery Voltage): Battery voltage level of the widget sensor in millivolts (volt)
            * `widgetBatteryVoltageLow` (Widget Battery Voltage Low): Indicates if widget battery voltage is below 1500mV threshold (values: normal | low)
            * `widgetDisconnect` (Widget Disconnection Status): Connection status between widget and device (values: connected | disconnected)

            </details>

            **Note:** This is not an exhaustive list. Your organization may have access to additional readings based on enabled features or custom configurations. Use the `/readings/definitions` endpoint to retrieve all available reading IDs for your organization.

        entity_type : str
            A entity type of the entityIds or externalIds to fetch readings for. Use /readings/definitions endpoint to get a list of valid entity types. (Examples: asset, sensor)

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        entity_ids : typing.Optional[str]
            A filter on the data based on this comma-separated list of entity IDs or external IDs. If not set, all entities are returned.

        external_ids : typing.Optional[str]
            A filter on the data based on this comma-separated list of external IDs. (Examples: samsara.serial:ZPXKLMN7VJ, samsara.serial:ABXKIMN4NM)

        as_of_time : typing.Optional[str]
            A filter on the data that returns the last known data points with timestamps less than or equal to this value. Defaults to now if not provided. Must be a string in RFC 3339 format. Millisecond precision and timezones are supported. (Examples: 2020-01-27T07:06:25Z)

        include_external_ids : typing.Optional[bool]
            Optional boolean indicating whether to return external IDs on supported entities

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReadingsGetReadingsSnapshotResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_readings_snapshot(
            reading_ids="readingIds",
            entity_type="entityType",
        )
        """
        _response = self._raw_client.get_readings_snapshot(
            reading_ids=reading_ids,
            entity_type=entity_type,
            after=after,
            entity_ids=entity_ids,
            external_ids=external_ids,
            as_of_time=as_of_time,
            include_external_ids=include_external_ids,
            request_options=request_options,
        )
        return _response.data

    def get_report_configs(
        self,
        *,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReportsGetReportConfigsResponseBody:
        """
        Get report configs created in the organization.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Custom Reports** under the Custom Reports category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            Maximum number of configs to return

        ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            The list of report config IDs to retrieve. Include up to 10 report config IDs. If not provided, all configs will be returned.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReportsGetReportConfigsResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_report_configs()
        """
        _response = self._raw_client.get_report_configs(
            after=after, limit=limit, ids=ids, request_options=request_options
        )
        return _response.data

    def get_datasets(
        self,
        *,
        ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReportsGetDatasetsResponseBody:
        """
        Get datasets for custom reports.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Custom Reports** under the Custom Reports category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            The list of dataset IDs to retrieve the datasets for. Include up to 10 dataset IDs. If not provided, all datasets will be returned.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            Maximum number of datasets to return.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReportsGetDatasetsResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_datasets()
        """
        _response = self._raw_client.get_datasets(ids=ids, after=after, limit=limit, request_options=request_options)
        return _response.data

    def get_report_runs(
        self,
        *,
        report_config_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReportsGetReportRunsResponseBody:
        """
        Get custom report runs created by the user.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Custom Reports** under the Custom Reports category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        report_config_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            The list of report config IDs to retrieve the report runs for. Include up to 10 report config IDs. If not provided, runs for all configs will be returned.

        ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            The list of report run IDs to retrieve the report runs for. Include up to 10 report run IDs. If not provided, all report runs will be returned.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            Maximum number of runs to return.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReportsGetReportRunsResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_report_runs()
        """
        _response = self._raw_client.get_report_runs(
            report_config_ids=report_config_ids, ids=ids, after=after, limit=limit, request_options=request_options
        )
        return _response.data

    def create_report_run(
        self,
        *,
        report_config: CreateReportConfigObjectRequestBody,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReportsCreateReportRunResponseBody:
        """
        Triggers a new custom report run based on the provided configuration.

         <b>Rate limit:</b> 50 requests/hour (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Custom Reports** under the Custom Reports category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        report_config : CreateReportConfigObjectRequestBody

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReportsCreateReportRunResponseBody
            Accepted response.

        Examples
        --------
        from samsara import CreateReportConfigObjectRequestBody, Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.create_report_run(
            report_config=CreateReportConfigObjectRequestBody(),
        )
        """
        _response = self._raw_client.create_report_run(report_config=report_config, request_options=request_options)
        return _response.data

    def get_report_run_data(
        self,
        *,
        id: str,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReportsGetReportRunDataResponseBody:
        """
        Get data for the given custom report run.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Custom Reports** under the Custom Reports category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            ID of the report run.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            Maximum number of rows to return.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReportsGetReportRunDataResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_report_run_data(
            id="id",
        )
        """
        _response = self._raw_client.get_report_run_data(
            id=id, after=after, limit=limit, request_options=request_options
        )
        return _response.data

    def list_ridership_accounts(
        self,
        *,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipAccountsListRidershipAccountsResponseBody:
        """
        List all ridership accounts for the organization.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            The limit for how many objects will be in the response. Default and max for this value is 512 objects.

        include_external_ids : typing.Optional[bool]
            Optional boolean indicating whether to return external IDs on supported entities

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipAccountsListRidershipAccountsResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.list_ridership_accounts()
        """
        _response = self._raw_client.list_ridership_accounts(
            after=after, limit=limit, include_external_ids=include_external_ids, request_options=request_options
        )
        return _response.data

    def create_ridership_account(
        self,
        *,
        name: str,
        external_ids: typing.Optional[typing.Dict[str, str]] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipAccountsCreateRidershipAccountResponseBody:
        """
        Create a new ridership account.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        name : str
            Name of the ridership account.

        external_ids : typing.Optional[typing.Dict[str, str]]
            A map of external ids

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipAccountsCreateRidershipAccountResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.create_ridership_account(
            name="Springfield Public Schools",
        )
        """
        _response = self._raw_client.create_ridership_account(
            name=name, external_ids=external_ids, request_options=request_options
        )
        return _response.data

    def update_ridership_account(
        self,
        *,
        id: str,
        name: str,
        external_ids: typing.Optional[typing.Dict[str, str]] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipAccountsUpdateRidershipAccountResponseBody:
        """
        Update a ridership account by Samsara ID. All provided fields will overwrite existing values (PUT semantics).

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            The Samsara UUID of the ridership account.

        name : str
            Name of the ridership account.

        external_ids : typing.Optional[typing.Dict[str, str]]
            A map of external ids

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipAccountsUpdateRidershipAccountResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.update_ridership_account(
            id="id",
            name="Springfield Public Schools",
        )
        """
        _response = self._raw_client.update_ridership_account(
            id=id, name=name, external_ids=external_ids, request_options=request_options
        )
        return _response.data

    def delete_ridership_account(self, *, id: str, request_options: typing.Optional[RequestOptions] = None) -> None:
        """
        Delete a ridership account by Samsara ID.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            The Samsara UUID of the ridership account.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.delete_ridership_account(
            id="id",
        )
        """
        _response = self._raw_client.delete_ridership_account(id=id, request_options=request_options)
        return _response.data

    def get_ridership_account(
        self,
        id: str,
        *,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipAccountsGetRidershipAccountResponseBody:
        """
        Get a single ridership account by ID. The ID can be a Samsara UUID or an external ID in `key:value` format.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            ID of the ridership account. This can either be the Samsara-specified UUID, or an external ID. External IDs are customer-specified key-value pairs. To specify an external ID, use the following format: `key:value`. For example, `district:SPR-001`.

        include_external_ids : typing.Optional[bool]
            Optional boolean indicating whether to return external IDs on supported entities

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipAccountsGetRidershipAccountResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_ridership_account(
            id="id",
        )
        """
        _response = self._raw_client.get_ridership_account(
            id, include_external_ids=include_external_ids, request_options=request_options
        )
        return _response.data

    def list_ridership_passengers(
        self,
        *,
        account_id: str,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipPassengersListRidershipPassengersResponseBody:
        """
        List ridership passengers for an account.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        account_id : str
            The Samsara UUID of the ridership account to filter passengers by.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            The limit for how many objects will be in the response. Default and max for this value is 512 objects.

        include_external_ids : typing.Optional[bool]
            Optional boolean indicating whether to return external IDs on supported entities

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipPassengersListRidershipPassengersResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.list_ridership_passengers(
            account_id="accountId",
        )
        """
        _response = self._raw_client.list_ridership_passengers(
            account_id=account_id,
            after=after,
            limit=limit,
            include_external_ids=include_external_ids,
            request_options=request_options,
        )
        return _response.data

    def create_ridership_passenger(
        self,
        *,
        account_id: str,
        first_name: str,
        last_name: str,
        classification: typing.Optional[RidershipPassengersCreateRidershipPassengerRequestBodyClassification] = OMIT,
        external_ids: typing.Optional[typing.Dict[str, str]] = OMIT,
        identifiers: typing.Optional[typing.Sequence[RidershipPassengerIdentifierInputRequestBody]] = OMIT,
        special_instructions: typing.Optional[RidershipPassengerSpecialInstructionsInputRequestBody] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipPassengersCreateRidershipPassengerResponseBody:
        """
        Create a new ridership passenger.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        account_id : str
            The Samsara UUID of the ridership account this passenger belongs to.

        first_name : str
            First name of the passenger.

        last_name : str
            Last name of the passenger.

        classification : typing.Optional[RidershipPassengersCreateRidershipPassengerRequestBodyClassification]
            Classification or grade level of the passenger.  Valid values: `unknown`, `pk1`, `pk2`, `pk3`, `pk4`, `k`, `grade1`, `grade2`, `grade3`, `grade4`, `grade5`, `grade6`, `grade7`, `grade8`, `grade9`, `grade10`, `grade11`, `grade12`

        external_ids : typing.Optional[typing.Dict[str, str]]
            A map of external ids

        identifiers : typing.Optional[typing.Sequence[RidershipPassengerIdentifierInputRequestBody]]
            List of identifiers associated with the passenger.

        special_instructions : typing.Optional[RidershipPassengerSpecialInstructionsInputRequestBody]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipPassengersCreateRidershipPassengerResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.create_ridership_passenger(
            account_id="e4b2c3a5-7d6f-4e8b-9a0c-1b2d3e4f5a6b",
            first_name="John",
            last_name="Doe",
        )
        """
        _response = self._raw_client.create_ridership_passenger(
            account_id=account_id,
            first_name=first_name,
            last_name=last_name,
            classification=classification,
            external_ids=external_ids,
            identifiers=identifiers,
            special_instructions=special_instructions,
            request_options=request_options,
        )
        return _response.data

    def update_ridership_passenger(
        self,
        *,
        id: str,
        account_id: str,
        first_name: str,
        last_name: str,
        classification: typing.Optional[RidershipPassengersUpdateRidershipPassengerRequestBodyClassification] = OMIT,
        external_ids: typing.Optional[typing.Dict[str, str]] = OMIT,
        identifiers: typing.Optional[typing.Sequence[RidershipPassengerIdentifierInputRequestBody]] = OMIT,
        special_instructions: typing.Optional[RidershipPassengerSpecialInstructionsInputRequestBody] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipPassengersUpdateRidershipPassengerResponseBody:
        """
        Update a ridership passenger by Samsara ID. All provided fields will overwrite existing values (PUT semantics).

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            The Samsara UUID of the ridership passenger.

        account_id : str
            The Samsara UUID of the ridership account this passenger belongs to.

        first_name : str
            First name of the passenger.

        last_name : str
            Last name of the passenger.

        classification : typing.Optional[RidershipPassengersUpdateRidershipPassengerRequestBodyClassification]
            Classification or grade level of the passenger.  Valid values: `unknown`, `pk1`, `pk2`, `pk3`, `pk4`, `k`, `grade1`, `grade2`, `grade3`, `grade4`, `grade5`, `grade6`, `grade7`, `grade8`, `grade9`, `grade10`, `grade11`, `grade12`

        external_ids : typing.Optional[typing.Dict[str, str]]
            A map of external ids

        identifiers : typing.Optional[typing.Sequence[RidershipPassengerIdentifierInputRequestBody]]
            List of identifiers associated with the passenger.

        special_instructions : typing.Optional[RidershipPassengerSpecialInstructionsInputRequestBody]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipPassengersUpdateRidershipPassengerResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.update_ridership_passenger(
            id="id",
            account_id="e4b2c3a5-7d6f-4e8b-9a0c-1b2d3e4f5a6b",
            first_name="John",
            last_name="Doe",
        )
        """
        _response = self._raw_client.update_ridership_passenger(
            id=id,
            account_id=account_id,
            first_name=first_name,
            last_name=last_name,
            classification=classification,
            external_ids=external_ids,
            identifiers=identifiers,
            special_instructions=special_instructions,
            request_options=request_options,
        )
        return _response.data

    def delete_ridership_passenger(self, *, id: str, request_options: typing.Optional[RequestOptions] = None) -> None:
        """
        Delete a ridership passenger by Samsara ID.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            The Samsara UUID of the ridership passenger.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.delete_ridership_passenger(
            id="id",
        )
        """
        _response = self._raw_client.delete_ridership_passenger(id=id, request_options=request_options)
        return _response.data

    def get_ridership_passenger(
        self,
        id: str,
        *,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipPassengersGetRidershipPassengerResponseBody:
        """
        Get a single ridership passenger by ID. The ID can be a Samsara UUID or an external ID in `key:value` format.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            ID of the ridership passenger. This can either be the Samsara-specified UUID, or an external ID. External IDs are customer-specified key-value pairs. To specify an external ID, use the following format: `key:value`. For example, `student:STU-001`.

        include_external_ids : typing.Optional[bool]
            Optional boolean indicating whether to return external IDs on supported entities

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipPassengersGetRidershipPassengerResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_ridership_passenger(
            id="id",
        )
        """
        _response = self._raw_client.get_ridership_passenger(
            id, include_external_ids=include_external_ids, request_options=request_options
        )
        return _response.data

    def create_ridership_route_setup(
        self,
        *,
        account_id: str,
        passengers: typing.Sequence[RidershipRouteSetupPassengerInputRequestBody],
        route_id: str,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipRouteSetupsCreateRidershipRouteSetupResponseBody:
        """
        Create or replace the passenger assignment setup for a route.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        account_id : str
            The Samsara UUID of the ridership account.

        passengers : typing.Sequence[RidershipRouteSetupPassengerInputRequestBody]
            List of passenger assignments for the route.

        route_id : str
            The route ID. This is the Samsara route ID returned by the Routing API.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipRouteSetupsCreateRidershipRouteSetupResponseBody
            OK response.

        Examples
        --------
        from samsara import RidershipRouteSetupPassengerInputRequestBody, Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.create_ridership_route_setup(
            account_id="e4b2c3a5-7d6f-4e8b-9a0c-1b2d3e4f5a6b",
            passengers=[
                RidershipRouteSetupPassengerInputRequestBody(
                    passenger_id="a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
                )
            ],
            route_id="123456",
        )
        """
        _response = self._raw_client.create_ridership_route_setup(
            account_id=account_id, passengers=passengers, route_id=route_id, request_options=request_options
        )
        return _response.data

    def update_ridership_route_setup(
        self,
        *,
        route_id: str,
        account_id: str,
        passengers: typing.Sequence[RidershipRouteSetupPassengerInputRequestBody],
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipRouteSetupsUpdateRidershipRouteSetupResponseBody:
        """
        Update (replace) the passenger assignment setup for a route. All existing assignments will be replaced with the provided assignments.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        route_id : str
            The route ID. This is the Samsara route ID returned by the Routing API.

        account_id : str
            The Samsara UUID of the ridership account.

        passengers : typing.Sequence[RidershipRouteSetupPassengerInputRequestBody]
            List of passenger assignments for the route.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipRouteSetupsUpdateRidershipRouteSetupResponseBody
            OK response.

        Examples
        --------
        from samsara import RidershipRouteSetupPassengerInputRequestBody, Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.update_ridership_route_setup(
            route_id="routeId",
            account_id="e4b2c3a5-7d6f-4e8b-9a0c-1b2d3e4f5a6b",
            passengers=[
                RidershipRouteSetupPassengerInputRequestBody(
                    passenger_id="a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
                )
            ],
        )
        """
        _response = self._raw_client.update_ridership_route_setup(
            route_id=route_id, account_id=account_id, passengers=passengers, request_options=request_options
        )
        return _response.data

    def delete_ridership_route_setup(
        self, *, route_id: str, request_options: typing.Optional[RequestOptions] = None
    ) -> None:
        """
        Delete the passenger assignment setup for a route.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        route_id : str
            The route ID. This is the Samsara route ID returned by the Routing API.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.delete_ridership_route_setup(
            route_id="routeId",
        )
        """
        _response = self._raw_client.delete_ridership_route_setup(route_id=route_id, request_options=request_options)
        return _response.data

    def get_ridership_route_setup(
        self, route_id: str, *, request_options: typing.Optional[RequestOptions] = None
    ) -> RidershipRouteSetupsGetRidershipRouteSetupResponseBody:
        """
        Get the passenger assignment setup for a route by route ID.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        route_id : str
            The route ID. This is the Samsara route ID returned by the Routing API.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipRouteSetupsGetRidershipRouteSetupResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_ridership_route_setup(
            route_id="routeId",
        )
        """
        _response = self._raw_client.get_ridership_route_setup(route_id, request_options=request_options)
        return _response.data

    def get_driver_safety_scores(
        self,
        *,
        end_time: str,
        start_time: str,
        driver_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> SafetyScoresGetDriverSafetyScoresResponseBody:
        """
        Get safety scores and overall risk factors for drivers.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Safety Events & Scores** under the Safety & Cameras category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        end_time : str
            End time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end before this timestamp.

        start_time : str
            Start time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end after this timestamp. Can be up to 1 year before endTime.

        driver_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Comma separated list of driver IDs to filter by. Include up to 100 IDs. Defaults to all drivers.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SafetyScoresGetDriverSafetyScoresResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_driver_safety_scores(
            end_time="endTime",
            start_time="startTime",
        )
        """
        _response = self._raw_client.get_driver_safety_scores(
            end_time=end_time,
            start_time=start_time,
            driver_ids=driver_ids,
            after=after,
            request_options=request_options,
        )
        return _response.data

    def get_driver_safety_score_trips(
        self,
        *,
        end_time: str,
        start_time: str,
        driver_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> SafetyScoresGetDriverSafetyScoreTripsResponseBody:
        """
        Get trips contributing to a driver's safety score, and risk factors in each trip.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Safety Events & Scores** under the Safety & Cameras category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        end_time : str
            End time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end before this timestamp.

        start_time : str
            Start time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end after this timestamp. Can be up to 1 year before endTime.

        driver_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Comma separated list of driver IDs to fetch trip breakdowns for. Include up to 100 drivers.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SafetyScoresGetDriverSafetyScoreTripsResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_driver_safety_score_trips(
            end_time="endTime",
            start_time="startTime",
        )
        """
        _response = self._raw_client.get_driver_safety_score_trips(
            end_time=end_time,
            start_time=start_time,
            driver_ids=driver_ids,
            after=after,
            request_options=request_options,
        )
        return _response.data

    def get_tag_group_safety_scores(
        self,
        *,
        end_time: str,
        start_time: str,
        score_type: GetTagGroupSafetyScoresRequestScoreType,
        tag_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> SafetyScoresGetTagGroupSafetyScoresResponseBody:
        """
        Get a combined safety score and risk factors for a set of tags.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Safety Events & Scores** under the Safety & Cameras category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        end_time : str
            End time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end before this timestamp.

        start_time : str
            Start time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end after this timestamp. Can be up to 1 year before endTime.

        score_type : GetTagGroupSafetyScoresRequestScoreType
            Whether to calculate tag score with either all drivers or all vehicles in the tag. Deactivated drivers and unassigned trips are not included when calculating scores for drivers.   Valid values: `driver`, `vehicle`

        tag_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Comma separated list of tag IDs to filter by. Include up to 100 IDs. Defaults to all tags.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SafetyScoresGetTagGroupSafetyScoresResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_tag_group_safety_scores(
            end_time="endTime",
            start_time="startTime",
            score_type="driver",
        )
        """
        _response = self._raw_client.get_tag_group_safety_scores(
            end_time=end_time,
            start_time=start_time,
            score_type=score_type,
            tag_ids=tag_ids,
            request_options=request_options,
        )
        return _response.data

    def get_tag_safety_scores(
        self,
        *,
        end_time: str,
        start_time: str,
        score_type: GetTagSafetyScoresRequestScoreType,
        tag_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> SafetyScoresGetTagSafetyScoresResponseBody:
        """
        Get safety scores and overall risk factors for tags.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Safety Events & Scores** under the Safety & Cameras category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        end_time : str
            End time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end before this timestamp.

        start_time : str
            Start time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end after this timestamp. Can be up to 1 year before endTime.

        score_type : GetTagSafetyScoresRequestScoreType
            Whether to calculate tag score with either all drivers or all vehicles in the tag. Deactivated drivers and unassigned trips are not included when calculating scores for drivers.   Valid values: `driver`, `vehicle`

        tag_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Comma separated list of tag IDs to filter by. Include up to 100 IDs. Defaults to all tags.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SafetyScoresGetTagSafetyScoresResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_tag_safety_scores(
            end_time="endTime",
            start_time="startTime",
            score_type="driver",
        )
        """
        _response = self._raw_client.get_tag_safety_scores(
            end_time=end_time,
            start_time=start_time,
            score_type=score_type,
            tag_ids=tag_ids,
            after=after,
            request_options=request_options,
        )
        return _response.data

    def get_vehicle_safety_scores(
        self,
        *,
        end_time: str,
        start_time: str,
        vehicle_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> SafetyScoresGetVehicleSafetyScoresResponseBody:
        """
        Get safety scores and overall risk factors for vehicles.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Safety Events & Scores** under the Safety & Cameras category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        end_time : str
            End time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end before this timestamp.

        start_time : str
            Start time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end after this timestamp. Can be up to 1 year before endTime.

        vehicle_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Comma separated list of vehicle IDs to filter by. Include up to 100 IDs. Defaults to all vehicles.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SafetyScoresGetVehicleSafetyScoresResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_vehicle_safety_scores(
            end_time="endTime",
            start_time="startTime",
        )
        """
        _response = self._raw_client.get_vehicle_safety_scores(
            end_time=end_time,
            start_time=start_time,
            vehicle_ids=vehicle_ids,
            after=after,
            request_options=request_options,
        )
        return _response.data

    def get_vehicle_safety_score_trips(
        self,
        *,
        end_time: str,
        start_time: str,
        vehicle_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> SafetyScoresGetVehicleSafetyScoreTripsResponseBody:
        """
        Get trips contributing to a vehicle's safety score, and risk factors in each trip.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Safety Events & Scores** under the Safety & Cameras category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        end_time : str
            End time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end before this timestamp.

        start_time : str
            Start time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end after this timestamp. Can be up to 1 year before endTime.

        vehicle_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Comma separated list of vehicle IDs to fetch trip breakdowns for. Include up to 100 vehicles.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SafetyScoresGetVehicleSafetyScoreTripsResponseBody
            OK response.

        Examples
        --------
        from samsara import Samsara

        client = Samsara(
            token="YOUR_TOKEN",
        )
        client.beta_ap_is.get_vehicle_safety_score_trips(
            end_time="endTime",
            start_time="startTime",
        )
        """
        _response = self._raw_client.get_vehicle_safety_score_trips(
            end_time=end_time,
            start_time=start_time,
            vehicle_ids=vehicle_ids,
            after=after,
            request_options=request_options,
        )
        return _response.data


class AsyncBetaApIsClient:
    def __init__(self, *, client_wrapper: AsyncClientWrapper):
        self._raw_client = AsyncRawBetaApIsClient(client_wrapper=client_wrapper)

    @property
    def with_raw_response(self) -> AsyncRawBetaApIsClient:
        """
        Retrieves a raw implementation of this client that returns raw responses.

        Returns
        -------
        AsyncRawBetaApIsClient
        """
        return self._raw_client

    async def get_depreciation_transactions(
        self,
        *,
        start_time: typing.Optional[dt.datetime] = None,
        end_time: typing.Optional[dt.datetime] = None,
        asset_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> DepreciationGetDepreciationTransactionsResponseBody:
        """
        Returns depreciation and adjustment transactions for assets. Transactions are returned ordered by updatedAt in ascending order (oldest to newest). Use startTime parameter for incremental sync.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Assets** under the Assets category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        start_time : typing.Optional[dt.datetime]
            RFC 3339 timestamp. Returns transactions updated after this time. Compared against updatedAt. If not provided, returns all transactions. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        end_time : typing.Optional[dt.datetime]
            RFC 3339 timestamp. Returns transactions updated before this time. Compared against updatedAt. If not provided, behaves as an unending feed of changes. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        asset_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Filter by asset IDs. Up to 50 ids.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        DepreciationGetDepreciationTransactionsResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_depreciation_transactions()


        asyncio.run(main())
        """
        _response = await self._raw_client.get_depreciation_transactions(
            start_time=start_time, end_time=end_time, asset_ids=asset_ids, after=after, request_options=request_options
        )
        return _response.data

    async def get_assets_inputs(
        self,
        *,
        type: GetAssetsInputsRequestType,
        start_time: str,
        ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        end_time: typing.Optional[str] = None,
        include_external_ids: typing.Optional[bool] = None,
        include_tags: typing.Optional[bool] = None,
        include_attributes: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> AssetsInputsGetAssetsInputsResponseBody:
        """
        This endpoint will return data collected from the inputs of your organization's assets based on the time parameters passed in. Results are paginated. If you include an endTime, the endpoint will return data up until that point. If you don’t include an endTime, you can continue to poll the API real-time with the pagination cursor that gets returned on every call. The endpoint will only return data up until the endTime that has been processed by the server at the time of the original request. You will need to request the same [startTime, endTime) range again to receive data for assets processed after the original request time. This endpoint sorts data by time ascending.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Assets** under the Assets category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        type : GetAssetsInputsRequestType
            Input stat type to query for.  Valid values: `auxInput1`, `auxInput2`, `auxInput3`, `auxInput4`, `auxInput5`, `auxInput6`, `auxInput7`, `auxInput8`, `auxInput9`, `auxInput10`, `auxInput11`, `auxInput12`, `auxInput13`, `analogInput1Voltage`, `analogInput2Voltage`, `analogInput1Current`, `analogInput2Current`, `batteryVoltage`

        start_time : str
            A start time in RFC 3339 format. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Comma-separated list of asset IDs. Limited to 100 ID's for each request.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        end_time : typing.Optional[str]
             An end time in RFC 3339 format. Defaults to never if not provided; if not provided then pagination will not cease, and a valid pagination cursor will always be returned. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        include_external_ids : typing.Optional[bool]
            Optional boolean indicating whether to return external IDs on supported entities

        include_tags : typing.Optional[bool]
            Optional boolean indicating whether to return tags on supported entities

        include_attributes : typing.Optional[bool]
            Optional boolean indicating whether to return attributes on supported entities

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        AssetsInputsGetAssetsInputsResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_assets_inputs(
                type="auxInput1",
                start_time="startTime",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_assets_inputs(
            type=type,
            start_time=start_time,
            ids=ids,
            after=after,
            end_time=end_time,
            include_external_ids=include_external_ids,
            include_tags=include_tags,
            include_attributes=include_attributes,
            request_options=request_options,
        )
        return _response.data

    async def get_aemp_equipment_list(
        self, page_number: str, *, request_options: typing.Optional[RequestOptions] = None
    ) -> AempEquipmentGetAempEquipmentListResponseBody:
        """
        Get a list of equipment following the AEMP ISO 15143-3 standard.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read AEMP** under the Equipment category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        page_number : str
            The number corresponding to a specific page of paginated results, defaulting to the first page if not provided. The default page size is 100 records.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        AempEquipmentGetAempEquipmentListResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_aemp_equipment_list(
                page_number="pageNumber",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_aemp_equipment_list(page_number, request_options=request_options)
        return _response.data

    async def get_driver_efficiency(
        self,
        *,
        driver_activation_status: typing.Optional[GetDriverEfficiencyRequestDriverActivationStatus] = None,
        driver_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        driver_tag_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        driver_parent_tag_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        start_time: typing.Optional[dt.datetime] = None,
        end_time: typing.Optional[dt.datetime] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> DriverEfficienciesResponse:
        """
        Get all driver and associated vehicle efficiency data.

         This is a legacy endpoint, consider using this endpoint [/driver-efficiency/drivers](https://developers.samsara.com/reference/getdriverefficiencybydrivers) instead. The endpoint will continue to function as documented.

         <b>Rate limit:</b> 50 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        To use this endpoint, select **Read Fuel & Energy** under the Fuel & Energy category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>

        Parameters
        ----------
        driver_activation_status : typing.Optional[GetDriverEfficiencyRequestDriverActivationStatus]
            If value is `deactivated`, only drivers that are deactivated will appear in the response. This parameter will default to `active` if not provided (fetching only active drivers).

        driver_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            A filter on the data based on this comma-separated list of driver IDs. Cannot be used with tag filtering or driver status. Example: `driverIds=1234,5678`

        after : typing.Optional[str]
            If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        driver_tag_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Filters summary to drivers based on this comma-separated list of tag IDs. Data from all the drivers' respective vehicles will be included in the summary, regardless of which tag the vehicle is associated with. Should not be provided in addition to `driverIds`. Example: driverTagIds=1234,5678

        driver_parent_tag_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Filters like `driverTagIds` but includes descendants of all the given parent tags. Should not be provided in addition to `driverIds`. Example: `driverParentTagIds=1234,5678`

        start_time : typing.Optional[dt.datetime]
            A start time in RFC 3339 format. The results will be truncated to the hour mark for the provided time. For example, if `startTime` is 2020-03-17T12:06:19Z then the results will include data starting from 2020-03-17T12:00:00Z. The provided start time cannot be in the future. Start time can be at most 31 days before the end time. If the start time is within the last hour, the results will be empty. Default: 24 hours prior to endTime.

            Note that the most recent 72 hours of data may still be processing and is subject to change and latency, so it is not recommended to request data for the most recent 72 hours.

        end_time : typing.Optional[dt.datetime]
            An end time in RFC 3339 format. The results will be truncated to the hour mark for the provided time. For example, if `endTime` is 2020-03-17T12:06:19Z then the results will include data up until 2020-03-17T12:00:00Z. The provided end time cannot be in the future. End time can be at most 31 days after the start time. Default: The current time truncated to the hour mark.

            Note that the most recent 72 hours of data may still be processing and is subject to change and latency, so it is not recommended to request data for the most recent 72 hours

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        DriverEfficienciesResponse
            List of all driver and associated vehicle efficiency data

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_driver_efficiency()


        asyncio.run(main())
        """
        _response = await self._raw_client.get_driver_efficiency(
            driver_activation_status=driver_activation_status,
            driver_ids=driver_ids,
            after=after,
            driver_tag_ids=driver_tag_ids,
            driver_parent_tag_ids=driver_parent_tag_ids,
            start_time=start_time,
            end_time=end_time,
            request_options=request_options,
        )
        return _response.data

    async def patch_equipment(
        self,
        id: str,
        *,
        attributes: typing.Optional[typing.Sequence[GoaAttributeTiny]] = OMIT,
        engine_hours: typing.Optional[int] = OMIT,
        equipment_serial_number: typing.Optional[str] = OMIT,
        external_ids: typing.Optional[typing.Dict[str, str]] = OMIT,
        name: typing.Optional[str] = OMIT,
        notes: typing.Optional[str] = OMIT,
        odometer_meters: typing.Optional[int] = OMIT,
        tag_ids: typing.Optional[typing.Sequence[str]] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> EquipmentPatchEquipmentResponseBody:
        """
        Update an equipment.  **Note** this implementation of patch uses [the JSON merge patch](https://tools.ietf.org/html/rfc7396) proposed standard.
         This means that any fields included in the patch request will _overwrite_ fields which exist on the target resource.
         For arrays, this means any array included in the request will _replace_ the array that exists at the specified path, it will not _add_ to the existing array

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Equipment** under the Equipment category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            The unique Samsara ID of the Equipment. This is automatically generated when the Equipment object is created. It cannot be changed.

        attributes : typing.Optional[typing.Sequence[GoaAttributeTiny]]
            List of attributes associated with the entity

        engine_hours : typing.Optional[int]
            When you provide a manual engine hours override, Samsara will begin updating a equipment's engine hours used since this override was set.

        equipment_serial_number : typing.Optional[str]
            The serial number of the equipment.

        external_ids : typing.Optional[typing.Dict[str, str]]
            A map of external ids

        name : typing.Optional[str]
            The human-readable name of the Equipment. This is set by a fleet administrator and will appear in both Samsara’s cloud dashboard as well as the Samsara Driver mobile app. By default, this name is the serial number of the Samsara Asset Gateway. It can be set or updated through the Samsara Dashboard or through the API at any time.

        notes : typing.Optional[str]
            These are generic notes about the Equipment. Empty by default. Can be set or updated through the Samsara Dashboard or the API at any time.

        odometer_meters : typing.Optional[int]
            When you provide a manual odometer override, Samsara will begin updating a equipment's odometer using GPS distance traveled since this override was set.

        tag_ids : typing.Optional[typing.Sequence[str]]
            An array of IDs of tags to associate with this equipment. If your access to the API is scoped by one or more tags, this field is required to pass in.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        EquipmentPatchEquipmentResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.patch_equipment(
                id="id",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.patch_equipment(
            id,
            attributes=attributes,
            engine_hours=engine_hours,
            equipment_serial_number=equipment_serial_number,
            external_ids=external_ids,
            name=name,
            notes=notes,
            odometer_meters=odometer_meters,
            tag_ids=tag_ids,
            request_options=request_options,
        )
        return _response.data

    async def get_hos_eld_events(
        self,
        *,
        start_time: str,
        end_time: str,
        driver_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        tag_ids: typing.Optional[str] = None,
        parent_tag_ids: typing.Optional[str] = None,
        driver_activation_status: typing.Optional[GetHosEldEventsRequestDriverActivationStatus] = None,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> HosEldEventsGetHosEldEventsResponseBody:
        """
        Get all HOS ELD events in a time range, grouped by driver. Attributes will be populated depending on which ELD Event Type is being returned.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read ELD Compliance Settings (US)** under the Compliance category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        start_time : str
             A start time in RFC 3339 format. Defaults to now if not provided. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        end_time : str
             An end time in RFC 3339 format. Defaults to now if not provided. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        driver_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
             A filter on the data based on this comma-separated list of driver IDs and externalIds. Example: `driverIds=1234,5678,payroll:4841`

        tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of tag IDs. Example: `tagIds=1234,5678`

        parent_tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of parent tag IDs, for use by orgs with tag hierarchies. Specifying a parent tag will implicitly include all descendent tags of the parent tag. Example: `parentTagIds=345,678`

        driver_activation_status : typing.Optional[GetHosEldEventsRequestDriverActivationStatus]
            If value is `deactivated`, only drivers that are deactivated will appear in the response. This parameter will default to `active` if not provided (fetching only active drivers).  Valid values: `active`, `deactivated`

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            The limit for how many objects will be in the response. Default and max for this value is 25 objects.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        HosEldEventsGetHosEldEventsResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_hos_eld_events(
                start_time="startTime",
                end_time="endTime",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_hos_eld_events(
            start_time=start_time,
            end_time=end_time,
            driver_ids=driver_ids,
            tag_ids=tag_ids,
            parent_tag_ids=parent_tag_ids,
            driver_activation_status=driver_activation_status,
            after=after,
            limit=limit,
            request_options=request_options,
        )
        return _response.data

    async def get_trailer_stats_snapshot(
        self,
        *,
        types: str,
        tag_ids: typing.Optional[str] = None,
        parent_tag_ids: typing.Optional[str] = None,
        after: typing.Optional[str] = None,
        trailer_ids: typing.Optional[str] = None,
        time: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> TrailerStatsGetTrailerStatsSnapshotResponseBody:
        """
        Returns the last known stats of all trailers at the given `time`. If no `time` is specified, the current time is used.

         <b>Rate limit:</b> 25 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Trailer Statistics** under the Trailers category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        types : str
            The stat types you want this endpoint to return information on.

            You may list **up to 3** types using comma-separated format. For example: `types=gps,reeferAmbientAirTemperatureMilliC,gpsOdometerMeters`.

            * `gps`: GPS data including lat/long, heading, speed, and a reverse geocode address.
            * `gpsOdometerMeters`: Odometer reading provided by GPS calculations. You must provide a manual odometer reading before this value is updated. Manual odometer readings can be provided via the PATCH /fleet/trailers/{id} endpoint or through the [cloud dashboard](https://kb.samsara.com/hc/en-us/articles/115005273667-Editing-Odometer-Reading). Odometer readings wthat are manually set will update as GPS trip data is gathered.
            * `reeferAmbientAirTemperatureMilliC`: The ambient air temperature reading of the reefer in millidegree Celsius.
            * `reeferObdEngineSeconds`: The cumulative number of seconds the reefer has run according to onboard diagnostics. Only supported on reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone1`: The supply or discharge air temperature zone 1 in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone2`: The supply or discharge air temperature zone 2 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone3`: The supply or discharge air temperature zone 3 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferFuelPercent`: The fuel level of the reefer unit in percentage points (e.g. `99`, `50`, etc). Only supported on reefer solutions.
            * `carrierReeferState`: The overall state of the reefer (`Off`, `On`). Only supported on multizone Carrier reefer solutions.
            * `reeferStateZone1`: The state of the reefer in zone 1. For single zone reefers, this applies tot he single zone. Only supported on multizone reefer solutions.
            * `reeferStateZone2`: The state of the reefer in zone 2. Only supported on multizone reefer solutions.
            * `reeferStateZone3`: The state of the reefer in zone 3. Only supported on multizone reefer solutions.
            * `reeferRunMode`: The operational mode of the reefer (`Start/Stop`, `Continuous`)
            * `reeferAlarms`: Any alarms that are present on the reefer. Only supported on reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone1`: The return air temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone2`: The return air temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone3`: The return air temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone1`: The set point temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone2`: The set point temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone3`: The set point temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone1`: The door status in zone 1 of the reefer. For single zone reefers, this applies to the single zone.
            * `reeferDoorStateZone2`: The door status in zone 2 of the reefer. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone3`: The door status in zone 3 of the reefer. Only supported on multizone reefer solutions.

        tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of tag IDs. Example: `tagIds=1234,5678`

        parent_tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of parent tag IDs, for use by orgs with tag hierarchies. Specifying a parent tag will implicitly include all descendent tags of the parent tag. Example: `parentTagIds=345,678`

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        trailer_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of trailer IDs and externalIds. Example: `trailerIds=1234,5678,samsara.vin:1HGBH41JXMN109186`

        time : typing.Optional[str]
             A filter on the data that returns the last known data points with timestamps less than or equal to this value. Defaults to now if not provided. Must be a string in RFC 3339 Format. Millisecond precision and timezones are supported.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        TrailerStatsGetTrailerStatsSnapshotResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_trailer_stats_snapshot(
                types="types",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_trailer_stats_snapshot(
            types=types,
            tag_ids=tag_ids,
            parent_tag_ids=parent_tag_ids,
            after=after,
            trailer_ids=trailer_ids,
            time=time,
            request_options=request_options,
        )
        return _response.data

    async def get_trailer_stats_feed(
        self,
        *,
        types: str,
        tag_ids: typing.Optional[str] = None,
        parent_tag_ids: typing.Optional[str] = None,
        after: typing.Optional[str] = None,
        trailer_ids: typing.Optional[str] = None,
        decorations: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> TrailerStatsGetTrailerStatsFeedResponseBody:
        """
        Follow a feed of trailer stats.

        The first call to this endpoint will provide the most recent stats for each trailer and an `endCursor`.

        Providing the `endCursor` value to the `after` query parameter will fetch all updates since the previous API call.

        If `hasNextPage` is false, no new data is immediately available. Please wait a minimum of 5 seconds before making a subsequent request.

         <b>Rate limit:</b> 25 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Trailer Statistics** under the Trailers category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        types : str
            The stat types you want this endpoint to return information on.

            You may list **up to 3** types using comma-separated format. For example: `types=gps,reeferAmbientAirTemperatureMilliC,gpsOdometerMeters`.

            * `gps`: GPS data including lat/long, heading, speed, and a reverse geocode address.
            * `gpsOdometerMeters`: Odometer reading provided by GPS calculations. You must provide a manual odometer reading before this value is updated. Manual odometer readings can be provided via the PATCH /fleet/trailers/{id} endpoint or through the [cloud dashboard](https://kb.samsara.com/hc/en-us/articles/115005273667-Editing-Odometer-Reading). Odometer readings wthat are manually set will update as GPS trip data is gathered.
            * `reeferAmbientAirTemperatureMilliC`: The ambient air temperature reading of the reefer in millidegree Celsius.
            * `reeferObdEngineSeconds`: The cumulative number of seconds the reefer has run according to onboard diagnostics. Only supported on reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone1`: The supply or discharge air temperature zone 1 in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone2`: The supply or discharge air temperature zone 2 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone3`: The supply or discharge air temperature zone 3 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferFuelPercent`: The fuel level of the reefer unit in percentage points (e.g. `99`, `50`, etc). Only supported on reefer solutions.
            * `carrierReeferState`: The overall state of the reefer (`Off`, `On`). Only supported on multizone Carrier reefer solutions.
            * `reeferStateZone1`: The state of the reefer in zone 1. For single zone reefers, this applies tot he single zone. Only supported on multizone reefer solutions.
            * `reeferStateZone2`: The state of the reefer in zone 2. Only supported on multizone reefer solutions.
            * `reeferStateZone3`: The state of the reefer in zone 3. Only supported on multizone reefer solutions.
            * `reeferRunMode`: The operational mode of the reefer (`Start/Stop`, `Continuous`)
            * `reeferAlarms`: Any alarms that are present on the reefer. Only supported on reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone1`: The return air temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone2`: The return air temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone3`: The return air temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone1`: The set point temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone2`: The set point temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone3`: The set point temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone1`: The door status in zone 1 of the reefer. For single zone reefers, this applies to the single zone.
            * `reeferDoorStateZone2`: The door status in zone 2 of the reefer. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone3`: The door status in zone 3 of the reefer. Only supported on multizone reefer solutions.

        tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of tag IDs. Example: `tagIds=1234,5678`

        parent_tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of parent tag IDs, for use by orgs with tag hierarchies. Specifying a parent tag will implicitly include all descendent tags of the parent tag. Example: `parentTagIds=345,678`

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        trailer_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of trailer IDs and externalIds. Example: `trailerIds=1234,5678,samsara.vin:1HGBH41JXMN109186`

        decorations : typing.Optional[str]
            Decorations add to the primary stats listed in the `types` parameter. For example, if you wish to know the trailer's location whenever the odometer updates, you may set `types=gpsOdometerMeters&decorations=gps`.

            You may list **up to 2** types using comma-separated format. If multiple stats are listed in the types parameter, the decorations will be added to each type. For example: `types=reeferStateZone1,reeferAmbientAirTemperatureMilliC,gpsOdometerMeters&decorations=gps` will list GPS decorations for each reeferStateZone1 reading, each reeferAmbientAirTemperatureMilliC reding, and gpsOdometerMeters reading.

            Note that decorations may significantly increase the response payload size.

            * `gps`: GPS data including lat/long, heading, speed, and a reverse geocode address.
            * `gpsOdometerMeters`: Odometer reading provided by GPS calculations. You must provide a manual odometer reading before this value is updated. Manual odometer readings can be provided via the PATCH /fleet/trailers/{id} endpoint or through the [cloud dashboard](https://kb.samsara.com/hc/en-us/articles/115005273667-Editing-Odometer-Reading). Odometer readings wthat are manually set will update as GPS trip data is gathered.
            * `reeferAmbientAirTemperatureMilliC`: The ambient air temperature reading of the reefer in millidegree Celsius.
            * `reeferObdEngineSeconds`: The cumulative number of seconds the reefer has run according to onboard diagnostics. Only supported on reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone1`: The supply or discharge air temperature zone 1 in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone2`: The supply or discharge air temperature zone 2 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone3`: The supply or discharge air temperature zone 3 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferFuelPercent`: The fuel level of the reefer unit in percentage points (e.g. `99`, `50`, etc). Only supported on reefer solutions.
            * `carrierReeferState`: The overall state of the reefer (`Off`, `On`). Only supported on multizone Carrier reefer solutions.
            * `reeferStateZone1`: The state of the reefer in zone 1. For single zone reefers, this applies tot he single zone. Only supported on multizone reefer solutions.
            * `reeferStateZone2`: The state of the reefer in zone 2. Only supported on multizone reefer solutions.
            * `reeferStateZone3`: The state of the reefer in zone 3. Only supported on multizone reefer solutions.
            * `reeferRunMode`: The operational mode of the reefer (`Start/Stop`, `Continuous`)
            * `reeferAlarms`: Any alarms that are present on the reefer. Only supported on reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone1`: The return air temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone2`: The return air temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone3`: The return air temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone1`: The set point temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone2`: The set point temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone3`: The set point temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone1`: The door status in zone 1 of the reefer. For single zone reefers, this applies to the single zone.
            * `reeferDoorStateZone2`: The door status in zone 2 of the reefer. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone3`: The door status in zone 3 of the reefer. Only supported on multizone reefer solutions.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        TrailerStatsGetTrailerStatsFeedResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_trailer_stats_feed(
                types="types",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_trailer_stats_feed(
            types=types,
            tag_ids=tag_ids,
            parent_tag_ids=parent_tag_ids,
            after=after,
            trailer_ids=trailer_ids,
            decorations=decorations,
            request_options=request_options,
        )
        return _response.data

    async def get_trailer_stats_history(
        self,
        *,
        start_time: str,
        end_time: str,
        types: str,
        tag_ids: typing.Optional[str] = None,
        parent_tag_ids: typing.Optional[str] = None,
        after: typing.Optional[str] = None,
        trailer_ids: typing.Optional[str] = None,
        decorations: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> TrailerStatsGetTrailerStatsHistoryResponseBody:
        """
        Returns trailer stats during the given time range for all trailers. This can be optionally filtered by tags or specific trailer IDs.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Trailer Statistics** under the Trailers category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        start_time : str
             A start time in RFC 3339 format. Defaults to now if not provided. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        end_time : str
             An end time in RFC 3339 format. Defaults to now if not provided. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        types : str
            The stat types you want this endpoint to return information on.

            You may list **up to 3** types using comma-separated format. For example: `types=gps,reeferAmbientAirTemperatureMilliC,gpsOdometerMeters`.

            * `gps`: GPS data including lat/long, heading, speed, and a reverse geocode address.
            * `gpsOdometerMeters`: Odometer reading provided by GPS calculations. You must provide a manual odometer reading before this value is updated. Manual odometer readings can be provided via the PATCH /fleet/trailers/{id} endpoint or through the [cloud dashboard](https://kb.samsara.com/hc/en-us/articles/115005273667-Editing-Odometer-Reading). Odometer readings wthat are manually set will update as GPS trip data is gathered.
            * `reeferAmbientAirTemperatureMilliC`: The ambient air temperature reading of the reefer in millidegree Celsius.
            * `reeferObdEngineSeconds`: The cumulative number of seconds the reefer has run according to onboard diagnostics. Only supported on reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone1`: The supply or discharge air temperature zone 1 in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone2`: The supply or discharge air temperature zone 2 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone3`: The supply or discharge air temperature zone 3 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferFuelPercent`: The fuel level of the reefer unit in percentage points (e.g. `99`, `50`, etc). Only supported on reefer solutions.
            * `carrierReeferState`: The overall state of the reefer (`Off`, `On`). Only supported on multizone Carrier reefer solutions.
            * `reeferStateZone1`: The state of the reefer in zone 1. For single zone reefers, this applies tot he single zone. Only supported on multizone reefer solutions.
            * `reeferStateZone2`: The state of the reefer in zone 2. Only supported on multizone reefer solutions.
            * `reeferStateZone3`: The state of the reefer in zone 3. Only supported on multizone reefer solutions.
            * `reeferRunMode`: The operational mode of the reefer (`Start/Stop`, `Continuous`)
            * `reeferAlarms`: Any alarms that are present on the reefer. Only supported on reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone1`: The return air temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone2`: The return air temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone3`: The return air temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone1`: The set point temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone2`: The set point temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone3`: The set point temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone1`: The door status in zone 1 of the reefer. For single zone reefers, this applies to the single zone.
            * `reeferDoorStateZone2`: The door status in zone 2 of the reefer. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone3`: The door status in zone 3 of the reefer. Only supported on multizone reefer solutions.

        tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of tag IDs. Example: `tagIds=1234,5678`

        parent_tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of parent tag IDs, for use by orgs with tag hierarchies. Specifying a parent tag will implicitly include all descendent tags of the parent tag. Example: `parentTagIds=345,678`

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        trailer_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of trailer IDs and externalIds. Example: `trailerIds=1234,5678,samsara.vin:1HGBH41JXMN109186`

        decorations : typing.Optional[str]
            Decorations add to the primary stats listed in the `types` parameter. For example, if you wish to know the trailer's location whenever the odometer updates, you may set `types=gpsOdometerMeters&decorations=gps`.

            You may list **up to 2** types using comma-separated format. If multiple stats are listed in the types parameter, the decorations will be added to each type. For example: `types=reeferStateZone1,reeferAmbientAirTemperatureMilliC,gpsOdometerMeters&decorations=gps` will list GPS decorations for each reeferStateZone1 reading, each reeferAmbientAirTemperatureMilliC reding, and gpsOdometerMeters reading.

            Note that decorations may significantly increase the response payload size.

            * `gps`: GPS data including lat/long, heading, speed, and a reverse geocode address.
            * `gpsOdometerMeters`: Odometer reading provided by GPS calculations. You must provide a manual odometer reading before this value is updated. Manual odometer readings can be provided via the PATCH /fleet/trailers/{id} endpoint or through the [cloud dashboard](https://kb.samsara.com/hc/en-us/articles/115005273667-Editing-Odometer-Reading). Odometer readings wthat are manually set will update as GPS trip data is gathered.
            * `reeferAmbientAirTemperatureMilliC`: The ambient air temperature reading of the reefer in millidegree Celsius.
            * `reeferObdEngineSeconds`: The cumulative number of seconds the reefer has run according to onboard diagnostics. Only supported on reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone1`: The supply or discharge air temperature zone 1 in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone2`: The supply or discharge air temperature zone 2 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSupplyAirTemperatureMilliCZone3`: The supply or discharge air temperature zone 3 in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferFuelPercent`: The fuel level of the reefer unit in percentage points (e.g. `99`, `50`, etc). Only supported on reefer solutions.
            * `carrierReeferState`: The overall state of the reefer (`Off`, `On`). Only supported on multizone Carrier reefer solutions.
            * `reeferStateZone1`: The state of the reefer in zone 1. For single zone reefers, this applies tot he single zone. Only supported on multizone reefer solutions.
            * `reeferStateZone2`: The state of the reefer in zone 2. Only supported on multizone reefer solutions.
            * `reeferStateZone3`: The state of the reefer in zone 3. Only supported on multizone reefer solutions.
            * `reeferRunMode`: The operational mode of the reefer (`Start/Stop`, `Continuous`)
            * `reeferAlarms`: Any alarms that are present on the reefer. Only supported on reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone1`: The return air temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone2`: The return air temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferReturnAirTemperatureMilliCZone3`: The return air temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone1`: The set point temperature in zone 1 of the reefer in millidegrees Celsius. For single zone reefers, this applies to the single zone. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone2`: The set point temperature in zone 2 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferSetPointTemperatureMilliCZone3`: The set point temperature in zone 3 of the reefer in millidegrees Celsius. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone1`: The door status in zone 1 of the reefer. For single zone reefers, this applies to the single zone.
            * `reeferDoorStateZone2`: The door status in zone 2 of the reefer. Only supported on multizone reefer solutions.
            * `reeferDoorStateZone3`: The door status in zone 3 of the reefer. Only supported on multizone reefer solutions.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        TrailerStatsGetTrailerStatsHistoryResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_trailer_stats_history(
                start_time="startTime",
                end_time="endTime",
                types="types",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_trailer_stats_history(
            start_time=start_time,
            end_time=end_time,
            types=types,
            tag_ids=tag_ids,
            parent_tag_ids=parent_tag_ids,
            after=after,
            trailer_ids=trailer_ids,
            decorations=decorations,
            request_options=request_options,
        )
        return _response.data

    async def update_engine_immobilizer_state(
        self,
        id: int,
        *,
        relay_states: typing.Sequence[UpdateEngineImmobilizerRelayStateRequestBodyRequestBody],
        request_options: typing.Optional[RequestOptions] = None,
    ) -> None:
        """
        Update the engine immobilizer state of a vehicle. This requires an engine immobilizer to be installed on the vehicle gateway.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Vehicle Immobilization** under the Vehicles category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : int
            Vehicle ID

        relay_states : typing.Sequence[UpdateEngineImmobilizerRelayStateRequestBodyRequestBody]
            A list of relay states. If a relay is omitted, its state won't be updated. If the list is empty, a 400 bad request status code will be returned. If there are multiple states for the same relay, a 400 bad request status code will be returned.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        import asyncio

        from samsara import (
            AsyncSamsara,
            UpdateEngineImmobilizerRelayStateRequestBodyRequestBody,
        )

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.update_engine_immobilizer_state(
                id=1000000,
                relay_states=[
                    UpdateEngineImmobilizerRelayStateRequestBodyRequestBody(
                        id="relay1",
                        is_open=True,
                    )
                ],
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.update_engine_immobilizer_state(
            id, relay_states=relay_states, request_options=request_options
        )
        return _response.data

    async def get_jobs(
        self,
        *,
        id: typing.Optional[str] = None,
        start_date: typing.Optional[str] = None,
        end_date: typing.Optional[str] = None,
        industrial_asset_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        fleet_device_ids: typing.Optional[typing.Union[int, typing.Sequence[int]]] = None,
        status: typing.Optional[GetJobsRequestStatus] = None,
        customer_name: typing.Optional[str] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> JobsGetJobsResponseBody:
        """
        Fetches jobs based on id/uuid or provided filters.

        To use this endpoint, select **Read Jobs** under the Equipment category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : typing.Optional[str]
            A jobId or uuid in STRING format. JobId must be prefixed with `jobId:`(Examples: `"8d218e6c-7a16-4f9f-90f7-cc1d93b9e596"`, `"jobId:98765"`).

        start_date : typing.Optional[str]
             A start time in RFC 3339 format. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        end_date : typing.Optional[str]
             An end time in RFC 3339 format. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        industrial_asset_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            IndustrialAssetId in STRING format. (Example: `"8d218e6c-7a16-4f9f-90f7-cc1d93b9e596"`).

        fleet_device_ids : typing.Optional[typing.Union[int, typing.Sequence[int]]]
            FleetDeviceId in INTEGER format. (Example: `123456`).

        status : typing.Optional[GetJobsRequestStatus]
            A job status in STRING format. Job statuses can be one of three (ignores case): `"active", "scheduled", "completed"`  Valid values: `active`, `scheduled`, `completed`

        customer_name : typing.Optional[str]
            Customer name to filter by

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        JobsGetJobsResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_jobs()


        asyncio.run(main())
        """
        _response = await self._raw_client.get_jobs(
            id=id,
            start_date=start_date,
            end_date=end_date,
            industrial_asset_ids=industrial_asset_ids,
            fleet_device_ids=fleet_device_ids,
            status=status,
            customer_name=customer_name,
            after=after,
            request_options=request_options,
        )
        return _response.data

    async def create_job(
        self, *, job: PostJobObjectRequestBody, request_options: typing.Optional[RequestOptions] = None
    ) -> JobsCreateJobResponseBody:
        """
        Creates a new job and returns it.

        To use this endpoint, select **Write Jobs** under the Equipment category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        job : PostJobObjectRequestBody

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        JobsCreateJobResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara, PostJobObjectRequestBody

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.create_job(
                job=PostJobObjectRequestBody(
                    end_date="2019-06-13T19:08:25Z",
                    id="8d218e6c-7a16-4f9f-90f7-cc1d93b9e596",
                    name="My Job Name",
                    start_date="2019-06-13T19:08:25Z",
                ),
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.create_job(job=job, request_options=request_options)
        return _response.data

    async def delete_job(
        self, *, id: str, request_options: typing.Optional[RequestOptions] = None
    ) -> JobsDeleteJobResponseBody:
        """
        Deletes an existing job.

        To use this endpoint, select **Write Jobs** under the Equipment category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            A jobId or uuid in STRING format. JobId must be prefixed with `jobId:`(Examples: `"8d218e6c-7a16-4f9f-90f7-cc1d93b9e596"`, `"jobId:98765"`).

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        JobsDeleteJobResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.delete_job(
                id="id",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.delete_job(id=id, request_options=request_options)
        return _response.data

    async def patch_job(
        self,
        *,
        id: str,
        job: PatchJobObjectRequestBody,
        keep_history: typing.Optional[bool] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> JobsPatchJobResponseBody:
        """
        Patches an existing job and returns it.

        To use this endpoint, select **Write Jobs** under the Equipment category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            A jobId or uuid in STRING format. JobId must be prefixed with `jobId:`(Examples: `"8d218e6c-7a16-4f9f-90f7-cc1d93b9e596"`, `"jobId:98765"`).

        job : PatchJobObjectRequestBody

        keep_history : typing.Optional[bool]
            Defaults to true if user does not want to overwrite entire history for an active job (irrelevant for scheduled/completed jobs)

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        JobsPatchJobResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara, PatchJobObjectRequestBody

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.patch_job(
                id="id",
                job=PatchJobObjectRequestBody(),
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.patch_job(
            id=id, job=job, keep_history=keep_history, request_options=request_options
        )
        return _response.data

    async def get_detections(
        self,
        *,
        start_time: str,
        driver_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        asset_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        detection_behavior_labels: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        inbox_filter_reason: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        inbox_event: typing.Optional[bool] = None,
        in_cab_alert_played: typing.Optional[bool] = None,
        tag_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        include_asset: typing.Optional[bool] = None,
        include_driver: typing.Optional[bool] = None,
        end_time: typing.Optional[str] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> DetectionLogGetDetectionsResponseBody:
        """
        This endpoint will return all detections detected by in-vehicle assets and associated metadata. To get core endpoint data, select View Safety Detection Log under the Safety & Cameras category when creating or editing an API token.

        If you include an endTime, the endpoint will return data up until that point. If you don’t include an endTime, you can continue to poll the API real-time with the pagination cursor that gets returned on every call. Results are paginated.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Detection Log** under the Safety & Cameras category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        start_time : str
            Required RFC 3339 timestamp that indicates when to begin receiving data. Value is compared against `updatedAtTime`. (Example: 2024-04-16T19:08:25Z)

        driver_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional string of comma separated driver IDs. If driver ID is present, events for the specified driver(s) will be returned. Max for this value is 2000 objects. (Example: 281474982859091,281471982957527)

        asset_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional string of comma separated asset IDs. If asset ID is present, events for the specified asset(s) will be returned. Max for this value is 2000 objects. (Example: 281474982859091,281471982957527)

        detection_behavior_labels : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional string of comma separated labels to filter behavior labels. Uses OR semantics for filtering. An empty list allows all values. Valid values: `acceleration`, `braking`, `crash`, `drowsy`, `eatingDrinking`, `edgeRailroadCrossingViolation`, `followingDistance`, `forwardCollisionWarning`, `genericDistraction`, `harshTurn`, `heavySpeeding`, `laneDeparture`, `lightSpeeding`, `maxSpeed`, `mobileUsage`, `moderateSpeeding`, `noSeatbelt`, `obstructedCamera`, `passenger`, `policyViolationMask`, `ranRedLight`, `rearCollisionWarning`, `rollingStop`, `rolloverProtection`, `severeSpeeding`, `smoking`, `speeding`, `unsafeParking`, `vehicleInBlindSpotWarning`, `vulnerableRoadUserCollisionWarning`, `yawControl`. (Example: rollingStop,obstructedCamera,noSeatbelt)

        inbox_filter_reason : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional string of comma separated reasons to filter detections. Uses OR semantics for filtering. An empty list allows all values. Valid values: `overDailyLimit`, `overHourlyLimit`, `overTripLimit`, `belowConfidenceThreshold`, `belowSeverityThreshold`, `overEventRateLimit`, `geofenceFilter`, `belowNudgeThreshold`, `belowSpeedThreshold`, `nighttimeFilter`, `speedingFilter`, `inCabAlertOnly`, `unknown`. (Example: overDailyLimit,overHourlyLimit,belowConfidenceThreshold)

        inbox_event : typing.Optional[bool]
            Indicates whether or not to return detections with an associated Safety Inbox event. An empty entry allows all values. (Example: true)

        in_cab_alert_played : typing.Optional[bool]
            Indicates whether or not to return detections where in-cab alert played. An empty entry allows all values. (Example: true)

        tag_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            An optional filter on the data based on this comma-separated list of tag IDs. The filtering is OR inclusive for asset and driver tags. (Example: 1234,5678)

        include_asset : typing.Optional[bool]
            Indicates whether or not to return expanded data for asset objects. (Example: true)

        include_driver : typing.Optional[bool]
            Indicates whether or not to return expanded data for driver objects. (Example: true)

        end_time : typing.Optional[str]
            Optional RFC 3339 timestamp. If not provided then the endpoint behaves as an unending feed of changes. If endTime is set the same as startTime, the most recent data point before that time will be returned per asset. Value is compared against `updatedAtTime`. (Example: 2024-04-23T19:08:25Z)

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        DetectionLogGetDetectionsResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_detections(
                start_time="startTime",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_detections(
            start_time=start_time,
            driver_ids=driver_ids,
            asset_ids=asset_ids,
            detection_behavior_labels=detection_behavior_labels,
            inbox_filter_reason=inbox_filter_reason,
            inbox_event=inbox_event,
            in_cab_alert_played=in_cab_alert_played,
            tag_ids=tag_ids,
            include_asset=include_asset,
            include_driver=include_driver,
            end_time=end_time,
            after=after,
            request_options=request_options,
        )
        return _response.data

    async def get_devices(
        self,
        *,
        models: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        health_statuses: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        include_health: typing.Optional[bool] = None,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        include_tags: typing.Optional[bool] = None,
        tag_ids: typing.Optional[str] = None,
        parent_tag_ids: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> DevicesGetDevicesResponseBody:
        """
        Returns all installed cameras (CM3x), vehicle gateways (VGs), and asset gateways (AGs) and their health information within an organization.

        **Beta:** This endpoint is in beta and is likely to change before being broadly available. Reach out to your Samsara Representative to have Devices API enabled for your organization.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Devices** under the Devices category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        models : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional string of comma separated device models. Valid values: `CM31`, `CM32`, `CM33`, `CM34`, `VG34`, `VG34M`, `VG34EU`, `VG34FN`, `VG54NA`, `VG54EU`, `VG55NA`, `VG55EU`, `AG24`, `AG24EU`, `AG26`, `AG26EU`, `AG45`, `AG45EU`, `AG46`, `AG46EU`, `AG46P`, `AG46PEU`, `AG51`, `AG51EU`, `AG52`, `AG52EU`, `AG53`, `AG53EU`

        health_statuses : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional string of comma separated device health statuses. Valid values: `healthy`, `needsAttention`, `needsReplacement`, `dataPending`.

        include_health : typing.Optional[bool]
            Optional boolean to control whether device health information is returned in the response. Defaults to false.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            The limit for how many objects will be in the response. Default and max for this value is 100 objects.

        include_tags : typing.Optional[bool]
            Optional boolean to control whether tags are returned in the response. Defaults to false.

        tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of tag IDs. Example: `tagIds=1234,5678`

        parent_tag_ids : typing.Optional[str]
             A filter on the data based on this comma-separated list of parent tag IDs, for use by orgs with tag hierarchies. Specifying a parent tag will implicitly include all descendent tags of the parent tag. Example: `parentTagIds=345,678`

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        DevicesGetDevicesResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_devices()


        asyncio.run(main())
        """
        _response = await self._raw_client.get_devices(
            models=models,
            health_statuses=health_statuses,
            include_health=include_health,
            after=after,
            limit=limit,
            include_tags=include_tags,
            tag_ids=tag_ids,
            parent_tag_ids=parent_tag_ids,
            request_options=request_options,
        )
        return _response.data

    async def get_engine_immobilizer_states(
        self,
        *,
        vehicle_ids: str,
        start_time: str,
        end_time: typing.Optional[str] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> EngineImmobilizerGetEngineImmobilizerStatesResponseBody:
        """
        Get the engine immobilizer states of the queried vehicles. If a vehicle has never had an engine immobilizer connected, there won't be any state returned for that vehicle.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Vehicle Immobilization** under the Vehicles category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        vehicle_ids : str
             A filter on the data based on this comma-separated list of vehicle IDs and externalIds. Example: `vehicleIds=1234,5678,samsara.vin:1HGBH41JXMN109186`

        start_time : str
            A start time in RFC 3339 format. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        end_time : typing.Optional[str]
             An end time in RFC 3339 format. Defaults to now if not provided. Millisecond precision and timezones are supported. (Examples: 2019-06-13T19:08:25Z, 2019-06-13T19:08:25.455Z, OR 2015-09-15T14:00:12-04:00).

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        EngineImmobilizerGetEngineImmobilizerStatesResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_engine_immobilizer_states(
                vehicle_ids="vehicleIds",
                start_time="startTime",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_engine_immobilizer_states(
            vehicle_ids=vehicle_ids,
            start_time=start_time,
            end_time=end_time,
            after=after,
            request_options=request_options,
        )
        return _response.data

    async def start_function_run(
        self,
        name: str,
        *,
        params_override: FunctionsStartFunctionRunRequestBodyParamsOverride,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> FunctionsStartFunctionRunResponseBody:
        """
        Start an asynchronous run for the specified Function. This endpoint allows you to override parameters available at runtime.

         <b>Rate limit:</b> 2 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Functions** under the Closed Beta category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        name : str
            The name of the Function to run.

        params_override : FunctionsStartFunctionRunRequestBodyParamsOverride
            Parameter overrides for the Function execution. Can be an empty object but must be provided.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        FunctionsStartFunctionRunResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara
        from samsara.beta_ap_is import (
            FunctionsStartFunctionRunRequestBodyParamsOverride,
        )

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.start_function_run(
                name="name",
                params_override=FunctionsStartFunctionRunRequestBodyParamsOverride(),
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.start_function_run(
            name, params_override=params_override, request_options=request_options
        )
        return _response.data

    async def update_shipping_docs(
        self,
        *,
        hos_date: str,
        driver_id: str,
        shipping_docs: str,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> HosDailyLogsUpdateShippingDocsResponseBody:
        """
        Update the shippingDocs field of an existing assignment.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write ELD Hours of Service (US)** under the Compliance category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        hos_date : str
            A start date in yyyy-mm-dd format. Required.

        driver_id : str
            ID of the driver for whom the duty status is being set.

        shipping_docs : str
            ShippingDocs associated with the driver for the day.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        HosDailyLogsUpdateShippingDocsResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.update_shipping_docs(
                hos_date="hosDate",
                driver_id="driverID",
                shipping_docs="ShippingID1, ShippingID2",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.update_shipping_docs(
            hos_date=hos_date, driver_id=driver_id, shipping_docs=shipping_docs, request_options=request_options
        )
        return _response.data

    async def list_hub_custom_properties(
        self,
        *,
        hub_id: str,
        custom_property_ids: typing.Optional[str] = None,
        custom_property_names: typing.Optional[str] = None,
        start_time: typing.Optional[dt.datetime] = None,
        end_time: typing.Optional[dt.datetime] = None,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> HubCustomPropertiesListHubCustomPropertiesResponseBody:
        """
        Retrieve custom properties for a specific hub.

        **Beta:** This endpoint is in beta and is likely to change before being broadly available. Reach out to your Samsara Representative to have RoutePlanning APIs enabled for your organization.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Routes** under the Driver Workflow category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        hub_id : str
            The hub identifier

        custom_property_ids : typing.Optional[str]
            A comma-separated list of custom property IDs that can be used for filtering.

        custom_property_names : typing.Optional[str]
            A comma-separated list of custom property names that can be used for filtering.

        start_time : typing.Optional[dt.datetime]
            Time filter of when the custom property was updated, in RFC 3339 format

        end_time : typing.Optional[dt.datetime]
            Time filter of when the custom property was updated, in RFC 3339 format

        after : typing.Optional[str]
            If specified, should be the endCursor from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            Maximum number of objects to return. Default and maximum is 100

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        HubCustomPropertiesListHubCustomPropertiesResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.list_hub_custom_properties(
                hub_id="hubId",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.list_hub_custom_properties(
            hub_id=hub_id,
            custom_property_ids=custom_property_ids,
            custom_property_names=custom_property_names,
            start_time=start_time,
            end_time=end_time,
            after=after,
            limit=limit,
            request_options=request_options,
        )
        return _response.data

    async def create_plan_orders(
        self,
        *,
        data: typing.Sequence[OrderInputObjectRequestBody],
        enable_update_existing_orders: typing.Optional[bool] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> PlanOrdersCreatePlanOrdersResponseBody:
        """
        Create one or more orders (bulk upsert). Pass an array of order objects; any object whose customerOrderId already exists will be updated, otherwise a new order is created. Functions can return JSON arrays in this Order POST format. Orders are initially created at the plan level but will migrate to hub-level entities, with planId becoming optional in future versions.

        **Beta:** This endpoint is in beta and is likely to change before being broadly available. Reach out to your Samsara Representative to have RoutePlanning APIs enabled for your organization.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Routes** under the Driver Workflow category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        data : typing.Sequence[OrderInputObjectRequestBody]
            An array of order objects to be created or updated

        enable_update_existing_orders : typing.Optional[bool]
            Enable update of existing orders if an order with the same customerOrderId exists. The input must match the same quantity dimensions as the existing order. If not provided, requests will fail if an order's customerOrderId already exists.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        PlanOrdersCreatePlanOrdersResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara, OrderInputObjectRequestBody

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.create_plan_orders(
                data=[
                    OrderInputObjectRequestBody(
                        customer_order_id="ORDER-2024-001",
                        hub_id="550e8400-e29b-41d4-a716-446655440000",
                        plan_id="650e8400-e29b-41d4-a716-446655440023",
                    )
                ],
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.create_plan_orders(
            data=data, enable_update_existing_orders=enable_update_existing_orders, request_options=request_options
        )
        return _response.data

    async def get_qualification_records(
        self,
        *,
        ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> QualificationsGetQualificationRecordsResponseBody:
        """
        Returns qualification records for the specified list of IDs.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            A comma-separated list containing up to 100 qualification record IDs to filter on. This can either be the Samsara-specified ID, or an external ID. External IDs are customer specified key-value pairs created in the POST or PATCH requests of this resource. To specify an external ID as part of a query parameter, use the following format: key:value.

        include_external_ids : typing.Optional[bool]
            If true, externalIds for qualification record and for the owner entity are returned.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        QualificationsGetQualificationRecordsResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_qualification_records()


        asyncio.run(main())
        """
        _response = await self._raw_client.get_qualification_records(
            ids=ids, include_external_ids=include_external_ids, request_options=request_options
        )
        return _response.data

    async def post_qualification_record(
        self,
        *,
        issue_date: dt.datetime,
        owner: QualificationOwnerRequestObjectRequestBody,
        qualification_type: QualificationTypeRequestObjectRequestBody,
        expiration_date: typing.Optional[dt.datetime] = OMIT,
        external_ids: typing.Optional[typing.Dict[str, str]] = OMIT,
        fields: typing.Optional[typing.Sequence[QualificationRecordRequestFieldInputObjectRequestBody]] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> QualificationsPostQualificationRecordResponseBody:
        """
        Creates a new qualification record.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        issue_date : dt.datetime
            Issue/effective date. UTC timestamp in RFC 3339 format.

        owner : QualificationOwnerRequestObjectRequestBody

        qualification_type : QualificationTypeRequestObjectRequestBody

        expiration_date : typing.Optional[dt.datetime]
            Expiration date. UTC timestamp in RFC 3339 format.

        external_ids : typing.Optional[typing.Dict[str, str]]
            A map of external ids

        fields : typing.Optional[typing.Sequence[QualificationRecordRequestFieldInputObjectRequestBody]]
            Other custom fields in a qualification record.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        QualificationsPostQualificationRecordResponseBody
            Created response.

        Examples
        --------
        import asyncio
        import datetime

        from samsara import (
            AsyncSamsara,
            QualificationOwnerRequestObjectRequestBody,
            QualificationRecordRequestFieldInputObjectRequestBody,
            QualificationTypeRequestObjectRequestBody,
        )

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.post_qualification_record(
                fields=[
                    QualificationRecordRequestFieldInputObjectRequestBody(
                        id="9814a1fa-f0c6-408b-bf85-51dc3bc71ac7",
                        type="number",
                    )
                ],
                issue_date=datetime.datetime.fromisoformat(
                    "2025-08-27 10:20:30+00:00",
                ),
                owner=QualificationOwnerRequestObjectRequestBody(
                    entity_type="worker",
                    id="281474",
                ),
                qualification_type=QualificationTypeRequestObjectRequestBody(
                    id="9814a1fa-f0c6-408b-bf85-51dc3bc71ac7",
                ),
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.post_qualification_record(
            issue_date=issue_date,
            owner=owner,
            qualification_type=qualification_type,
            expiration_date=expiration_date,
            external_ids=external_ids,
            fields=fields,
            request_options=request_options,
        )
        return _response.data

    async def delete_qualification_record(
        self, *, id: str, request_options: typing.Optional[RequestOptions] = None
    ) -> None:
        """
        Deletes an existing qualification record.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            ID of the qualification record to delete.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.delete_qualification_record(
                id="9814a1fa-f0c6-408b-bf85-51dc3bc71ac7",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.delete_qualification_record(id=id, request_options=request_options)
        return _response.data

    async def patch_qualification_record(
        self,
        *,
        id: str,
        expiration_date: typing.Optional[dt.datetime] = OMIT,
        external_ids: typing.Optional[typing.Dict[str, str]] = OMIT,
        fields: typing.Optional[typing.Sequence[QualificationRecordRequestFieldInputObjectRequestBody]] = OMIT,
        issue_date: typing.Optional[dt.datetime] = OMIT,
        owner: typing.Optional[QualificationOwnerRequestObjectRequestBody] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> QualificationsPatchQualificationRecordResponseBody:
        """
        Updates an existing qualification record.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            ID of the qualification record to update.

        expiration_date : typing.Optional[dt.datetime]
            Expiration date. UTC timestamp in RFC 3339 format. Set to '1970-01-01T00:00:00Z' to clear existing expiration date.

        external_ids : typing.Optional[typing.Dict[str, str]]
            A map of external ids

        fields : typing.Optional[typing.Sequence[QualificationRecordRequestFieldInputObjectRequestBody]]
            Other custom fields in a qualification record. Only set fields that needs to be updated.

        issue_date : typing.Optional[dt.datetime]
            Issue/effective date. UTC timestamp in RFC 3339 format.

        owner : typing.Optional[QualificationOwnerRequestObjectRequestBody]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        QualificationsPatchQualificationRecordResponseBody
            OK response.

        Examples
        --------
        import asyncio
        import datetime

        from samsara import AsyncSamsara, QualificationOwnerRequestObjectRequestBody

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.patch_qualification_record(
                id="9814a1fa-f0c6-408b-bf85-51dc3bc71ac7",
                issue_date=datetime.datetime.fromisoformat(
                    "2025-08-27 10:20:30+00:00",
                ),
                owner=QualificationOwnerRequestObjectRequestBody(
                    entity_type="worker",
                    id="281474",
                ),
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.patch_qualification_record(
            id=id,
            expiration_date=expiration_date,
            external_ids=external_ids,
            fields=fields,
            issue_date=issue_date,
            owner=owner,
            request_options=request_options,
        )
        return _response.data

    async def archive_qualification_record(
        self, *, id: str, request_options: typing.Optional[RequestOptions] = None
    ) -> None:
        """
        Archives an existing qualification record.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            ID of the qualification record to archive.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.archive_qualification_record(
                id="9814a1fa-f0c6-408b-bf85-51dc3bc71ac7",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.archive_qualification_record(id=id, request_options=request_options)
        return _response.data

    async def get_qualification_records_stream(
        self,
        *,
        entity_type: GetQualificationRecordsStreamRequestEntityType,
        start_time: dt.datetime,
        end_time: typing.Optional[dt.datetime] = None,
        after: typing.Optional[str] = None,
        qualification_type_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        owner_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        include_deleted: typing.Optional[bool] = None,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> QualificationsGetQualificationRecordsStreamResponseBody:
        """
        Returns all qualification records that have been created or modified for your organization based on the time parameters passed in. Results are paginated and are sorted by last modified date. If you include an endTime, the endpoint will return data up until that point (exclusive). If you don't include an endTime, the API will continue to poll with the pagination cursor that gets returned on every call. The hasNextPage response value will be true if there is no endTime specified and endCursor is nonempty.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        entity_type : GetQualificationRecordsStreamRequestEntityType
            String of entity type.  Valid values: `worker`, `asset`

        start_time : dt.datetime
            A start time in RFC 3339 format. Millisecond precision and timezones are supported. Examples: '2019-06-13T19:08:25Z' (basic UTC), '2019-06-13T19:08:25.455Z' (with milliseconds), '2015-09-15T14:00:12-04:00' (with timezone).

        end_time : typing.Optional[dt.datetime]
            An end time in RFC 3339 format. Optional and defaults to now if not provided. Millisecond precision and timezones are supported. Examples: '2019-06-13T19:08:25Z' (basic UTC), '2019-06-13T19:08:25.455Z' (with milliseconds), '2015-09-15T14:00:12-04:00' (with timezone).

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        qualification_type_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional comma-separated list containing up to 100 qualification type IDs to filter on.

        owner_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional comma-separated list of unique Samsara IDs of workers (if "entityType" is "worker") or assets (if "entityType" is "asset") to filter on. Max value for this field is 100 objects.

        include_deleted : typing.Optional[bool]
            If true, deleted qualification records are returned.

        include_external_ids : typing.Optional[bool]
            If true, externalIds for qualification record and for the owner entity are returned.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        QualificationsGetQualificationRecordsStreamResponseBody
            OK response.

        Examples
        --------
        import asyncio
        import datetime

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_qualification_records_stream(
                entity_type="worker",
                start_time=datetime.datetime.fromisoformat(
                    "2024-01-15 09:30:00+00:00",
                ),
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_qualification_records_stream(
            entity_type=entity_type,
            start_time=start_time,
            end_time=end_time,
            after=after,
            qualification_type_ids=qualification_type_ids,
            owner_ids=owner_ids,
            include_deleted=include_deleted,
            include_external_ids=include_external_ids,
            request_options=request_options,
        )
        return _response.data

    async def unarchive_qualification_record(
        self, *, id: str, request_options: typing.Optional[RequestOptions] = None
    ) -> None:
        """
        Unarchives an existing qualification record.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            ID of the qualification record to unarchive.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.unarchive_qualification_record(
                id="9814a1fa-f0c6-408b-bf85-51dc3bc71ac7",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.unarchive_qualification_record(id=id, request_options=request_options)
        return _response.data

    async def get_qualification_types(
        self,
        *,
        entity_type: GetQualificationTypesRequestEntityType,
        ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> QualificationsGetQualificationTypesResponseBody:
        """
        Returns a list of qualification types for the specified list of IDs. If no IDs are provided, all qualification types will be returned.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Qualification Records** under the Qualification Records category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        entity_type : GetQualificationTypesRequestEntityType
            String of entity type.  Valid values: `worker`, `asset`

        ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Optional comma-separated list containing up to 100 qualification type IDs to filter on. If no IDs are provided, all qualification types will be returned.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        QualificationsGetQualificationTypesResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_qualification_types(
                entity_type="worker",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_qualification_types(
            entity_type=entity_type, ids=ids, after=after, request_options=request_options
        )
        return _response.data

    async def post_readings(
        self,
        *,
        data: typing.Sequence[ReadingDatapointRequestBody],
        request_options: typing.Optional[RequestOptions] = None,
    ) -> None:
        """
        Ingest new readings. This endpoint allows the ingestion of batches of readings.

        Ingesting readings is only supported for assets created using the POST /assets API endpoint with readingsIngestionEnabled set to true. To see a full list of readings available for ingestion use the GET readings definitions API. When ingesting location data, the readingID 'location' must be used and the value object must contain at least the following fields: 'speed', 'latitude', 'longitude'.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Readings** under the Closed Beta category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        data : typing.Sequence[ReadingDatapointRequestBody]
            An array of readings data points to create.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara, ReadingDatapointRequestBody

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.post_readings(
                data=[
                    ReadingDatapointRequestBody(
                        entity_id="123451234512345",
                        entity_type="asset",
                        happened_at_time="2023-10-27T10:00:00Z",
                        reading_id="airInletPressure",
                        value={"key": "value"},
                    )
                ],
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.post_readings(data=data, request_options=request_options)
        return _response.data

    async def list_readings_definitions(
        self,
        *,
        after: typing.Optional[str] = None,
        ids: typing.Optional[str] = None,
        entity_types: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReadingsListReadingsDefinitionsResponseBody:
        """
        An introspection endpoint for discovering the set of readings including their name, description, data type, unit, and other metadata.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Readings** under the Closed Beta category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        ids : typing.Optional[str]
            A String of comma separated reading IDs. Include up to 50 readings IDs. If not set, all readings are returned.

        entity_types : typing.Optional[str]
            A list of entity type to return readings for. (Examples: asset, sensor)

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReadingsListReadingsDefinitionsResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.list_readings_definitions()


        asyncio.run(main())
        """
        _response = await self._raw_client.list_readings_definitions(
            after=after, ids=ids, entity_types=entity_types, request_options=request_options
        )
        return _response.data

    async def get_readings_history(
        self,
        *,
        reading_id: str,
        entity_type: str,
        after: typing.Optional[str] = None,
        entity_ids: typing.Optional[str] = None,
        external_ids: typing.Optional[str] = None,
        start_time: typing.Optional[str] = None,
        end_time: typing.Optional[str] = None,
        feed: typing.Optional[bool] = None,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReadingsGetReadingsHistoryResponseBody:
        """
        Get the values of a reading for a set of entities within the specified time range. Returns a paginated response with data for the specified resource IDs where startTime <= happenedAtTime < endTime. End time of null implies endTime is infinite and all known readings are returned.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Readings** under the Closed Beta category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        reading_id : str
            The reading ID to retrieve data for. Use /readings/definitions endpoint to get a list of valid reading IDs. (Examples: engineRpm,fuelLevel)

            Available reading IDs (by category):


            <details>
            <summary><strong>diagnostic</strong></summary>

            * `airInletPressure` (Air Inlet Pressure): Air inlet pressure. (kilopascal)
            * `airTemp` (Air Inlet (Ambient Air) Temp): Air inlet (ambient air) temperature. (celsius)
            * `altitude` (Altitude): The altitude of the asset (meter)
            * `altitudeAccuracy` (Altitude Uncertainty): The uncertainty of the asset's GPS-based altitude. (meter)
            * `assetStatus` (Status): Combined movement and equipment status derived from location & Digio events. (values: movementStart | movementEnd | stopped | none | equipmentOn | equipmentOff)
            * `averageACCurrent` (Average AC Current): Average AC current in amperes. (ampere)
            * `averageACFrequency` (Average AC Frequency): Average AC frequency in Hertz. (hertz)
            * `averageLineToLineACRMSVoltage` (Average Line-to-Line Voltage): Average RMS voltage between AC lines in volts. (volt)
            * `averageLineToNeutralACRMSVoltage` (Average Line-to-Neutral Voltage): Average RMS voltage from AC line to neutral in volts. (volt)
            * `barometerPressure` (Barometric Pressure): Atmospheric pressure as measured by the barometer. (kilopascal)
            * `batteryPotentialSwitched` (Battery Potential (Switched)): Switched battery potential in volts. (volt)
            * `batteryVoltage` (Battery Voltage): Voltage of the asset's battery. (volt)
            * `boostPressureEngineTurbocharger1` (Engine Turbocharger 1 Boost Pressure): Represents the boost pressure for engine turbocharger 1. (kilopascal)
            * `boostPressurePa` (Boost Pressure): Represents the boost pressure. (kilopascal)
            * `boostPressureTurbocharger2` (Boost Pressure (Turbocharger 2)): Boost pressure from the second turbocharger in kPa. (kilopascal)
            * `canBusType` (CAN Bus Status): Indicates whether the CAN Bus system is active or provides an invalid reading. (values: invalid | active)
            * `checkEngineLightJ1939Emissions` (Check Engine Light (J1939) - Emissions): Indicates whether the J1939 check engine light emissions indicator is active or inactive. (values: off | on)
            * `checkEngineLightJ1939Protect` (Check Engine Light (J1939) - Protect): Indicates whether the J1939 check engine light protect indicator is active or inactive. (values: off | on)
            * `checkEngineLightJ1939Stop` (Check Engine Light (J1939) - Stop): Indicates whether the J1939 check engine light stop indicator is active or inactive. (values: off | on)
            * `checkEngineLightJ1939Warning` (Check Engine Light (J1939) - Warning): Indicates whether the J1939 check engine light warning indicator is active or inactive. (values: off | on)
            * `checkEngineLightPassenger` (Check Engine Light (Passenger)): Indicates whether the passenger check engine light indicator is active or inactive. (values: off | on)
            * `coolantTemp` (Engine Coolant Temp): Represents the engine coolant temperature. (celsius)
            * `defLevel` (DEF Level): Represents the DEF (Diesel Exhaust Fluid) level percentage. (percent)
            * `derivedFuelConsumed` (Lifetime Fuel Consumed (Samsara)): Samsara-maintained fuel consumption since the device was firstinstalled. (liter)
            * `deviceOrientation` (Device Orientation): Indicates orientation of the device. (values: invalid | unknown | topDown | bottomDown | leftDown | rightDown | backDown | frontDown)
            * `digioInput1` (Digital IO #1): Represents the state of digital IO #1. (values: off | on)
            * `dpfLampStatus` (DPF Lamp Status): Status of the Diesel Particulate Filter warning lamp. (values: off | on | blinking)
            * `dpfSootLoadPercent` (DPF Soot Load): Diesel Particulate Filter soot load percentage. (percent)
            * `ecuHistoryTotalRunTime` (ECU Total Run Time): Total engine run time from ECU in seconds. (second)
            * `engineHours` (Engine Hours (ECU)): Represents the total engine runtime in hours as reported by the ECU. (second)
            * `engineHoursDigioBased` (Engine Hours (Synthetic - Aux input)): Represents the synthetic total engine runtime in hours based on auxiliary input. (millisecond)
            * `engineHoursEngineStateBased` (Engine Hours (Synthetic)): Represents the synthetic total engine runtime in hours based on engine state. (millisecond)
            * `engineIntakeAirTemp` (Engine Intake Air Temperature): Represents the engine intake air temperature. (celsius)
            * `engineLoadPercent` (Engine Load): Engine load percentage. (percent)
            * `engineState` (Engine State): Indicates the current state of the engine, such as running, stopped. (values: off | running | idling)
            * `ev24VoltDcDcInverterCurrent` (EV 24V DC/DC Inverter Current): Current from the 24V DC-DC inverter in amperes. (ampere)
            * `evAverageCellTemperature` (EV Average Cell Temperature): Average temperature of EV battery cells in degrees Celsius. (celsius)
            * `evChargingErrorStatus` (EV Charging Error Status): Indicates if the EV charging system has an error. (values: noError | batteryTooHotOrCold | vehicleNotInPark | connectorLockFault | chargingSystemFault | chargingCurrentDifferential | chargingVoltageOutOfRange | chargingSystemNotCompatible | noDataUndeterminedStatus | notAvailable | unknownError)
            * `evHighCapacityBatteryCurrent` (EV High Capacity Battery Current): Current from the high capacity EV battery in amperes. (ampere)
            * `evHighCapacityBatteryVoltage` (High Capacity EV Battery Voltage): Represents the voltage of the high capacity EV battery. (volt)
            * `evMaxAllowedStateOfChargePercent` (EV Max Allowed State of Charge): Maximum allowed state of charge percentage. (percent)
            * `evMaxCellTemperature` (EV Max Cell Temperature): Maximum temperature of EV battery cells in degrees Celsius. (celsius)
            * `evMinAllowedStateOfChargePercent` (EV Min Allowed State of Charge): Minimum allowed state of charge percentage. (percent)
            * `evMinCellTemperature` (EV Min Cell Temperature): Minimum temperature of EV battery cells in degrees Celsius. (celsius)
            * `exhaustGasPressure` (Exhaust Gas Pressure): Represents the exhaust gas pressure. (kilopascal)
            * `fuelConsumptionRate` (Fuel Consumption Rate): The rate at which an asset uses fuel (litersperhour)
            * `fuelLevelPerc` (Fuel Level): Percentage of fuel remaining in the tank. (percent)
            * `fuelSource` (Fuel Source): Type of fuel used by the asset. (values: gasoline | diesel)
            * `geoCoordinates` (Geo Coordinates): GPS coordinates (latitude and longitude) of the asset's location.
            * `gpsSpeed` (GPS Speed): Asset speed measured by the gateway's GPS receiver. (meterspersec)
            * `ignitionStatus` (Ignitions Status): Indicates the current ignition status as a voltage (values: off | on)
            * `latitude` (Latitude): Latitude coordinate of the asset's location. (decimaldegrees)
            * `lifetimeFuelConsumed` (Lifetime Fuel Consumed): Represents the vehicle maintained lifetime fuel consumption as reported by the vehicle. (liter)
            * `location` (Location): Represents the current address of the asset.
            * `longitude` (Longitude): Longitude coordinate of the asset's location. (decimaldegrees)
            * `mnfldTemp` (Intake Manifold Temp): Represents the intake manifold temperature. (celsius)
            * `ngFuelPressure` (NG Fuel Pressure): Represents the natural gas fuel pressure. (kilopascal)
            * `odometerEcu` (Odometer (ECU)): Represents the total distance traveled as recorded by the ECU. (meter)
            * `odometerGps` (Odometer (GPS)): Represents the total distance traveled as determined by GPS. (meter)
            * `oilPressure` (Engine Oil Pressure): Represents the oil pressure in the engine. (kilopascal)
            * `phaseAACFrequency` (Phase A AC Frequency): AC frequency for Phase A in Hertz. (hertz)
            * `phaseAAmpsRms` (Phase A Current (RMS)): RMS current for Phase A in amperes. (ampere)
            * `phaseALLVolts` (Phase A Line-to-Line Voltage): Line-to-line voltage for Phase A in volts. (volt)
            * `phaseALNVolts` (Phase A Line-to-Neutral Voltage): Line-to-neutral voltage for Phase A in volts. (volt)
            * `phaseBAmpsRms` (Phase B Current (RMS)): RMS current for Phase B in amperes. (ampere)
            * `phaseBLLVolts` (Phase B Line-to-Line Voltage): Line-to-line voltage for Phase B in volts. (volt)
            * `phaseBLNVolts` (Phase B Line-to-Neutral Voltage): Line-to-neutral voltage for Phase B in volts. (volt)
            * `phaseCAmpsRms` (Phase C Current (RMS)): RMS current for Phase C in amperes. (ampere)
            * `phaseCLLVolts` (Phase C Line-to-Line Voltage): Line-to-line voltage for Phase C in volts. (volt)
            * `phaseCLNVolts` (Phase C Line-to-Neutral Voltage): Line-to-neutral voltage for Phase C in volts. (volt)
            * `powerFactorRatio` (Power Factor Ratio): Represents the power factor ratio. (percent)
            * `rfidCardIdScan` (RFID Card Scan): The card number from RFID Card scans used for identification. When a user taps their RFID card on the reader, this captures the unique card code.
            * `samsaraEngineHours` (Samsara Engine Hours): Samsara's intelligent engine hours calculation that combines ECU data, synthetic calculations, and manual overrides with automatic fallbacks for optimal accuracy across all asset types. (millisecond)
            * `samsaraEngineHoursWithSource` (Samsara Engine Hours with Source): Samsara's intelligent engine hours calculation including detailed source metadata to indicate the origin of the data (ECU, synthetic, or manual override). Useful for debugging and understanding data provenance.
            * `samsaraOdometer` (Samsara Odometer): Samsara automatically pulls odometer readings from a vehicle's engine control unit (ECU). If the reading isn't available and the vehicle is unregulated, you can manually enter the odometer value for maintenance tracking—this value will then update based on GPS trip data. (kilometer)
            * `samsaraSpeed` (Samsara Speed): Samsara's best estimate of the asset speed, combining multiple data sources such as ECU and GPS. (meterspersec)
            * `samsaraSpeedLimit` (Samsara Speed Limit): Speed limit at the location of the asset. (meterspersec)
            * `seatbeltDriver` (Seatbelt (Driver)): Indicates whether the driver's seatbelt is buckled or unbuckled. (values: unbuckled | buckled)
            * `seatbeltPassenger` (Seatbelt (Passenger)): Indicates whether the passenger's seatbelt is buckled or unbuckled. (values: unbuckled | buckled)
            * `supportFindNearby` (Support Find Nearby): Indicates if the asset can support find nearby. (values: noData | notCompatible | pendingUpgrade | Ready)
            * `tirePressuresBackLeft` (Tire pressure, back left): Represents the tire pressure for the back-left tire. (kilopascal)
            * `tirePressuresBackRight` (Tire pressure, back right): Represents the tire pressure for the back-right tire. (kilopascal)
            * `tirePressuresFrontLeft` (Tire pressure, front left): Represents the tire pressure for the front-left tire. (kilopascal)
            * `tirePressuresFrontRight` (Tire pressure, front right): Represents the tire pressure for the front-right tire. (kilopascal)
            * `torquePercent` (Torque): Engine torque as a percentage. (percent)
            * `totalApparentPower` (Total Apparent Power): Total apparent power in volt-amperes. (voltAmpere)
            * `totalEnergyExported` (Total Energy Exported): Represents the total energy exported in kilowatt-hours (kWh). (kilowatthour)
            * `totalReactivePower` (Total Reactive Power): Total reactive power in volt-amperes reactive. (voltAmpereReactive)
            * `totalRealPower` (Total Real Power): Total real power in watts. (watt)

            </details>

            <details>
            <summary><strong>levelMonitoring</strong></summary>

            * `fillCriticality` (Fill Level Criticality): Indicates if the state of the fill level is critical. (values: normal | criticallyHigh | criticallyLow)
            * `fillMass` (Fill Mass): Mass of material in the vessel. (kilogram)
            * `fillMassAvailableCapacity` (Fill Mass Available Capacity): Available mass to be filled in the vessel. (kilogram)
            * `fillPercent` (Fill Level Percent): Fill level of the vessel as a percentage full. (percent)
            * `fillVolume` (Fill Volume): Volume of material in the vessel. (liter)
            * `fillVolumeAvailableCapacity` (Fill Volume Available Capacity): Available volume to be filled in the vessel. (liter)
            * `fluidLevelStatus` (Battery Water Level): The status of the battery's water level. Will be OK or LOW. (values: noData | ok | low)

            </details>

            <details>
            <summary><strong>obd</strong></summary>

            * `accDistanceAlertSignal` (ACC Distance Alert): Distance Alert Signal from the Adaptive Cruise Control system. (values: notActive | active)
            * `adaptiveCruiseControlMode` (ACC Mode): Current mode of the Adaptive Cruise Control System. (values: off | speedControlActive | distanceControlActive | overtakeMode | holdMode | finishMode | disabledOrError)
            * `aebsDriverActivationDemand` (AEBS Activation): Whether Advanced Emergency Braking is enabled or disabled by the driver. (values: deactivated | activated)
            * `cruiseControlFinalSetSpeed` (Cruise Control Final Set Speed): Includes driver set point and overrides from the ACC system. (kmperhr)
            * `cruiseControlSetSpeed` (Cruise Control Set Speed): Driver's set speed for the cruise control system. (kmperhr)
            * `cruiseControlSwitch` (Cruise Control Switch): The state of the cruise control switch. (values: off | on | error)
            * `driverAlertnessWarning` (Driver Alertness Warning): Driver Alertness Warning. (values: noConditionDetected | level1MildDistraction | level2Degradation | level3Warning)
            * `driverAlertnessWarningSystemState` (Driver Alertness Warning State): State of the Driver Alertness Warning system. (values: installedButDisabled | initializing | temporarilyNotAvailable | available | monitoringDriverBehavior)
            * `ecuSpeed` (ECU Speed): Speed read from the asset's OBD port. (kmperhr)
            * `emergencyBrakingActive` (Emergency Braking State): State of the Emergency Braking System. (values: inactive | active)
            * `emergencyBrakingAebsState` (AEBS State (Collision)): State of the Emergency Braking System for Forward Collision. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | readyAndActivated | driverOverrides | forwardCollisionWarningActive | forwardCollisionWarningWithBraking | forwardCollisionEmergencyBrakingActive | performanceLimited | error)
            * `externalBrakeRequestReason` (Self-Braking Reason/Mode): Brake reason/mode for the emergency self-braking system. (values: collisionAvoidance | stabilityControl | cruiseControlRoadSpeed | adaptiveCruiseControlDistanceControl | driverWarningHapticIndicator)
            * `forwardCollisionWarningLevel` (AEBS FCW Level): Severity level of the AEBS Forward Collision Warning. (values: noWarning | level1 | level2 | level3 | level4 | level5 | level6 | level7)
            * `forwardCollisionWarningStatus` (ACC FCW Status): Status of the Adaptive Cruise Control Forward Collision Warning system. (values: noWarning | collisionImminent | error)
            * `forwardLaneImagerStatus` (Forward Lane Imager State): State of the Forward Lane Imager. (values: fullyOperational | warmingUp | partiallyBlocked | fullyBlocked | misaligned | viewDegraded | error)
            * `imminentLeftLaneDeparture` (Imminent Left Lane Departure): State of the Imminent Left Lane Departure detection. (values: notImminent | imminent)
            * `imminentRightLaneDeparture` (Imminent Right Lane Departure): State of the Imminent Right Lane Departure detection. (values: notImminent | imminent)
            * `laneCenteringSystemState` (Lane Centering State): State of the Lane Centering System. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | ready | suppressedByOperator | actuating | error)
            * `laneDepartureIndicationStatus` (LDW Indication): State of the Lane Departure Indication system. (values: disabled | enabled)
            * `laneDepartureWarningSystemState` (LDW System State): State of the Lane Departure Warning system. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | ready | warningSuppressed | warningLaneDeparture | error)
            * `laneKeepingAssistSystemState` (LKAS State): State of the Lane Keep Assist System. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | ready | suppressedByOperator | actuating | error)
            * `leftLaneDeparture` (Left Lane Departure): State of the Left Lane Departure detection. (values: notDeparting | departing)
            * `rightLaneDeparture` (Right Lane Departure): State of the Right Lane Departure detection. (values: notDeparting | departing)
            * `roadDepartureAebsState` (AEBS State (Lane Departure)): State of the AEBS system for Lane Departure. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | readyAndActivated | driverOverrides | roadDepartureWarningActive | roadDepartureWarningWithBraking | roadDepartureEmergencyBrakingActive | performanceLimited | error)
            * `ropBrakeControlActive` (ROP Brake Control Active): Indicates whether Roll Over Prevention (ROP) has activated brake control. (values: passive | active)
            * `ropEngineControlActive` (ROP Engine Control Active): Indicates whether Roll Over Prevention (ROP) has commanded engine control to be active. (values: passive | active)
            * `tractionControlOverrideSwitch` (Traction Control Override Switch): When the switch is on, the automatic traction control function is disabled by the driver. (values: off | on | error)
            * `turnSignal` (Turn Signal): State of the turn signal switch (blinker). (values: off | left | right)
            * `vdcFullyOperational` (VDC Fully Operational): Indicates whether the Vehicle Dynamic Stability Control (VDC) system is fully operational. (values: notFullyOperational | fullyOperational)
            * `vehicleGear` (Vehicle Gear): The gear of the vehicle that is currently selected. (values: unknown | park | neutral | reverse | drive)
            * `xbrActiveControlMode` (Emergency Self-Braking System Mode): Current mode of the emergency self-braking system. (values: noBrakeDemand | driverBrakeDemand | additionMode | maximumMode | brakeHold)
            * `xbrSystemState` (Emergency Self-Braking System Operational State): State of the emergency self-braking system. (values: fullyOperational | highestPriorityOnly | noRequestsAccepted)
            * `ycBrakeControlActive` (YC Brake Control Active): Indicates whether Yaw Control (YC) has activated brake control. (values: passive | active)
            * `ycEngineControlActive` (YC Engine Control Active): Indicates whether Yaw Control (YC) has commanded engine control to be active. (values: passive | active)

            </details>

            <details>
            <summary><strong>pressureVesselHealth</strong></summary>

            * `pressureVesselBatteryLevelPercentage` (Pressure Vessel Battery Level Percentage): Battery level percentage of the pressure vessel. (percent)
            * `pressureVesselPressure` (Pressure Vessel Pressure): Pressure of the pressure vessel. (kilopascal)
            * `pressureVesselTemperature` (Pressure Vessel Temperature): Temperature of the pressure vessel. (celsius)

            </details>

            <details>
            <summary><strong>reefer</strong></summary>

            * `reeferAlarm` (Reefer Alarms): Array of active alarm codes for the refrigeration unit with metadata
            * `reeferAlarmSeverity` (Reefer Alarm Severity): Highest severity level across active reefer alarms (green, yellow, red, orange) (values: none | green | yellow | red | orange)
            * `reeferAmbientAir` (Reefer Ambient Air Temperature): External environment temperature for the reefer (celsius)
            * `reeferBatteryVoltage` (Reefer Battery Voltage): The voltage of the Refrigeration Unit's battery. (volt)
            * `reeferDoorOpenZone1` (Reefer Door Open (Zone 1)): Status indicating whether the reefer's door (zone 1) is closed or open (values: closed | open)
            * `reeferDoorOpenZone2` (Reefer Door Open (Zone 2)): Status indicating whether the reefer's door (zone 2) is closed or open (values: closed | open)
            * `reeferDoorOpenZone3` (Reefer Door Open (Zone 3)): Status indicating whether the reefer's door (zone 3) is closed or open (values: closed | open)
            * `reeferEngineHours` (Reefer Engine Hours): The total accumulated hours that the Refrigeration Unit has been running on its engine. (hour)
            * `reeferFuelLevel` (Reefer Fuel Level): Refrigeration Unit Fuel Level (%) (percent)
            * `reeferPowerSource` (Reefer Power Source): The power source of the refrigeration unit (Diesel, Electric or Cryo) (values: engine | electric | cryo)
            * `reeferReturnAirZone1` (Reefer Return Air Temperature (Zone 1)): Return air temperature for the reefer's zone 1 (celsius)
            * `reeferReturnAirZone2` (Reefer Return Air Temperature (Zone 2)): Return air temperature for the reefer's zone 2 (celsius)
            * `reeferReturnAirZone3` (Reefer Return Air Temperature (Zone 3)): Return air temperature for the reefer's zone 3 (celsius)
            * `reeferRunMode` (Reefer Run Mode): The run mode of the refrigeration unit (Continuous or Start/Stop) (values: continuous | startStop)
            * `reeferSetPointZone1` (Reefer Set Point (Zone 1)): Current set point for the reefer's zone 1 (celsius)
            * `reeferSetPointZone2` (Reefer Set Point (Zone 2)): Current set point for the reefer's zone 2 (celsius)
            * `reeferSetPointZone3` (Reefer Set Point (Zone 3)): Current set point for the reefer's zone 3 (celsius)
            * `reeferState` (Reefer State): The on/off state of the refrigeration unit (values: off | active | error | inactive)
            * `reeferStateZone1` (Reefer State (Zone 1)): The on/off state of the refrigeration unit (Zone 1) (values: off | active | error | inactive)
            * `reeferStateZone2` (Reefer State (Zone 2)): The on/off state of the refrigeration unit (Zone 2) (values: off | active | error | inactive)
            * `reeferStateZone3` (Reefer State (Zone 3)): The on/off state of the refrigeration unit (Zone 3) (values: off | active | error | inactive)
            * `reeferSupplyAirZone1` (Reefer Supply Air Temperature (Zone 1)): Supply air temperature for the reefer's zone 1 (celsius)
            * `reeferSupplyAirZone2` (Reefer Supply Air Temperature (Zone 2)): Supply air temperature for the reefer's zone 2 (celsius)
            * `reeferSupplyAirZone3` (Reefer Supply Air Temperature (Zone 3)): Supply air temperature for the reefer's zone 3 (celsius)
            * `reeferTemperatureRecorder1` (Reefer Temperature Recorder (Zone 1)): Temperature recorder reading for reefer zone 1 (celsius)
            * `reeferTemperatureRecorder2` (Reefer Temperature Recorder (Zone 2)): Temperature recorder reading for reefer zone 2 (celsius)
            * `reeferTemperatureRecorder3` (Reefer Temperature Recorder (Zone 3)): Temperature recorder reading for reefer zone 3 (celsius)
            * `reeferTemperatureRecorder4` (Reefer Temperature Recorder (Zone 4)): Temperature recorder reading for reefer zone 4 (celsius)
            * `reeferTemperatureRecorder5` (Reefer Temperature Recorder (Zone 5)): Temperature recorder reading for reefer zone 5 (celsius)
            * `reeferTemperatureRecorder6` (Reefer Temperature Recorder (Zone 6)): Temperature recorder reading for reefer zone 6 (celsius)

            </details>

            <details>
            <summary><strong>smartTrailer</strong></summary>

            * `addressEntry` (Address Entry): Address data from the address entry event
            * `addressExit` (Address Exit): Address data from the address exit event
            * `ag51BatteryStatus` (AG51 Battery Status): Battery status of the AG51 gateway based on temperature-compensated voltage threshold. The threshold varies from 3672mV at -40°C to 4579mV at 60°C. (values: ok | low)
            * `ag51BatteryTemperature` (AG51 Battery Temperature): Internal temperature of the AG51 gateway battery in degrees Celsius (celsius)
            * `ag51BatteryVoltage` (AG51 Battery Voltage): Total battery voltage of the AG51 gateway (sum of all 3 cells) in volts (volt)
            * `atisLamp` (Atis Lamp status): Atis lamp on/off status (values: off | on)
            * `derivedCargoState` (Cargo Status): Indicates if the overall cargo status of the asset is Empty, Partially Empty, Full, or Unknown. (values: unknown | empty | partiallyEmpty | full)
            * `doorClosedStatus` (Door Closed Status): Status indicating whether a door is closed or open (values: open | closed)
            * `doorClosedStatusAdvanced` (Door Closed Status (Advanced)): Status indicating whether a door is closed or open (values: open | closed)
            * `environmentMonitorAmbientTemperature` (Ambient Temperature): Air temperature at the environmental monitor device (built-in sensor). (celsius)
            * `environmentMonitorThermistorTemperature` (Thermistor Temperature): Temperature from an external thermistor probe (e.g. cable probe in cargo or reefer). (celsius)
            * `trailerMovingWithoutPower` (Trailer Moving Without Power): Trailer moving without power status (values: off | on)
            * `validBrakeScore` (Braking Performance Value): Percent score representing trailer braking effectiveness using regression analysis over the past 90 days, guaranteed to have under 3% margin of error. (percent)
            * `widgetBatteryVoltage` (Widget Battery Voltage): Battery voltage level of the widget sensor in millivolts (volt)
            * `widgetBatteryVoltageLow` (Widget Battery Voltage Low): Indicates if widget battery voltage is below 1500mV threshold (values: normal | low)
            * `widgetDisconnect` (Widget Disconnection Status): Connection status between widget and device (values: connected | disconnected)

            </details>

            **Note:** This is not an exhaustive list. Your organization may have access to additional readings based on enabled features or custom configurations. Use the `/readings/definitions` endpoint to retrieve all available reading IDs for your organization.

        entity_type : str
            A entity type of the entityIds or externalIds to fetch readings for. Use /readings/definitions endpoint to get a list of valid entity types. (Examples: asset, sensor)

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        entity_ids : typing.Optional[str]
            A filter on the data based on this comma-separated list of entity IDs or external IDs. If not set, all entities are returned.

        external_ids : typing.Optional[str]
            A filter on the data based on this comma-separated list of external IDs. (Examples: samsara.serial:ZPXKLMN7VJ, samsara.serial:ABXKIMN4NM)

        start_time : typing.Optional[str]
            A filter on the data that returns the last known data points with timestamps greater than or equal to this value. Must be a string in RFC 3339 format. Millisecond precision and timezones are supported. (Examples: 2020-01-27T07:06:25Z)

        end_time : typing.Optional[str]
            A filter on the data that returns the last known data points with timestamps less than or equal to this value. If not set, the time of the request is considered the endTime. Must be a string in RFC 3339 format. Millisecond precision and timezones are supported. (Examples: 2020-01-27T07:06:25Z)

        feed : typing.Optional[bool]
            Set to true to enable feed mode for continuous reading updates. When enabled, the API always includes an endCursor in the response. If hasNextPage is false, it indicates that no new data is currently available — wait at least 5 seconds before making the next request to avoid unnecessary polling.

        include_external_ids : typing.Optional[bool]
            Optional boolean indicating whether to return external IDs on supported entities

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReadingsGetReadingsHistoryResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_readings_history(
                reading_id="readingId",
                entity_type="entityType",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_readings_history(
            reading_id=reading_id,
            entity_type=entity_type,
            after=after,
            entity_ids=entity_ids,
            external_ids=external_ids,
            start_time=start_time,
            end_time=end_time,
            feed=feed,
            include_external_ids=include_external_ids,
            request_options=request_options,
        )
        return _response.data

    async def get_readings_snapshot(
        self,
        *,
        reading_ids: str,
        entity_type: str,
        after: typing.Optional[str] = None,
        entity_ids: typing.Optional[str] = None,
        external_ids: typing.Optional[str] = None,
        as_of_time: typing.Optional[str] = None,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReadingsGetReadingsSnapshotResponseBody:
        """
        An endpoint to get the last value of a reading for a set of entities at the specified time.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Readings** under the Closed Beta category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        reading_ids : str
            A collection of comma separated reading IDs. Include up to 3 readings IDs. Use /readings/definitions endpoint to get a list of valid reading IDs. (Examples: engineRpm,fuelLevel)

            Available reading IDs (by category):


            <details>
            <summary><strong>diagnostic</strong></summary>

            * `airInletPressure` (Air Inlet Pressure): Air inlet pressure. (kilopascal)
            * `airTemp` (Air Inlet (Ambient Air) Temp): Air inlet (ambient air) temperature. (celsius)
            * `altitude` (Altitude): The altitude of the asset (meter)
            * `altitudeAccuracy` (Altitude Uncertainty): The uncertainty of the asset's GPS-based altitude. (meter)
            * `assetStatus` (Status): Combined movement and equipment status derived from location & Digio events. (values: movementStart | movementEnd | stopped | none | equipmentOn | equipmentOff)
            * `averageACCurrent` (Average AC Current): Average AC current in amperes. (ampere)
            * `averageACFrequency` (Average AC Frequency): Average AC frequency in Hertz. (hertz)
            * `averageLineToLineACRMSVoltage` (Average Line-to-Line Voltage): Average RMS voltage between AC lines in volts. (volt)
            * `averageLineToNeutralACRMSVoltage` (Average Line-to-Neutral Voltage): Average RMS voltage from AC line to neutral in volts. (volt)
            * `barometerPressure` (Barometric Pressure): Atmospheric pressure as measured by the barometer. (kilopascal)
            * `batteryPotentialSwitched` (Battery Potential (Switched)): Switched battery potential in volts. (volt)
            * `batteryVoltage` (Battery Voltage): Voltage of the asset's battery. (volt)
            * `boostPressureEngineTurbocharger1` (Engine Turbocharger 1 Boost Pressure): Represents the boost pressure for engine turbocharger 1. (kilopascal)
            * `boostPressurePa` (Boost Pressure): Represents the boost pressure. (kilopascal)
            * `boostPressureTurbocharger2` (Boost Pressure (Turbocharger 2)): Boost pressure from the second turbocharger in kPa. (kilopascal)
            * `canBusType` (CAN Bus Status): Indicates whether the CAN Bus system is active or provides an invalid reading. (values: invalid | active)
            * `checkEngineLightJ1939Emissions` (Check Engine Light (J1939) - Emissions): Indicates whether the J1939 check engine light emissions indicator is active or inactive. (values: off | on)
            * `checkEngineLightJ1939Protect` (Check Engine Light (J1939) - Protect): Indicates whether the J1939 check engine light protect indicator is active or inactive. (values: off | on)
            * `checkEngineLightJ1939Stop` (Check Engine Light (J1939) - Stop): Indicates whether the J1939 check engine light stop indicator is active or inactive. (values: off | on)
            * `checkEngineLightJ1939Warning` (Check Engine Light (J1939) - Warning): Indicates whether the J1939 check engine light warning indicator is active or inactive. (values: off | on)
            * `checkEngineLightPassenger` (Check Engine Light (Passenger)): Indicates whether the passenger check engine light indicator is active or inactive. (values: off | on)
            * `coolantTemp` (Engine Coolant Temp): Represents the engine coolant temperature. (celsius)
            * `defLevel` (DEF Level): Represents the DEF (Diesel Exhaust Fluid) level percentage. (percent)
            * `derivedFuelConsumed` (Lifetime Fuel Consumed (Samsara)): Samsara-maintained fuel consumption since the device was firstinstalled. (liter)
            * `deviceOrientation` (Device Orientation): Indicates orientation of the device. (values: invalid | unknown | topDown | bottomDown | leftDown | rightDown | backDown | frontDown)
            * `digioInput1` (Digital IO #1): Represents the state of digital IO #1. (values: off | on)
            * `dpfLampStatus` (DPF Lamp Status): Status of the Diesel Particulate Filter warning lamp. (values: off | on | blinking)
            * `dpfSootLoadPercent` (DPF Soot Load): Diesel Particulate Filter soot load percentage. (percent)
            * `ecuHistoryTotalRunTime` (ECU Total Run Time): Total engine run time from ECU in seconds. (second)
            * `engineHours` (Engine Hours (ECU)): Represents the total engine runtime in hours as reported by the ECU. (second)
            * `engineHoursDigioBased` (Engine Hours (Synthetic - Aux input)): Represents the synthetic total engine runtime in hours based on auxiliary input. (millisecond)
            * `engineHoursEngineStateBased` (Engine Hours (Synthetic)): Represents the synthetic total engine runtime in hours based on engine state. (millisecond)
            * `engineIntakeAirTemp` (Engine Intake Air Temperature): Represents the engine intake air temperature. (celsius)
            * `engineLoadPercent` (Engine Load): Engine load percentage. (percent)
            * `engineState` (Engine State): Indicates the current state of the engine, such as running, stopped. (values: off | running | idling)
            * `ev24VoltDcDcInverterCurrent` (EV 24V DC/DC Inverter Current): Current from the 24V DC-DC inverter in amperes. (ampere)
            * `evAverageCellTemperature` (EV Average Cell Temperature): Average temperature of EV battery cells in degrees Celsius. (celsius)
            * `evChargingErrorStatus` (EV Charging Error Status): Indicates if the EV charging system has an error. (values: noError | batteryTooHotOrCold | vehicleNotInPark | connectorLockFault | chargingSystemFault | chargingCurrentDifferential | chargingVoltageOutOfRange | chargingSystemNotCompatible | noDataUndeterminedStatus | notAvailable | unknownError)
            * `evHighCapacityBatteryCurrent` (EV High Capacity Battery Current): Current from the high capacity EV battery in amperes. (ampere)
            * `evHighCapacityBatteryVoltage` (High Capacity EV Battery Voltage): Represents the voltage of the high capacity EV battery. (volt)
            * `evMaxAllowedStateOfChargePercent` (EV Max Allowed State of Charge): Maximum allowed state of charge percentage. (percent)
            * `evMaxCellTemperature` (EV Max Cell Temperature): Maximum temperature of EV battery cells in degrees Celsius. (celsius)
            * `evMinAllowedStateOfChargePercent` (EV Min Allowed State of Charge): Minimum allowed state of charge percentage. (percent)
            * `evMinCellTemperature` (EV Min Cell Temperature): Minimum temperature of EV battery cells in degrees Celsius. (celsius)
            * `exhaustGasPressure` (Exhaust Gas Pressure): Represents the exhaust gas pressure. (kilopascal)
            * `fuelConsumptionRate` (Fuel Consumption Rate): The rate at which an asset uses fuel (litersperhour)
            * `fuelLevelPerc` (Fuel Level): Percentage of fuel remaining in the tank. (percent)
            * `fuelSource` (Fuel Source): Type of fuel used by the asset. (values: gasoline | diesel)
            * `geoCoordinates` (Geo Coordinates): GPS coordinates (latitude and longitude) of the asset's location.
            * `gpsSpeed` (GPS Speed): Asset speed measured by the gateway's GPS receiver. (meterspersec)
            * `ignitionStatus` (Ignitions Status): Indicates the current ignition status as a voltage (values: off | on)
            * `latitude` (Latitude): Latitude coordinate of the asset's location. (decimaldegrees)
            * `lifetimeFuelConsumed` (Lifetime Fuel Consumed): Represents the vehicle maintained lifetime fuel consumption as reported by the vehicle. (liter)
            * `location` (Location): Represents the current address of the asset.
            * `longitude` (Longitude): Longitude coordinate of the asset's location. (decimaldegrees)
            * `mnfldTemp` (Intake Manifold Temp): Represents the intake manifold temperature. (celsius)
            * `ngFuelPressure` (NG Fuel Pressure): Represents the natural gas fuel pressure. (kilopascal)
            * `odometerEcu` (Odometer (ECU)): Represents the total distance traveled as recorded by the ECU. (meter)
            * `odometerGps` (Odometer (GPS)): Represents the total distance traveled as determined by GPS. (meter)
            * `oilPressure` (Engine Oil Pressure): Represents the oil pressure in the engine. (kilopascal)
            * `phaseAACFrequency` (Phase A AC Frequency): AC frequency for Phase A in Hertz. (hertz)
            * `phaseAAmpsRms` (Phase A Current (RMS)): RMS current for Phase A in amperes. (ampere)
            * `phaseALLVolts` (Phase A Line-to-Line Voltage): Line-to-line voltage for Phase A in volts. (volt)
            * `phaseALNVolts` (Phase A Line-to-Neutral Voltage): Line-to-neutral voltage for Phase A in volts. (volt)
            * `phaseBAmpsRms` (Phase B Current (RMS)): RMS current for Phase B in amperes. (ampere)
            * `phaseBLLVolts` (Phase B Line-to-Line Voltage): Line-to-line voltage for Phase B in volts. (volt)
            * `phaseBLNVolts` (Phase B Line-to-Neutral Voltage): Line-to-neutral voltage for Phase B in volts. (volt)
            * `phaseCAmpsRms` (Phase C Current (RMS)): RMS current for Phase C in amperes. (ampere)
            * `phaseCLLVolts` (Phase C Line-to-Line Voltage): Line-to-line voltage for Phase C in volts. (volt)
            * `phaseCLNVolts` (Phase C Line-to-Neutral Voltage): Line-to-neutral voltage for Phase C in volts. (volt)
            * `powerFactorRatio` (Power Factor Ratio): Represents the power factor ratio. (percent)
            * `rfidCardIdScan` (RFID Card Scan): The card number from RFID Card scans used for identification. When a user taps their RFID card on the reader, this captures the unique card code.
            * `samsaraEngineHours` (Samsara Engine Hours): Samsara's intelligent engine hours calculation that combines ECU data, synthetic calculations, and manual overrides with automatic fallbacks for optimal accuracy across all asset types. (millisecond)
            * `samsaraEngineHoursWithSource` (Samsara Engine Hours with Source): Samsara's intelligent engine hours calculation including detailed source metadata to indicate the origin of the data (ECU, synthetic, or manual override). Useful for debugging and understanding data provenance.
            * `samsaraOdometer` (Samsara Odometer): Samsara automatically pulls odometer readings from a vehicle's engine control unit (ECU). If the reading isn't available and the vehicle is unregulated, you can manually enter the odometer value for maintenance tracking—this value will then update based on GPS trip data. (kilometer)
            * `samsaraSpeed` (Samsara Speed): Samsara's best estimate of the asset speed, combining multiple data sources such as ECU and GPS. (meterspersec)
            * `samsaraSpeedLimit` (Samsara Speed Limit): Speed limit at the location of the asset. (meterspersec)
            * `seatbeltDriver` (Seatbelt (Driver)): Indicates whether the driver's seatbelt is buckled or unbuckled. (values: unbuckled | buckled)
            * `seatbeltPassenger` (Seatbelt (Passenger)): Indicates whether the passenger's seatbelt is buckled or unbuckled. (values: unbuckled | buckled)
            * `supportFindNearby` (Support Find Nearby): Indicates if the asset can support find nearby. (values: noData | notCompatible | pendingUpgrade | Ready)
            * `tirePressuresBackLeft` (Tire pressure, back left): Represents the tire pressure for the back-left tire. (kilopascal)
            * `tirePressuresBackRight` (Tire pressure, back right): Represents the tire pressure for the back-right tire. (kilopascal)
            * `tirePressuresFrontLeft` (Tire pressure, front left): Represents the tire pressure for the front-left tire. (kilopascal)
            * `tirePressuresFrontRight` (Tire pressure, front right): Represents the tire pressure for the front-right tire. (kilopascal)
            * `torquePercent` (Torque): Engine torque as a percentage. (percent)
            * `totalApparentPower` (Total Apparent Power): Total apparent power in volt-amperes. (voltAmpere)
            * `totalEnergyExported` (Total Energy Exported): Represents the total energy exported in kilowatt-hours (kWh). (kilowatthour)
            * `totalReactivePower` (Total Reactive Power): Total reactive power in volt-amperes reactive. (voltAmpereReactive)
            * `totalRealPower` (Total Real Power): Total real power in watts. (watt)

            </details>

            <details>
            <summary><strong>levelMonitoring</strong></summary>

            * `fillCriticality` (Fill Level Criticality): Indicates if the state of the fill level is critical. (values: normal | criticallyHigh | criticallyLow)
            * `fillMass` (Fill Mass): Mass of material in the vessel. (kilogram)
            * `fillMassAvailableCapacity` (Fill Mass Available Capacity): Available mass to be filled in the vessel. (kilogram)
            * `fillPercent` (Fill Level Percent): Fill level of the vessel as a percentage full. (percent)
            * `fillVolume` (Fill Volume): Volume of material in the vessel. (liter)
            * `fillVolumeAvailableCapacity` (Fill Volume Available Capacity): Available volume to be filled in the vessel. (liter)
            * `fluidLevelStatus` (Battery Water Level): The status of the battery's water level. Will be OK or LOW. (values: noData | ok | low)

            </details>

            <details>
            <summary><strong>obd</strong></summary>

            * `accDistanceAlertSignal` (ACC Distance Alert): Distance Alert Signal from the Adaptive Cruise Control system. (values: notActive | active)
            * `adaptiveCruiseControlMode` (ACC Mode): Current mode of the Adaptive Cruise Control System. (values: off | speedControlActive | distanceControlActive | overtakeMode | holdMode | finishMode | disabledOrError)
            * `aebsDriverActivationDemand` (AEBS Activation): Whether Advanced Emergency Braking is enabled or disabled by the driver. (values: deactivated | activated)
            * `cruiseControlFinalSetSpeed` (Cruise Control Final Set Speed): Includes driver set point and overrides from the ACC system. (kmperhr)
            * `cruiseControlSetSpeed` (Cruise Control Set Speed): Driver's set speed for the cruise control system. (kmperhr)
            * `cruiseControlSwitch` (Cruise Control Switch): The state of the cruise control switch. (values: off | on | error)
            * `driverAlertnessWarning` (Driver Alertness Warning): Driver Alertness Warning. (values: noConditionDetected | level1MildDistraction | level2Degradation | level3Warning)
            * `driverAlertnessWarningSystemState` (Driver Alertness Warning State): State of the Driver Alertness Warning system. (values: installedButDisabled | initializing | temporarilyNotAvailable | available | monitoringDriverBehavior)
            * `ecuSpeed` (ECU Speed): Speed read from the asset's OBD port. (kmperhr)
            * `emergencyBrakingActive` (Emergency Braking State): State of the Emergency Braking System. (values: inactive | active)
            * `emergencyBrakingAebsState` (AEBS State (Collision)): State of the Emergency Braking System for Forward Collision. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | readyAndActivated | driverOverrides | forwardCollisionWarningActive | forwardCollisionWarningWithBraking | forwardCollisionEmergencyBrakingActive | performanceLimited | error)
            * `externalBrakeRequestReason` (Self-Braking Reason/Mode): Brake reason/mode for the emergency self-braking system. (values: collisionAvoidance | stabilityControl | cruiseControlRoadSpeed | adaptiveCruiseControlDistanceControl | driverWarningHapticIndicator)
            * `forwardCollisionWarningLevel` (AEBS FCW Level): Severity level of the AEBS Forward Collision Warning. (values: noWarning | level1 | level2 | level3 | level4 | level5 | level6 | level7)
            * `forwardCollisionWarningStatus` (ACC FCW Status): Status of the Adaptive Cruise Control Forward Collision Warning system. (values: noWarning | collisionImminent | error)
            * `forwardLaneImagerStatus` (Forward Lane Imager State): State of the Forward Lane Imager. (values: fullyOperational | warmingUp | partiallyBlocked | fullyBlocked | misaligned | viewDegraded | error)
            * `imminentLeftLaneDeparture` (Imminent Left Lane Departure): State of the Imminent Left Lane Departure detection. (values: notImminent | imminent)
            * `imminentRightLaneDeparture` (Imminent Right Lane Departure): State of the Imminent Right Lane Departure detection. (values: notImminent | imminent)
            * `laneCenteringSystemState` (Lane Centering State): State of the Lane Centering System. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | ready | suppressedByOperator | actuating | error)
            * `laneDepartureIndicationStatus` (LDW Indication): State of the Lane Departure Indication system. (values: disabled | enabled)
            * `laneDepartureWarningSystemState` (LDW System State): State of the Lane Departure Warning system. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | ready | warningSuppressed | warningLaneDeparture | error)
            * `laneKeepingAssistSystemState` (LKAS State): State of the Lane Keep Assist System. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | ready | suppressedByOperator | actuating | error)
            * `leftLaneDeparture` (Left Lane Departure): State of the Left Lane Departure detection. (values: notDeparting | departing)
            * `rightLaneDeparture` (Right Lane Departure): State of the Right Lane Departure detection. (values: notDeparting | departing)
            * `roadDepartureAebsState` (AEBS State (Lane Departure)): State of the AEBS system for Lane Departure. (values: notReady | temporarilyNotAvailable | deactivatedByDriver | readyAndActivated | driverOverrides | roadDepartureWarningActive | roadDepartureWarningWithBraking | roadDepartureEmergencyBrakingActive | performanceLimited | error)
            * `ropBrakeControlActive` (ROP Brake Control Active): Indicates whether Roll Over Prevention (ROP) has activated brake control. (values: passive | active)
            * `ropEngineControlActive` (ROP Engine Control Active): Indicates whether Roll Over Prevention (ROP) has commanded engine control to be active. (values: passive | active)
            * `tractionControlOverrideSwitch` (Traction Control Override Switch): When the switch is on, the automatic traction control function is disabled by the driver. (values: off | on | error)
            * `turnSignal` (Turn Signal): State of the turn signal switch (blinker). (values: off | left | right)
            * `vdcFullyOperational` (VDC Fully Operational): Indicates whether the Vehicle Dynamic Stability Control (VDC) system is fully operational. (values: notFullyOperational | fullyOperational)
            * `vehicleGear` (Vehicle Gear): The gear of the vehicle that is currently selected. (values: unknown | park | neutral | reverse | drive)
            * `xbrActiveControlMode` (Emergency Self-Braking System Mode): Current mode of the emergency self-braking system. (values: noBrakeDemand | driverBrakeDemand | additionMode | maximumMode | brakeHold)
            * `xbrSystemState` (Emergency Self-Braking System Operational State): State of the emergency self-braking system. (values: fullyOperational | highestPriorityOnly | noRequestsAccepted)
            * `ycBrakeControlActive` (YC Brake Control Active): Indicates whether Yaw Control (YC) has activated brake control. (values: passive | active)
            * `ycEngineControlActive` (YC Engine Control Active): Indicates whether Yaw Control (YC) has commanded engine control to be active. (values: passive | active)

            </details>

            <details>
            <summary><strong>pressureVesselHealth</strong></summary>

            * `pressureVesselBatteryLevelPercentage` (Pressure Vessel Battery Level Percentage): Battery level percentage of the pressure vessel. (percent)
            * `pressureVesselPressure` (Pressure Vessel Pressure): Pressure of the pressure vessel. (kilopascal)
            * `pressureVesselTemperature` (Pressure Vessel Temperature): Temperature of the pressure vessel. (celsius)

            </details>

            <details>
            <summary><strong>reefer</strong></summary>

            * `reeferAlarm` (Reefer Alarms): Array of active alarm codes for the refrigeration unit with metadata
            * `reeferAlarmSeverity` (Reefer Alarm Severity): Highest severity level across active reefer alarms (green, yellow, red, orange) (values: none | green | yellow | red | orange)
            * `reeferAmbientAir` (Reefer Ambient Air Temperature): External environment temperature for the reefer (celsius)
            * `reeferBatteryVoltage` (Reefer Battery Voltage): The voltage of the Refrigeration Unit's battery. (volt)
            * `reeferDoorOpenZone1` (Reefer Door Open (Zone 1)): Status indicating whether the reefer's door (zone 1) is closed or open (values: closed | open)
            * `reeferDoorOpenZone2` (Reefer Door Open (Zone 2)): Status indicating whether the reefer's door (zone 2) is closed or open (values: closed | open)
            * `reeferDoorOpenZone3` (Reefer Door Open (Zone 3)): Status indicating whether the reefer's door (zone 3) is closed or open (values: closed | open)
            * `reeferEngineHours` (Reefer Engine Hours): The total accumulated hours that the Refrigeration Unit has been running on its engine. (hour)
            * `reeferFuelLevel` (Reefer Fuel Level): Refrigeration Unit Fuel Level (%) (percent)
            * `reeferPowerSource` (Reefer Power Source): The power source of the refrigeration unit (Diesel, Electric or Cryo) (values: engine | electric | cryo)
            * `reeferReturnAirZone1` (Reefer Return Air Temperature (Zone 1)): Return air temperature for the reefer's zone 1 (celsius)
            * `reeferReturnAirZone2` (Reefer Return Air Temperature (Zone 2)): Return air temperature for the reefer's zone 2 (celsius)
            * `reeferReturnAirZone3` (Reefer Return Air Temperature (Zone 3)): Return air temperature for the reefer's zone 3 (celsius)
            * `reeferRunMode` (Reefer Run Mode): The run mode of the refrigeration unit (Continuous or Start/Stop) (values: continuous | startStop)
            * `reeferSetPointZone1` (Reefer Set Point (Zone 1)): Current set point for the reefer's zone 1 (celsius)
            * `reeferSetPointZone2` (Reefer Set Point (Zone 2)): Current set point for the reefer's zone 2 (celsius)
            * `reeferSetPointZone3` (Reefer Set Point (Zone 3)): Current set point for the reefer's zone 3 (celsius)
            * `reeferState` (Reefer State): The on/off state of the refrigeration unit (values: off | active | error | inactive)
            * `reeferStateZone1` (Reefer State (Zone 1)): The on/off state of the refrigeration unit (Zone 1) (values: off | active | error | inactive)
            * `reeferStateZone2` (Reefer State (Zone 2)): The on/off state of the refrigeration unit (Zone 2) (values: off | active | error | inactive)
            * `reeferStateZone3` (Reefer State (Zone 3)): The on/off state of the refrigeration unit (Zone 3) (values: off | active | error | inactive)
            * `reeferSupplyAirZone1` (Reefer Supply Air Temperature (Zone 1)): Supply air temperature for the reefer's zone 1 (celsius)
            * `reeferSupplyAirZone2` (Reefer Supply Air Temperature (Zone 2)): Supply air temperature for the reefer's zone 2 (celsius)
            * `reeferSupplyAirZone3` (Reefer Supply Air Temperature (Zone 3)): Supply air temperature for the reefer's zone 3 (celsius)
            * `reeferTemperatureRecorder1` (Reefer Temperature Recorder (Zone 1)): Temperature recorder reading for reefer zone 1 (celsius)
            * `reeferTemperatureRecorder2` (Reefer Temperature Recorder (Zone 2)): Temperature recorder reading for reefer zone 2 (celsius)
            * `reeferTemperatureRecorder3` (Reefer Temperature Recorder (Zone 3)): Temperature recorder reading for reefer zone 3 (celsius)
            * `reeferTemperatureRecorder4` (Reefer Temperature Recorder (Zone 4)): Temperature recorder reading for reefer zone 4 (celsius)
            * `reeferTemperatureRecorder5` (Reefer Temperature Recorder (Zone 5)): Temperature recorder reading for reefer zone 5 (celsius)
            * `reeferTemperatureRecorder6` (Reefer Temperature Recorder (Zone 6)): Temperature recorder reading for reefer zone 6 (celsius)

            </details>

            <details>
            <summary><strong>smartTrailer</strong></summary>

            * `addressEntry` (Address Entry): Address data from the address entry event
            * `addressExit` (Address Exit): Address data from the address exit event
            * `ag51BatteryStatus` (AG51 Battery Status): Battery status of the AG51 gateway based on temperature-compensated voltage threshold. The threshold varies from 3672mV at -40°C to 4579mV at 60°C. (values: ok | low)
            * `ag51BatteryTemperature` (AG51 Battery Temperature): Internal temperature of the AG51 gateway battery in degrees Celsius (celsius)
            * `ag51BatteryVoltage` (AG51 Battery Voltage): Total battery voltage of the AG51 gateway (sum of all 3 cells) in volts (volt)
            * `atisLamp` (Atis Lamp status): Atis lamp on/off status (values: off | on)
            * `derivedCargoState` (Cargo Status): Indicates if the overall cargo status of the asset is Empty, Partially Empty, Full, or Unknown. (values: unknown | empty | partiallyEmpty | full)
            * `doorClosedStatus` (Door Closed Status): Status indicating whether a door is closed or open (values: open | closed)
            * `doorClosedStatusAdvanced` (Door Closed Status (Advanced)): Status indicating whether a door is closed or open (values: open | closed)
            * `environmentMonitorAmbientTemperature` (Ambient Temperature): Air temperature at the environmental monitor device (built-in sensor). (celsius)
            * `environmentMonitorThermistorTemperature` (Thermistor Temperature): Temperature from an external thermistor probe (e.g. cable probe in cargo or reefer). (celsius)
            * `trailerMovingWithoutPower` (Trailer Moving Without Power): Trailer moving without power status (values: off | on)
            * `validBrakeScore` (Braking Performance Value): Percent score representing trailer braking effectiveness using regression analysis over the past 90 days, guaranteed to have under 3% margin of error. (percent)
            * `widgetBatteryVoltage` (Widget Battery Voltage): Battery voltage level of the widget sensor in millivolts (volt)
            * `widgetBatteryVoltageLow` (Widget Battery Voltage Low): Indicates if widget battery voltage is below 1500mV threshold (values: normal | low)
            * `widgetDisconnect` (Widget Disconnection Status): Connection status between widget and device (values: connected | disconnected)

            </details>

            **Note:** This is not an exhaustive list. Your organization may have access to additional readings based on enabled features or custom configurations. Use the `/readings/definitions` endpoint to retrieve all available reading IDs for your organization.

        entity_type : str
            A entity type of the entityIds or externalIds to fetch readings for. Use /readings/definitions endpoint to get a list of valid entity types. (Examples: asset, sensor)

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        entity_ids : typing.Optional[str]
            A filter on the data based on this comma-separated list of entity IDs or external IDs. If not set, all entities are returned.

        external_ids : typing.Optional[str]
            A filter on the data based on this comma-separated list of external IDs. (Examples: samsara.serial:ZPXKLMN7VJ, samsara.serial:ABXKIMN4NM)

        as_of_time : typing.Optional[str]
            A filter on the data that returns the last known data points with timestamps less than or equal to this value. Defaults to now if not provided. Must be a string in RFC 3339 format. Millisecond precision and timezones are supported. (Examples: 2020-01-27T07:06:25Z)

        include_external_ids : typing.Optional[bool]
            Optional boolean indicating whether to return external IDs on supported entities

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReadingsGetReadingsSnapshotResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_readings_snapshot(
                reading_ids="readingIds",
                entity_type="entityType",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_readings_snapshot(
            reading_ids=reading_ids,
            entity_type=entity_type,
            after=after,
            entity_ids=entity_ids,
            external_ids=external_ids,
            as_of_time=as_of_time,
            include_external_ids=include_external_ids,
            request_options=request_options,
        )
        return _response.data

    async def get_report_configs(
        self,
        *,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReportsGetReportConfigsResponseBody:
        """
        Get report configs created in the organization.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Custom Reports** under the Custom Reports category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            Maximum number of configs to return

        ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            The list of report config IDs to retrieve. Include up to 10 report config IDs. If not provided, all configs will be returned.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReportsGetReportConfigsResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_report_configs()


        asyncio.run(main())
        """
        _response = await self._raw_client.get_report_configs(
            after=after, limit=limit, ids=ids, request_options=request_options
        )
        return _response.data

    async def get_datasets(
        self,
        *,
        ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReportsGetDatasetsResponseBody:
        """
        Get datasets for custom reports.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Custom Reports** under the Custom Reports category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            The list of dataset IDs to retrieve the datasets for. Include up to 10 dataset IDs. If not provided, all datasets will be returned.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            Maximum number of datasets to return.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReportsGetDatasetsResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_datasets()


        asyncio.run(main())
        """
        _response = await self._raw_client.get_datasets(
            ids=ids, after=after, limit=limit, request_options=request_options
        )
        return _response.data

    async def get_report_runs(
        self,
        *,
        report_config_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReportsGetReportRunsResponseBody:
        """
        Get custom report runs created by the user.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Custom Reports** under the Custom Reports category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        report_config_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            The list of report config IDs to retrieve the report runs for. Include up to 10 report config IDs. If not provided, runs for all configs will be returned.

        ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            The list of report run IDs to retrieve the report runs for. Include up to 10 report run IDs. If not provided, all report runs will be returned.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            Maximum number of runs to return.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReportsGetReportRunsResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_report_runs()


        asyncio.run(main())
        """
        _response = await self._raw_client.get_report_runs(
            report_config_ids=report_config_ids, ids=ids, after=after, limit=limit, request_options=request_options
        )
        return _response.data

    async def create_report_run(
        self,
        *,
        report_config: CreateReportConfigObjectRequestBody,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReportsCreateReportRunResponseBody:
        """
        Triggers a new custom report run based on the provided configuration.

         <b>Rate limit:</b> 50 requests/hour (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Custom Reports** under the Custom Reports category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        report_config : CreateReportConfigObjectRequestBody

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReportsCreateReportRunResponseBody
            Accepted response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara, CreateReportConfigObjectRequestBody

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.create_report_run(
                report_config=CreateReportConfigObjectRequestBody(),
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.create_report_run(
            report_config=report_config, request_options=request_options
        )
        return _response.data

    async def get_report_run_data(
        self,
        *,
        id: str,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> ReportsGetReportRunDataResponseBody:
        """
        Get data for the given custom report run.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Custom Reports** under the Custom Reports category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            ID of the report run.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            Maximum number of rows to return.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        ReportsGetReportRunDataResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_report_run_data(
                id="id",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_report_run_data(
            id=id, after=after, limit=limit, request_options=request_options
        )
        return _response.data

    async def list_ridership_accounts(
        self,
        *,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipAccountsListRidershipAccountsResponseBody:
        """
        List all ridership accounts for the organization.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            The limit for how many objects will be in the response. Default and max for this value is 512 objects.

        include_external_ids : typing.Optional[bool]
            Optional boolean indicating whether to return external IDs on supported entities

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipAccountsListRidershipAccountsResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.list_ridership_accounts()


        asyncio.run(main())
        """
        _response = await self._raw_client.list_ridership_accounts(
            after=after, limit=limit, include_external_ids=include_external_ids, request_options=request_options
        )
        return _response.data

    async def create_ridership_account(
        self,
        *,
        name: str,
        external_ids: typing.Optional[typing.Dict[str, str]] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipAccountsCreateRidershipAccountResponseBody:
        """
        Create a new ridership account.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        name : str
            Name of the ridership account.

        external_ids : typing.Optional[typing.Dict[str, str]]
            A map of external ids

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipAccountsCreateRidershipAccountResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.create_ridership_account(
                name="Springfield Public Schools",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.create_ridership_account(
            name=name, external_ids=external_ids, request_options=request_options
        )
        return _response.data

    async def update_ridership_account(
        self,
        *,
        id: str,
        name: str,
        external_ids: typing.Optional[typing.Dict[str, str]] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipAccountsUpdateRidershipAccountResponseBody:
        """
        Update a ridership account by Samsara ID. All provided fields will overwrite existing values (PUT semantics).

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            The Samsara UUID of the ridership account.

        name : str
            Name of the ridership account.

        external_ids : typing.Optional[typing.Dict[str, str]]
            A map of external ids

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipAccountsUpdateRidershipAccountResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.update_ridership_account(
                id="id",
                name="Springfield Public Schools",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.update_ridership_account(
            id=id, name=name, external_ids=external_ids, request_options=request_options
        )
        return _response.data

    async def delete_ridership_account(
        self, *, id: str, request_options: typing.Optional[RequestOptions] = None
    ) -> None:
        """
        Delete a ridership account by Samsara ID.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            The Samsara UUID of the ridership account.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.delete_ridership_account(
                id="id",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.delete_ridership_account(id=id, request_options=request_options)
        return _response.data

    async def get_ridership_account(
        self,
        id: str,
        *,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipAccountsGetRidershipAccountResponseBody:
        """
        Get a single ridership account by ID. The ID can be a Samsara UUID or an external ID in `key:value` format.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            ID of the ridership account. This can either be the Samsara-specified UUID, or an external ID. External IDs are customer-specified key-value pairs. To specify an external ID, use the following format: `key:value`. For example, `district:SPR-001`.

        include_external_ids : typing.Optional[bool]
            Optional boolean indicating whether to return external IDs on supported entities

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipAccountsGetRidershipAccountResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_ridership_account(
                id="id",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_ridership_account(
            id, include_external_ids=include_external_ids, request_options=request_options
        )
        return _response.data

    async def list_ridership_passengers(
        self,
        *,
        account_id: str,
        after: typing.Optional[str] = None,
        limit: typing.Optional[int] = None,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipPassengersListRidershipPassengersResponseBody:
        """
        List ridership passengers for an account.

         <b>Rate limit:</b> 5 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        account_id : str
            The Samsara UUID of the ridership account to filter passengers by.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        limit : typing.Optional[int]
            The limit for how many objects will be in the response. Default and max for this value is 512 objects.

        include_external_ids : typing.Optional[bool]
            Optional boolean indicating whether to return external IDs on supported entities

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipPassengersListRidershipPassengersResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.list_ridership_passengers(
                account_id="accountId",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.list_ridership_passengers(
            account_id=account_id,
            after=after,
            limit=limit,
            include_external_ids=include_external_ids,
            request_options=request_options,
        )
        return _response.data

    async def create_ridership_passenger(
        self,
        *,
        account_id: str,
        first_name: str,
        last_name: str,
        classification: typing.Optional[RidershipPassengersCreateRidershipPassengerRequestBodyClassification] = OMIT,
        external_ids: typing.Optional[typing.Dict[str, str]] = OMIT,
        identifiers: typing.Optional[typing.Sequence[RidershipPassengerIdentifierInputRequestBody]] = OMIT,
        special_instructions: typing.Optional[RidershipPassengerSpecialInstructionsInputRequestBody] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipPassengersCreateRidershipPassengerResponseBody:
        """
        Create a new ridership passenger.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        account_id : str
            The Samsara UUID of the ridership account this passenger belongs to.

        first_name : str
            First name of the passenger.

        last_name : str
            Last name of the passenger.

        classification : typing.Optional[RidershipPassengersCreateRidershipPassengerRequestBodyClassification]
            Classification or grade level of the passenger.  Valid values: `unknown`, `pk1`, `pk2`, `pk3`, `pk4`, `k`, `grade1`, `grade2`, `grade3`, `grade4`, `grade5`, `grade6`, `grade7`, `grade8`, `grade9`, `grade10`, `grade11`, `grade12`

        external_ids : typing.Optional[typing.Dict[str, str]]
            A map of external ids

        identifiers : typing.Optional[typing.Sequence[RidershipPassengerIdentifierInputRequestBody]]
            List of identifiers associated with the passenger.

        special_instructions : typing.Optional[RidershipPassengerSpecialInstructionsInputRequestBody]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipPassengersCreateRidershipPassengerResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.create_ridership_passenger(
                account_id="e4b2c3a5-7d6f-4e8b-9a0c-1b2d3e4f5a6b",
                first_name="John",
                last_name="Doe",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.create_ridership_passenger(
            account_id=account_id,
            first_name=first_name,
            last_name=last_name,
            classification=classification,
            external_ids=external_ids,
            identifiers=identifiers,
            special_instructions=special_instructions,
            request_options=request_options,
        )
        return _response.data

    async def update_ridership_passenger(
        self,
        *,
        id: str,
        account_id: str,
        first_name: str,
        last_name: str,
        classification: typing.Optional[RidershipPassengersUpdateRidershipPassengerRequestBodyClassification] = OMIT,
        external_ids: typing.Optional[typing.Dict[str, str]] = OMIT,
        identifiers: typing.Optional[typing.Sequence[RidershipPassengerIdentifierInputRequestBody]] = OMIT,
        special_instructions: typing.Optional[RidershipPassengerSpecialInstructionsInputRequestBody] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipPassengersUpdateRidershipPassengerResponseBody:
        """
        Update a ridership passenger by Samsara ID. All provided fields will overwrite existing values (PUT semantics).

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            The Samsara UUID of the ridership passenger.

        account_id : str
            The Samsara UUID of the ridership account this passenger belongs to.

        first_name : str
            First name of the passenger.

        last_name : str
            Last name of the passenger.

        classification : typing.Optional[RidershipPassengersUpdateRidershipPassengerRequestBodyClassification]
            Classification or grade level of the passenger.  Valid values: `unknown`, `pk1`, `pk2`, `pk3`, `pk4`, `k`, `grade1`, `grade2`, `grade3`, `grade4`, `grade5`, `grade6`, `grade7`, `grade8`, `grade9`, `grade10`, `grade11`, `grade12`

        external_ids : typing.Optional[typing.Dict[str, str]]
            A map of external ids

        identifiers : typing.Optional[typing.Sequence[RidershipPassengerIdentifierInputRequestBody]]
            List of identifiers associated with the passenger.

        special_instructions : typing.Optional[RidershipPassengerSpecialInstructionsInputRequestBody]

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipPassengersUpdateRidershipPassengerResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.update_ridership_passenger(
                id="id",
                account_id="e4b2c3a5-7d6f-4e8b-9a0c-1b2d3e4f5a6b",
                first_name="John",
                last_name="Doe",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.update_ridership_passenger(
            id=id,
            account_id=account_id,
            first_name=first_name,
            last_name=last_name,
            classification=classification,
            external_ids=external_ids,
            identifiers=identifiers,
            special_instructions=special_instructions,
            request_options=request_options,
        )
        return _response.data

    async def delete_ridership_passenger(
        self, *, id: str, request_options: typing.Optional[RequestOptions] = None
    ) -> None:
        """
        Delete a ridership passenger by Samsara ID.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            The Samsara UUID of the ridership passenger.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.delete_ridership_passenger(
                id="id",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.delete_ridership_passenger(id=id, request_options=request_options)
        return _response.data

    async def get_ridership_passenger(
        self,
        id: str,
        *,
        include_external_ids: typing.Optional[bool] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipPassengersGetRidershipPassengerResponseBody:
        """
        Get a single ridership passenger by ID. The ID can be a Samsara UUID or an external ID in `key:value` format.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        id : str
            ID of the ridership passenger. This can either be the Samsara-specified UUID, or an external ID. External IDs are customer-specified key-value pairs. To specify an external ID, use the following format: `key:value`. For example, `student:STU-001`.

        include_external_ids : typing.Optional[bool]
            Optional boolean indicating whether to return external IDs on supported entities

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipPassengersGetRidershipPassengerResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_ridership_passenger(
                id="id",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_ridership_passenger(
            id, include_external_ids=include_external_ids, request_options=request_options
        )
        return _response.data

    async def create_ridership_route_setup(
        self,
        *,
        account_id: str,
        passengers: typing.Sequence[RidershipRouteSetupPassengerInputRequestBody],
        route_id: str,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipRouteSetupsCreateRidershipRouteSetupResponseBody:
        """
        Create or replace the passenger assignment setup for a route.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        account_id : str
            The Samsara UUID of the ridership account.

        passengers : typing.Sequence[RidershipRouteSetupPassengerInputRequestBody]
            List of passenger assignments for the route.

        route_id : str
            The route ID. This is the Samsara route ID returned by the Routing API.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipRouteSetupsCreateRidershipRouteSetupResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara, RidershipRouteSetupPassengerInputRequestBody

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.create_ridership_route_setup(
                account_id="e4b2c3a5-7d6f-4e8b-9a0c-1b2d3e4f5a6b",
                passengers=[
                    RidershipRouteSetupPassengerInputRequestBody(
                        passenger_id="a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
                    )
                ],
                route_id="123456",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.create_ridership_route_setup(
            account_id=account_id, passengers=passengers, route_id=route_id, request_options=request_options
        )
        return _response.data

    async def update_ridership_route_setup(
        self,
        *,
        route_id: str,
        account_id: str,
        passengers: typing.Sequence[RidershipRouteSetupPassengerInputRequestBody],
        request_options: typing.Optional[RequestOptions] = None,
    ) -> RidershipRouteSetupsUpdateRidershipRouteSetupResponseBody:
        """
        Update (replace) the passenger assignment setup for a route. All existing assignments will be replaced with the provided assignments.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        route_id : str
            The route ID. This is the Samsara route ID returned by the Routing API.

        account_id : str
            The Samsara UUID of the ridership account.

        passengers : typing.Sequence[RidershipRouteSetupPassengerInputRequestBody]
            List of passenger assignments for the route.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipRouteSetupsUpdateRidershipRouteSetupResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara, RidershipRouteSetupPassengerInputRequestBody

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.update_ridership_route_setup(
                route_id="routeId",
                account_id="e4b2c3a5-7d6f-4e8b-9a0c-1b2d3e4f5a6b",
                passengers=[
                    RidershipRouteSetupPassengerInputRequestBody(
                        passenger_id="a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
                    )
                ],
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.update_ridership_route_setup(
            route_id=route_id, account_id=account_id, passengers=passengers, request_options=request_options
        )
        return _response.data

    async def delete_ridership_route_setup(
        self, *, route_id: str, request_options: typing.Optional[RequestOptions] = None
    ) -> None:
        """
        Delete the passenger assignment setup for a route.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Write Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        route_id : str
            The route ID. This is the Samsara route ID returned by the Routing API.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        None

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.delete_ridership_route_setup(
                route_id="routeId",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.delete_ridership_route_setup(
            route_id=route_id, request_options=request_options
        )
        return _response.data

    async def get_ridership_route_setup(
        self, route_id: str, *, request_options: typing.Optional[RequestOptions] = None
    ) -> RidershipRouteSetupsGetRidershipRouteSetupResponseBody:
        """
        Get the passenger assignment setup for a route by route ID.

         <b>Rate limit:</b> 10 requests/sec (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Ridership** under the Ridership category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        route_id : str
            The route ID. This is the Samsara route ID returned by the Routing API.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        RidershipRouteSetupsGetRidershipRouteSetupResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_ridership_route_setup(
                route_id="routeId",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_ridership_route_setup(route_id, request_options=request_options)
        return _response.data

    async def get_driver_safety_scores(
        self,
        *,
        end_time: str,
        start_time: str,
        driver_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> SafetyScoresGetDriverSafetyScoresResponseBody:
        """
        Get safety scores and overall risk factors for drivers.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Safety Events & Scores** under the Safety & Cameras category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        end_time : str
            End time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end before this timestamp.

        start_time : str
            Start time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end after this timestamp. Can be up to 1 year before endTime.

        driver_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Comma separated list of driver IDs to filter by. Include up to 100 IDs. Defaults to all drivers.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SafetyScoresGetDriverSafetyScoresResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_driver_safety_scores(
                end_time="endTime",
                start_time="startTime",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_driver_safety_scores(
            end_time=end_time,
            start_time=start_time,
            driver_ids=driver_ids,
            after=after,
            request_options=request_options,
        )
        return _response.data

    async def get_driver_safety_score_trips(
        self,
        *,
        end_time: str,
        start_time: str,
        driver_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> SafetyScoresGetDriverSafetyScoreTripsResponseBody:
        """
        Get trips contributing to a driver's safety score, and risk factors in each trip.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Safety Events & Scores** under the Safety & Cameras category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        end_time : str
            End time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end before this timestamp.

        start_time : str
            Start time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end after this timestamp. Can be up to 1 year before endTime.

        driver_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Comma separated list of driver IDs to fetch trip breakdowns for. Include up to 100 drivers.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SafetyScoresGetDriverSafetyScoreTripsResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_driver_safety_score_trips(
                end_time="endTime",
                start_time="startTime",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_driver_safety_score_trips(
            end_time=end_time,
            start_time=start_time,
            driver_ids=driver_ids,
            after=after,
            request_options=request_options,
        )
        return _response.data

    async def get_tag_group_safety_scores(
        self,
        *,
        end_time: str,
        start_time: str,
        score_type: GetTagGroupSafetyScoresRequestScoreType,
        tag_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> SafetyScoresGetTagGroupSafetyScoresResponseBody:
        """
        Get a combined safety score and risk factors for a set of tags.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Safety Events & Scores** under the Safety & Cameras category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        end_time : str
            End time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end before this timestamp.

        start_time : str
            Start time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end after this timestamp. Can be up to 1 year before endTime.

        score_type : GetTagGroupSafetyScoresRequestScoreType
            Whether to calculate tag score with either all drivers or all vehicles in the tag. Deactivated drivers and unassigned trips are not included when calculating scores for drivers.   Valid values: `driver`, `vehicle`

        tag_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Comma separated list of tag IDs to filter by. Include up to 100 IDs. Defaults to all tags.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SafetyScoresGetTagGroupSafetyScoresResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_tag_group_safety_scores(
                end_time="endTime",
                start_time="startTime",
                score_type="driver",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_tag_group_safety_scores(
            end_time=end_time,
            start_time=start_time,
            score_type=score_type,
            tag_ids=tag_ids,
            request_options=request_options,
        )
        return _response.data

    async def get_tag_safety_scores(
        self,
        *,
        end_time: str,
        start_time: str,
        score_type: GetTagSafetyScoresRequestScoreType,
        tag_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> SafetyScoresGetTagSafetyScoresResponseBody:
        """
        Get safety scores and overall risk factors for tags.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Safety Events & Scores** under the Safety & Cameras category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        end_time : str
            End time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end before this timestamp.

        start_time : str
            Start time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end after this timestamp. Can be up to 1 year before endTime.

        score_type : GetTagSafetyScoresRequestScoreType
            Whether to calculate tag score with either all drivers or all vehicles in the tag. Deactivated drivers and unassigned trips are not included when calculating scores for drivers.   Valid values: `driver`, `vehicle`

        tag_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Comma separated list of tag IDs to filter by. Include up to 100 IDs. Defaults to all tags.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SafetyScoresGetTagSafetyScoresResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_tag_safety_scores(
                end_time="endTime",
                start_time="startTime",
                score_type="driver",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_tag_safety_scores(
            end_time=end_time,
            start_time=start_time,
            score_type=score_type,
            tag_ids=tag_ids,
            after=after,
            request_options=request_options,
        )
        return _response.data

    async def get_vehicle_safety_scores(
        self,
        *,
        end_time: str,
        start_time: str,
        vehicle_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> SafetyScoresGetVehicleSafetyScoresResponseBody:
        """
        Get safety scores and overall risk factors for vehicles.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Safety Events & Scores** under the Safety & Cameras category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        end_time : str
            End time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end before this timestamp.

        start_time : str
            Start time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end after this timestamp. Can be up to 1 year before endTime.

        vehicle_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Comma separated list of vehicle IDs to filter by. Include up to 100 IDs. Defaults to all vehicles.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SafetyScoresGetVehicleSafetyScoresResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_vehicle_safety_scores(
                end_time="endTime",
                start_time="startTime",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_vehicle_safety_scores(
            end_time=end_time,
            start_time=start_time,
            vehicle_ids=vehicle_ids,
            after=after,
            request_options=request_options,
        )
        return _response.data

    async def get_vehicle_safety_score_trips(
        self,
        *,
        end_time: str,
        start_time: str,
        vehicle_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
        after: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> SafetyScoresGetVehicleSafetyScoreTripsResponseBody:
        """
        Get trips contributing to a vehicle's safety score, and risk factors in each trip.

         <b>Rate limit:</b> 100 requests/min (learn more about rate limits <a href="https://developers.samsara.com/docs/rate-limits" target="_blank">here</a>).

        To use this endpoint, select **Read Safety Events & Scores** under the Safety & Cameras category when creating or editing an API token. <a href="https://developers.samsara.com/docs/authentication#scopes-for-api-tokens" target="_blank">Learn More.</a>


         **Submit Feedback**: Likes, dislikes, and API feature requests should be filed as feedback in our <a href="https://forms.gle/zkD4NCH7HjKb7mm69" target="_blank">API feedback form</a>. If you encountered an issue or noticed inaccuracies in the API documentation, please <a href="https://www.samsara.com/help" target="_blank">submit a case</a> to our support team.

        Parameters
        ----------
        end_time : str
            End time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end before this timestamp.

        start_time : str
            Start time in RFC 3339 format. Millisecond precision and timezones are supported. Includes trips that end after this timestamp. Can be up to 1 year before endTime.

        vehicle_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            Comma separated list of vehicle IDs to fetch trip breakdowns for. Include up to 100 vehicles.

        after : typing.Optional[str]
             If specified, this should be the endCursor value from the previous page of results. When present, this request will return the next page of results that occur immediately after the previous page of results.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        SafetyScoresGetVehicleSafetyScoreTripsResponseBody
            OK response.

        Examples
        --------
        import asyncio

        from samsara import AsyncSamsara

        client = AsyncSamsara(
            token="YOUR_TOKEN",
        )


        async def main() -> None:
            await client.beta_ap_is.get_vehicle_safety_score_trips(
                end_time="endTime",
                start_time="startTime",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_vehicle_safety_score_trips(
            end_time=end_time,
            start_time=start_time,
            vehicle_ids=vehicle_ids,
            after=after,
            request_options=request_options,
        )
        return _response.data
