Trendsic Platform Service

<back to all web services

CourierProfileRequest

Requires Authentication
The following routes are available for this service:
GET,OPTIONS/v1/dispatch/courier/profiles/{Id}
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 CourierProfileSummary:
    courier_profile_i_d: int = 0
    code: Optional[str] = None
    name: Optional[str] = None
    business_name: Optional[str] = None
    route_shape: Optional[str] = None
    enabled: bool = False
    template_from: Optional[str] = None
    drivers: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierTemplateOption:
    key: Optional[str] = None
    label: Optional[str] = None
    detail: Optional[str] = None
    route_shape: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierPay:
    worker_class: Optional[str] = None
    per_pickup: Decimal = decimal.Decimal(0)
    per_stop: Decimal = decimal.Decimal(0)
    per_missed: Decimal = decimal.Decimal(0)
    per_cancel: Decimal = decimal.Decimal(0)
    wait_after_min: int = 0
    wait_per_min: Decimal = decimal.Decimal(0)
    mileage_on: bool = False
    per_mile: Decimal = decimal.Decimal(0)
    min_per_job: Decimal = decimal.Decimal(0)
    tips_pct: Decimal = decimal.Decimal(0)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierDispatch:
    ping_secs: int = 0
    radius_mi: Decimal = decimal.Decimal(0)
    decline_penalty: bool = False
    next_rule: Optional[str] = None
    go_min: int = 0
    last_min: int = 0
    near_full: int = 0
    margin_min: int = 0
    traffic_source: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierMissed:
    wait_min: int = 0
    fee: Decimal = decimal.Decimal(0)
    cancel_fee: Decimal = decimal.Decimal(0)
    auto_rebook: bool = False
    require_contact: bool = False
    require_photo: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierPrivacy:
    thread_hrs: int = 0
    photo_days: int = 0
    lock_names: Optional[str] = None
    hide_addr: bool = False
    live_eta: bool = False
    tipping: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierPricing:
    base: Decimal = decimal.Decimal(0)
    per_unit: Decimal = decimal.Decimal(0)
    per_mile: Decimal = decimal.Decimal(0)
    min_order: Decimal = decimal.Decimal(0)
    tax_pct: Decimal = decimal.Decimal(0)
    final_after_count: bool = False
    service_area: List[str] = field(default_factory=list)
    window_min: int = 0
    surcharges: Dict[str, Decimal] = field(default_factory=dict)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierBooking:
    on: bool = False
    slug: Optional[str] = None
    asap: bool = False
    min_lead_min: int = 0
    open: Optional[str] = None
    close: Optional[str] = None
    drive_buffer_min: int = 0
    zips: List[str] = field(default_factory=list)
    recurring: bool = False
    pay_timing: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierLevelView:
    code: Optional[str] = None
    name: Optional[str] = None
    in_by: Optional[str] = None
    within_min: int = 0
    ready: Optional[str] = None
    days: List[int] = field(default_factory=list)
    is_on: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierFacilityView:
    code: Optional[str] = None
    name: Optional[str] = None
    address: Optional[str] = None
    intake_min: int = 0
    levels: List[CourierLevelView] = field(default_factory=list)
    holidays: List[str] = field(default_factory=list)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierVehicleView:
    equipment_i_d: int = 0
    unit_number: Optional[str] = None
    name: Optional[str] = None
    unit: Optional[str] = None
    cap: Decimal = decimal.Decimal(0)
    cold: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierProfileContext:
    drivers: int = 0
    profile_count: int = 0
    pay_plan_id: Optional[int] = None
    zone_mode: Optional[str] = None
    zone_name: Optional[str] = None
    zone_count: int = 0
    has_booking_page: bool = False
    has_rate_config: bool = False
    vehicle_facts: Dict[str, str] = field(default_factory=dict)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierProfileView:
    courier_profile_i_d: int = 0
    code: Optional[str] = None
    name: Optional[str] = None
    business_name: Optional[str] = None
    route_shape: Optional[str] = None
    enabled: bool = False
    template_from: Optional[str] = None
    unit_one: Optional[str] = None
    unit_many: Optional[str] = None
    facility_noun: Optional[str] = None
    unit_one_es: Optional[str] = None
    unit_many_es: Optional[str] = None
    facility_noun_es: Optional[str] = None
    tag_mode: Optional[str] = None
    tag_formats: List[str] = field(default_factory=list)
    pay: Optional[CourierPay] = None
    dispatch: Optional[CourierDispatch] = None
    missed: Optional[CourierMissed] = None
    privacy: Optional[CourierPrivacy] = None
    pricing: Optional[CourierPricing] = None
    booking: Optional[CourierBooking] = None
    facilities: List[CourierFacilityView] = field(default_factory=list)
    vehicles: List[CourierVehicleView] = field(default_factory=list)
    proof: Dict[str, Dict[str, str]] = field(default_factory=dict)
    context: Optional[CourierProfileContext] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierIssue:
    key: Optional[str] = None
    section: Optional[str] = None
    message: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierChange:
    key: Optional[str] = None
    section: Optional[str] = None
    label: Optional[str] = None
    from_: Optional[str] = field(metadata=config(field_name='from'), default=None)
    to: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierPreviewLine:
    k: Optional[str] = None
    v: Optional[str] = None
    dot: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierPreview:
    deadline_title: Optional[str] = None
    deadline_lead: Optional[str] = None
    room_w: Optional[str] = None
    last_w: Optional[str] = None
    go_w: Optional[str] = None
    zones: List[CourierPreviewLine] = field(default_factory=list)
    pay_sub: Optional[str] = None
    pay_rows: List[CourierPreviewLine] = field(default_factory=list)
    pay_total: Optional[str] = None
    proof_rows: List[CourierPreviewLine] = field(default_factory=list)
    ping: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierFleetVehicle:
    equipment_i_d: int = 0
    unit_number: Optional[str] = None
    name: Optional[str] = None
    vehicle_type: Optional[str] = None
    unit: Optional[str] = None
    cap: Optional[Decimal] = None
    cold: bool = False
    status: Optional[str] = None
    assigned: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierResponse:
    profiles: List[CourierProfileSummary] = field(default_factory=list)
    templates: List[CourierTemplateOption] = field(default_factory=list)
    profile: Optional[CourierProfileView] = None
    issues: List[CourierIssue] = field(default_factory=list)
    changes: List[CourierChange] = field(default_factory=list)
    preview: Optional[CourierPreview] = None
    fleet: List[CourierFleetVehicle] = field(default_factory=list)
    response_status: Optional[ResponseStatus] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierProfileRequest:
    id: int = 0
    facility_code: Optional[str] = None

Python CourierProfileRequest DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

GET /v1/dispatch/courier/profiles/{Id} HTTP/1.1 
Host: api.dev.dynamics.trendsic.com 
Accept: text/jsv
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	Profiles: 
	[
		{
			CourierProfileID: 0,
			Code: String,
			Name: String,
			BusinessName: String,
			RouteShape: String,
			Enabled: False,
			TemplateFrom: String,
			Drivers: 0
		}
	],
	Templates: 
	[
		{
			Key: String,
			Label: String,
			Detail: String,
			RouteShape: String
		}
	],
	Profile: 
	{
		CourierProfileID: 0,
		Code: String,
		Name: String,
		BusinessName: String,
		RouteShape: String,
		Enabled: False,
		TemplateFrom: String,
		UnitOne: String,
		UnitMany: String,
		FacilityNoun: String,
		UnitOneEs: String,
		UnitManyEs: String,
		FacilityNounEs: String,
		TagMode: String,
		TagFormats: 
		[
			String
		],
		Pay: 
		{
			WorkerClass: String,
			PerPickup: 0,
			PerStop: 0,
			PerMissed: 0,
			PerCancel: 0,
			WaitAfterMin: 0,
			WaitPerMin: 0,
			MileageOn: False,
			PerMile: 0,
			MinPerJob: 0,
			TipsPct: 0
		},
		Dispatch: 
		{
			PingSecs: 0,
			RadiusMi: 0,
			DeclinePenalty: False,
			NextRule: String,
			GoMin: 0,
			LastMin: 0,
			NearFull: 0,
			MarginMin: 0,
			TrafficSource: String
		},
		Missed: 
		{
			WaitMin: 0,
			Fee: 0,
			CancelFee: 0,
			AutoRebook: False,
			RequireContact: False,
			RequirePhoto: False
		},
		Privacy: 
		{
			ThreadHrs: 0,
			PhotoDays: 0,
			LockNames: String,
			HideAddr: False,
			LiveEta: False,
			Tipping: False
		},
		Pricing: 
		{
			Base: 0,
			PerUnit: 0,
			PerMile: 0,
			MinOrder: 0,
			TaxPct: 0,
			FinalAfterCount: False,
			ServiceArea: 
			[
				String
			],
			WindowMin: 0,
			Surcharges: 
			{
				String: 0
			}
		},
		Booking: 
		{
			On: False,
			Slug: String,
			Asap: False,
			MinLeadMin: 0,
			Open: String,
			Close: String,
			DriveBufferMin: 0,
			Zips: 
			[
				String
			],
			Recurring: False,
			PayTiming: String
		},
		Facilities: 
		[
			{
				Code: String,
				Name: String,
				Address: String,
				IntakeMin: 0,
				Levels: 
				[
					{
						Code: String,
						Name: String,
						InBy: String,
						WithinMin: 0,
						Ready: String,
						Days: 
						[
							0
						],
						IsOn: False
					}
				],
				Holidays: 
				[
					String
				]
			}
		],
		Vehicles: 
		[
			{
				EquipmentID: 0,
				UnitNumber: String,
				Name: String,
				Unit: String,
				Cap: 0,
				Cold: False
			}
		],
		Proof: 
		{
			String: 
			{
				String: String
			}
		},
		Context: 
		{
			Drivers: 0,
			ProfileCount: 0,
			PayPlanId: 0,
			ZoneMode: String,
			ZoneName: String,
			ZoneCount: 0,
			HasBookingPage: False,
			HasRateConfig: False,
			VehicleFacts: 
			{
				String: String
			}
		}
	},
	Issues: 
	[
		{
			Key: String,
			Section: String,
			Message: String
		}
	],
	Changes: 
	[
		{
			Key: String,
			Section: String,
			Label: String,
			From: String,
			To: String
		}
	],
	Preview: 
	{
		DeadlineTitle: String,
		DeadlineLead: String,
		RoomW: String,
		LastW: String,
		GoW: String,
		Zones: 
		[
			{
				K: String,
				V: String,
				Dot: String
			}
		],
		PaySub: String,
		PayRows: 
		[
			{
				K: String,
				V: String,
				Dot: String
			}
		],
		PayTotal: String,
		ProofRows: 
		[
			{
				K: String,
				V: String,
				Dot: String
			}
		],
		Ping: String
	},
	Fleet: 
	[
		{
			EquipmentID: 0,
			UnitNumber: String,
			Name: String,
			VehicleType: String,
			Unit: String,
			Cap: 0,
			Cold: False,
			Status: String,
			Assigned: False
		}
	],
	ResponseStatus: 
	{
		ErrorCode: String,
		Message: String,
		StackTrace: String,
		Errors: 
		[
			{
				ErrorCode: String,
				FieldName: String,
				Message: String,
				Meta: 
				{
					String: String
				}
			}
		],
		Meta: 
		{
			String: String
		}
	}
}