Trendsic Platform Service

<back to all web services

CourierTrackMessageRequest

The following routes are available for this service:
POST,OPTIONS/v1/dispatch/track/{Token}/messages
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 CourierTrackActRequest(IReturn[DispatchTrackResponse]):
    token: Optional[str] = None
    act_token: Optional[str] = None
    @staticmethod
    def response_type(): return DispatchTrackResponse


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchTrackStepView:
    name: Optional[str] = None
    at: Optional[datetime.datetime] = None
    done: bool = False
    current: bool = False


@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 CourierTrackDriver:
    first_name: Optional[str] = None
    initial: Optional[str] = None
    vehicle: Optional[str] = None
    plate: Optional[str] = None
    eta_min: Optional[int] = None
    eta_pct: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierTrackProof:
    kind: Optional[str] = None
    photo_url: Optional[str] = None
    at_text: Optional[str] = None
    gps_ok: bool = False
    units: int = 0
    damage_note: Optional[str] = None
    delivered_to: Optional[str] = None
    waited_min: int = 0
    attempts: int = 0
    contacted_text: Optional[str] = None
    each_tagged: bool = False
    each_scanned: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierTrackRating:
    stars: int = 0
    tags: Optional[str] = None
    tip: Decimal = decimal.Decimal(0)
    tip_status: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierTrackSlot:
    id: Optional[str] = None
    day: Optional[str] = None
    day_es: Optional[str] = None
    win: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierTrackMissed:
    code: Optional[str] = None
    fee: Decimal = decimal.Decimal(0)
    waited_min: int = 0
    auto_rebook: bool = False
    rebook_window_text: Optional[str] = None
    slots: List[CourierTrackSlot] = field(default_factory=list)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierTrackCan:
    edit_instructions: bool = False
    change_units: bool = False
    cancel: bool = False
    reschedule_delivery: bool = False
    rebook: bool = False
    rate: bool = False
    message: bool = False
    report: bool = False
    max_units: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierTrackMessage:
    who: Optional[str] = None
    mine: bool = False
    office: bool = False
    at_text: Optional[str] = None
    body: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierTrackView:
    state: Optional[str] = None
    code: Optional[str] = None
    run_code: Optional[str] = None
    shape: Optional[str] = None
    template: Optional[str] = None
    courier_step: 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
    units: int = 0
    units_counted: bool = False
    address: Optional[str] = None
    dropoff_address: Optional[str] = None
    dropoff_name: Optional[str] = None
    instructions: Optional[str] = None
    gate_code: Optional[str] = None
    handoff: Optional[str] = None
    level_name: Optional[str] = None
    ready_promise: Optional[str] = None
    window_text: Optional[str] = None
    is_asap: bool = False
    times: Dict[str, str] = field(default_factory=dict)
    stop_position: Optional[int] = None
    stop_count: Optional[int] = None
    delivery_window_text: Optional[str] = None
    driver: Optional[CourierTrackDriver] = None
    proof: Optional[CourierTrackProof] = None
    handoff_code: Optional[str] = None
    rating: Optional[CourierTrackRating] = None
    tip_allowed: bool = False
    tips_pct: Decimal = decimal.Decimal(0)
    missed: Optional[CourierTrackMissed] = None
    cancel_fee: Decimal = decimal.Decimal(0)
    cancel_fee_charged: Decimal = decimal.Decimal(0)
    cancelled_by: Optional[str] = None
    book_url: Optional[str] = None
    can: Optional[CourierTrackCan] = None
    delivery_slots: List[CourierTrackSlot] = field(default_factory=list)
    messages: List[CourierTrackMessage] = field(default_factory=list)
    messages_open: bool = False
    case_code: Optional[str] = None
    case_status: Optional[str] = None
    case_reply: Optional[str] = None
    thread_hrs: int = 0
    expires_utc: Optional[datetime.datetime] = None
    live_eta: bool = False
    live: bool = False
    server_utc: datetime.datetime = datetime.datetime(1, 1, 1)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchTrackResponse:
    kind: Optional[str] = None
    code: Optional[str] = None
    what: Optional[str] = None
    from_loc: Optional[str] = None
    to_loc: Optional[str] = None
    bags: Optional[int] = None
    fare: Optional[Decimal] = None
    pay_mode: Optional[str] = None
    card_last4: Optional[str] = None
    charged: bool = False
    stage: Optional[str] = None
    headline: Optional[str] = None
    sub: Optional[str] = None
    is_closed: bool = False
    eta: Optional[str] = None
    driver_name: Optional[str] = None
    customer_name: Optional[str] = None
    steps: List[DispatchTrackStepView] = field(default_factory=list)
    expired: bool = False
    invalid: bool = False
    business: Optional[CourierTrackBusiness] = None
    courier: Optional[CourierTrackView] = None
    notice: Optional[str] = None
    response_status: Optional[ResponseStatus] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierTrackMessageRequest(CourierTrackActRequest):
    text: Optional[str] = None

Python CourierTrackMessageRequest 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.

POST /v1/dispatch/track/{Token}/messages HTTP/1.1 
Host: api.dev.dynamics.trendsic.com 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	Text: String,
	Token: String,
	ActToken: String
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	Kind: String,
	Code: String,
	What: String,
	FromLoc: String,
	ToLoc: String,
	Bags: 0,
	Fare: 0,
	PayMode: String,
	CardLast4: String,
	Charged: False,
	Stage: String,
	Headline: String,
	Sub: String,
	IsClosed: False,
	Eta: String,
	DriverName: String,
	CustomerName: String,
	Steps: 
	[
		{
			Name: String,
			At: 0001-01-01,
			Done: False,
			Current: False
		}
	],
	Expired: False,
	Invalid: False,
	Business: 
	{
		Name: String,
		Phone: String
	},
	Courier: 
	{
		State: String,
		Code: String,
		RunCode: String,
		Shape: String,
		Template: String,
		CourierStep: String,
		UnitOne: String,
		UnitMany: String,
		UnitOneEs: String,
		UnitManyEs: String,
		FacilityNoun: String,
		FacilityNounEs: String,
		Units: 0,
		UnitsCounted: False,
		Address: String,
		DropoffAddress: String,
		DropoffName: String,
		Instructions: String,
		GateCode: String,
		Handoff: String,
		LevelName: String,
		ReadyPromise: String,
		WindowText: String,
		IsAsap: False,
		Times: 
		{
			String: String
		},
		StopPosition: 0,
		StopCount: 0,
		DeliveryWindowText: String,
		Driver: 
		{
			FirstName: String,
			Initial: String,
			Vehicle: String,
			Plate: String,
			EtaMin: 0,
			EtaPct: 0
		},
		Proof: 
		{
			Kind: String,
			PhotoUrl: String,
			AtText: String,
			GpsOk: False,
			Units: 0,
			DamageNote: String,
			DeliveredTo: String,
			WaitedMin: 0,
			Attempts: 0,
			ContactedText: String,
			EachTagged: False,
			EachScanned: False
		},
		HandoffCode: String,
		Rating: 
		{
			Stars: 0,
			Tags: String,
			Tip: 0,
			TipStatus: String
		},
		TipAllowed: False,
		TipsPct: 0,
		Missed: 
		{
			Code: String,
			Fee: 0,
			WaitedMin: 0,
			AutoRebook: False,
			RebookWindowText: String,
			Slots: 
			[
				{
					Id: String,
					Day: String,
					DayEs: String,
					Win: String
				}
			]
		},
		CancelFee: 0,
		CancelFeeCharged: 0,
		CancelledBy: String,
		BookUrl: String,
		Can: 
		{
			EditInstructions: False,
			ChangeUnits: False,
			Cancel: False,
			RescheduleDelivery: False,
			Rebook: False,
			Rate: False,
			Message: False,
			Report: False,
			MaxUnits: 0
		},
		DeliverySlots: 
		[
			{
				Id: String,
				Day: String,
				DayEs: String,
				Win: String
			}
		],
		Messages: 
		[
			{
				Who: String,
				Mine: False,
				Office: False,
				AtText: String,
				Body: String
			}
		],
		MessagesOpen: False,
		CaseCode: String,
		CaseStatus: String,
		CaseReply: String,
		ThreadHrs: 0,
		ExpiresUtc: 0001-01-01,
		LiveEta: False,
		Live: False,
		ServerUtc: 0001-01-01
	},
	Notice: String,
	ResponseStatus: 
	{
		ErrorCode: String,
		Message: String,
		StackTrace: String,
		Errors: 
		[
			{
				ErrorCode: String,
				FieldName: String,
				Message: String,
				Meta: 
				{
					String: String
				}
			}
		],
		Meta: 
		{
			String: String
		}
	}
}