""" Options: Date: 2026-10-14 05:26:13 Version: 8.80 Tip: To override a DTO option, remove "#" prefix before updating BaseUrl: https://api.dev.dynamics.trendsic.com #GlobalNamespace: #AddServiceStackTypes: True #AddResponseStatus: False #AddImplicitVersion: #AddDescriptionAsComments: True IncludeTypes: CourierCustomersRequest.* #ExcludeTypes: #DefaultImports: datetime,decimal,marshmallow.fields:*,servicestack:*,typing:*,dataclasses:dataclass/field,dataclasses_json:dataclass_json/LetterCase/Undefined/config,enum:Enum/IntEnum #DataClass: #DataClassJson: """ import datetime import decimal from marshmallow.fields import * from servicestack import * from typing import * from dataclasses import dataclass, field from dataclasses_json import dataclass_json, LetterCase, Undefined, config from enum import Enum, IntEnum @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CourierTrackBusiness: name: Optional[str] = None phone: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CourierBookLevel: code: Optional[str] = None name: Optional[str] = None ready: Optional[str] = None within_min: int = 0 in_by: Optional[str] = None surcharge: Decimal = decimal.Decimal(0) days: List[int] = field(default_factory=list) deadline_min: Optional[int] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class HandoffOptions: hand: bool = False porch: bool = False desk: bool = False sig_required: bool = False id_required: bool = False code_required: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CourierBookProfile: code: Optional[str] = None name: Optional[str] = None shape: Optional[str] = None template: Optional[str] = None unit_one: Optional[str] = None unit_many: Optional[str] = None unit_one_es: Optional[str] = None unit_many_es: Optional[str] = None facility_noun: Optional[str] = None facility_noun_es: Optional[str] = None facility_name: Optional[str] = None levels: List[CourierBookLevel] = field(default_factory=list) asap: bool = False recurring: bool = False pay_timing: Optional[str] = None final_after_count: bool = False cancel_fee: Decimal = decimal.Decimal(0) missed_fee: Decimal = decimal.Decimal(0) missed_wait_min: int = 0 service_area: List[str] = field(default_factory=list) zips: List[str] = field(default_factory=list) handoffs: Optional[HandoffOptions] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CourierBookProfileLink: code: Optional[str] = None name: Optional[str] = None shape: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CourierBookPageView: available: bool = False booking_on: bool = False business: Optional[CourierTrackBusiness] = None profile: Optional[CourierBookProfile] = None profiles: List[CourierBookProfileLink] = field(default_factory=list) card_enabled: bool = False publishable_key: Optional[str] = None app_url: Optional[str] = None today: Optional[str] = None weekday: int = 0 now_min: int = 0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CustomerAppBoot: profile: Optional[str] = None available: bool = False reason: Optional[str] = None auth_method: Optional[str] = None slug: Optional[str] = None page: Optional[CourierBookPageView] = None manifest_url: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CustomerAppAddress: id: int = 0 label: Optional[str] = None street: Optional[str] = None unit: Optional[str] = None city: Optional[str] = None zip: Optional[str] = None lat: Optional[Decimal] = None lng: Optional[Decimal] = None in_area: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CustomerAppCard: id: int = 0 label: Optional[str] = None brand: Optional[str] = None last4: Optional[str] = None is_default: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CustomerAppNotif: texts: bool = False push: bool = False promos: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CustomerAppStep: key: Optional[str] = None done: bool = False time: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CustomerAppOrder: id: int = 0 code: Optional[str] = None status: Optional[str] = None state: Optional[str] = None active: bool = False level_code: Optional[str] = None level_name: Optional[str] = None units: int = 0 units_found: Optional[int] = None address: Optional[str] = None unit: Optional[str] = None zip: Optional[str] = None drop_address: Optional[str] = None recipient_name: Optional[str] = None handoff: Optional[str] = None is_asap: bool = False day_ix: int = 0 date_text: Optional[str] = None start_min: Optional[int] = None end_min: Optional[int] = None driver_first_name: Optional[str] = None eta_min: Optional[int] = None promise: Optional[str] = None pay_mode: Optional[str] = None amount: Decimal = decimal.Decimal(0) charged: Optional[Decimal] = None tip: Optional[Decimal] = None card_last4: Optional[str] = None recurrence_id: Optional[int] = None steps: List[CustomerAppStep] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CustomerAppRecurrence: id: int = 0 weekday: int = 0 start_min: int = 0 end_min: int = 0 cadence: Optional[str] = None level_code: Optional[str] = None units: int = 0 handoff: Optional[str] = None address: Optional[str] = None paused: bool = False pay_mode: Optional[str] = None card_last4: Optional[str] = None next_date: Optional[str] = None skipped_date: Optional[str] = None ahead_days: int = 0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CustomerAppInvoice: uid: Optional[str] = None number: Optional[str] = None date_text: Optional[str] = None total: Decimal = decimal.Decimal(0) balance: Decimal = decimal.Decimal(0) paid: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CustomerAppMe: contact_id: int = 0 first_name: Optional[str] = None last_name: Optional[str] = None name: Optional[str] = None phone: Optional[str] = None needs_name: bool = False billing_mode: Optional[str] = None account_code: Optional[str] = None addresses: List[CustomerAppAddress] = field(default_factory=list) cards: List[CustomerAppCard] = field(default_factory=list) notif: Optional[CustomerAppNotif] = None orders: List[CustomerAppOrder] = field(default_factory=list) recurring: List[CustomerAppRecurrence] = field(default_factory=list) invoices: List[CustomerAppInvoice] = field(default_factory=list) today: Optional[str] = None now_min: int = 0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CourierCustomerRow: contact_id: int = 0 name: Optional[str] = None phone: Optional[str] = None billing_mode: Optional[str] = None account_code: Optional[str] = None orders: int = 0 last_order_at: Optional[datetime.datetime] = None unbilled: int = 0 unbilled_amount: Decimal = decimal.Decimal(0) cards: int = 0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class RunResult: invoices: int = 0 orders: int = 0 total: Decimal = decimal.Decimal(0) skipped: List[str] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CourierBookOrderResponse: done: bool = False needs_action: bool = False client_secret: Optional[str] = None setup_intent_id: Optional[str] = None code: Optional[str] = None track_url: Optional[str] = None ics_url: Optional[str] = None window_text: Optional[str] = None promise: Optional[str] = None total: Decimal = decimal.Decimal(0) pay_timing: Optional[str] = None card_last4: Optional[str] = None repeats: Optional[str] = None link_sent_by: Optional[str] = None reopen_step: Optional[str] = None response_status: Optional[ResponseStatus] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CustomerAppResponse: boot: Optional[CustomerAppBoot] = None customer: Optional[CustomerAppMe] = None addresses: List[CustomerAppAddress] = field(default_factory=list) cards: List[CustomerAppCard] = field(default_factory=list) notif: Optional[CustomerAppNotif] = None recurring: List[CustomerAppRecurrence] = field(default_factory=list) booked: Optional[CourierBookOrderResponse] = None sent: bool = False token: Optional[str] = None needs_name: bool = False name: Optional[str] = None url: Optional[str] = None client_secret: Optional[str] = None publishable_key: Optional[str] = None message: Optional[str] = None reopen_step: Optional[str] = None customers: List[CourierCustomerRow] = field(default_factory=list) run: Optional[RunResult] = None response_status: Optional[ResponseStatus] = None # @Route("/v1/dispatch/courier/customers", "GET") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CourierCustomersRequest(IReturn[CustomerAppResponse]): q: Optional[str] = None