| POST | /v1/c/app/orders |
|---|
import Foundation
import ServiceStack
public class CustomerAppOrderRequest : CustomerAppSessionRequest
{
public var level:String
public var windowId:String
public var recur:String
public var addressId:Int
public var dropAddressId:Int?
public var recipientName:String
public var units:Int
public var handoff:String
public var gateCode:String
public var note:String
public var cardId:Int?
public var quotedTotal:Double?
public var lang:String
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case level
case windowId
case recur
case addressId
case dropAddressId
case recipientName
case units
case handoff
case gateCode
case note
case cardId
case quotedTotal
case lang
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
level = try container.decodeIfPresent(String.self, forKey: .level)
windowId = try container.decodeIfPresent(String.self, forKey: .windowId)
recur = try container.decodeIfPresent(String.self, forKey: .recur)
addressId = try container.decodeIfPresent(Int.self, forKey: .addressId)
dropAddressId = try container.decodeIfPresent(Int.self, forKey: .dropAddressId)
recipientName = try container.decodeIfPresent(String.self, forKey: .recipientName)
units = try container.decodeIfPresent(Int.self, forKey: .units)
handoff = try container.decodeIfPresent(String.self, forKey: .handoff)
gateCode = try container.decodeIfPresent(String.self, forKey: .gateCode)
note = try container.decodeIfPresent(String.self, forKey: .note)
cardId = try container.decodeIfPresent(Int.self, forKey: .cardId)
quotedTotal = try container.decodeIfPresent(Double.self, forKey: .quotedTotal)
lang = try container.decodeIfPresent(String.self, forKey: .lang)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if level != nil { try container.encode(level, forKey: .level) }
if windowId != nil { try container.encode(windowId, forKey: .windowId) }
if recur != nil { try container.encode(recur, forKey: .recur) }
if addressId != nil { try container.encode(addressId, forKey: .addressId) }
if dropAddressId != nil { try container.encode(dropAddressId, forKey: .dropAddressId) }
if recipientName != nil { try container.encode(recipientName, forKey: .recipientName) }
if units != nil { try container.encode(units, forKey: .units) }
if handoff != nil { try container.encode(handoff, forKey: .handoff) }
if gateCode != nil { try container.encode(gateCode, forKey: .gateCode) }
if note != nil { try container.encode(note, forKey: .note) }
if cardId != nil { try container.encode(cardId, forKey: .cardId) }
if quotedTotal != nil { try container.encode(quotedTotal, forKey: .quotedTotal) }
if lang != nil { try container.encode(lang, forKey: .lang) }
}
}
public class CustomerAppSessionRequest : Codable
{
public var slug:String
public var profile:String
required public init(){}
}
public class CustomerAppResponse : Codable
{
public var boot:CustomerAppBoot
public var customer:CustomerAppMe
public var addresses:[CustomerAppAddress] = []
public var cards:[CustomerAppCard] = []
public var notif:CustomerAppNotif
public var recurring:[CustomerAppRecurrence] = []
public var booked:CourierBookOrderResponse
public var sent:Bool
public var token:String
public var needsName:Bool
public var name:String
public var url:String
public var clientSecret:String
public var publishableKey:String
public var message:String
public var reopenStep:String
public var customers:[CourierCustomerRow] = []
public var run:RunResult
public var responseStatus:ResponseStatus
required public init(){}
}
public class CustomerAppBoot : Codable
{
public var profile:String
public var available:Bool
public var reason:String
public var authMethod:String
public var slug:String
public var page:CourierBookPageView
public var manifestUrl:String
required public init(){}
}
public class CourierBookPageView : Codable
{
public var available:Bool
public var bookingOn:Bool
public var business:CourierTrackBusiness
public var profile:CourierBookProfile
public var profiles:[CourierBookProfileLink] = []
public var cardEnabled:Bool
public var publishableKey:String
public var appUrl:String
public var today:String
public var weekday:Int
public var nowMin:Int
required public init(){}
}
public class CourierTrackBusiness : Codable
{
public var name:String
public var phone:String
required public init(){}
}
public class CourierBookProfile : Codable
{
public var code:String
public var name:String
public var shape:String
public var template:String
public var unitOne:String
public var unitMany:String
public var unitOneEs:String
public var unitManyEs:String
public var facilityNoun:String
public var facilityNounEs:String
public var facilityName:String
public var levels:[CourierBookLevel] = []
public var asap:Bool
public var recurring:Bool
public var payTiming:String
public var finalAfterCount:Bool
public var cancelFee:Double
public var missedFee:Double
public var missedWaitMin:Int
public var serviceArea:[String] = []
public var zips:[String] = []
public var handoffs:HandoffOptions
required public init(){}
}
public class CourierBookLevel : Codable
{
public var code:String
public var name:String
public var ready:String
public var withinMin:Int
public var inBy:String
public var surcharge:Double
public var days:[Int] = []
public var deadlineMin:Int?
required public init(){}
}
public class HandoffOptions : Codable
{
public var hand:Bool
public var porch:Bool
public var desk:Bool
public var sigRequired:Bool
public var idRequired:Bool
public var codeRequired:Bool
required public init(){}
}
public class CourierBookProfileLink : Codable
{
public var code:String
public var name:String
public var shape:String
required public init(){}
}
public class CustomerAppMe : Codable
{
public var contactId:Int
public var firstName:String
public var lastName:String
public var name:String
public var phone:String
public var needsName:Bool
public var billingMode:String
public var accountCode:String
public var addresses:[CustomerAppAddress] = []
public var cards:[CustomerAppCard] = []
public var notif:CustomerAppNotif
public var orders:[CustomerAppOrder] = []
public var recurring:[CustomerAppRecurrence] = []
public var invoices:[CustomerAppInvoice] = []
public var today:String
public var nowMin:Int
required public init(){}
}
public class CustomerAppAddress : Codable
{
public var id:Int
public var label:String
public var street:String
public var unit:String
public var city:String
public var zip:String
public var lat:Double?
public var lng:Double?
public var inArea:Bool
required public init(){}
}
public class CustomerAppCard : Codable
{
public var id:Int
public var label:String
public var brand:String
public var last4:String
public var isDefault:Bool
required public init(){}
}
public class CustomerAppNotif : Codable
{
public var texts:Bool
public var push:Bool
public var promos:Bool
required public init(){}
}
public class CustomerAppOrder : Codable
{
public var id:Int
public var code:String
public var status:String
public var state:String
public var active:Bool
public var levelCode:String
public var levelName:String
public var units:Int
public var unitsFound:Int?
public var address:String
public var unit:String
public var zip:String
public var dropAddress:String
public var recipientName:String
public var handoff:String
public var isAsap:Bool
public var dayIx:Int
public var dateText:String
public var startMin:Int?
public var endMin:Int?
public var driverFirstName:String
public var etaMin:Int?
public var promise:String
public var payMode:String
public var amount:Double
public var charged:Double?
public var tip:Double?
public var cardLast4:String
public var recurrenceId:Int?
public var steps:[CustomerAppStep] = []
required public init(){}
}
public class CustomerAppStep : Codable
{
public var key:String
public var done:Bool
public var time:String
required public init(){}
}
public class CustomerAppRecurrence : Codable
{
public var id:Int
public var weekday:Int
public var startMin:Int
public var endMin:Int
public var cadence:String
public var levelCode:String
public var units:Int
public var handoff:String
public var address:String
public var paused:Bool
public var payMode:String
public var cardLast4:String
public var nextDate:String
public var skippedDate:String
public var aheadDays:Int
required public init(){}
}
public class CustomerAppInvoice : Codable
{
public var uid:String
public var number:String
public var dateText:String
public var total:Double
public var balance:Double
public var paid:Bool
required public init(){}
}
public class CourierBookOrderResponse : Codable
{
public var done:Bool
public var needsAction:Bool
public var clientSecret:String
public var setupIntentId:String
public var code:String
public var trackUrl:String
public var icsUrl:String
public var windowText:String
public var promise:String
public var total:Double
public var payTiming:String
public var cardLast4:String
public var repeats:String
public var linkSentBy:String
public var reopenStep:String
public var responseStatus:ResponseStatus
required public init(){}
}
public class CourierCustomerRow : Codable
{
public var contactId:Int
public var name:String
public var phone:String
public var billingMode:String
public var accountCode:String
public var orders:Int
public var lastOrderAt:Date?
public var unbilled:Int
public var unbilledAmount:Double
public var cards:Int
required public init(){}
}
public class RunResult : Codable
{
public var invoices:Int
public var orders:Int
public var total:Double
public var skipped:[String] = []
required public init(){}
}
Swift CustomerAppOrderRequest DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /v1/c/app/orders HTTP/1.1
Host: api.dev.dynamics.trendsic.com
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length
{
Level: String,
WindowId: String,
Recur: String,
AddressId: 0,
DropAddressId: 0,
RecipientName: String,
Units: 0,
Handoff: String,
GateCode: String,
Note: String,
CardId: 0,
QuotedTotal: 0,
Lang: String,
Slug: String,
Profile: String
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length
{
Boot:
{
Profile: String,
Available: False,
Reason: String,
AuthMethod: String,
Slug: String,
Page:
{
Available: False,
BookingOn: False,
Business:
{
Name: String,
Phone: String
},
Profile:
{
Code: String,
Name: String,
Shape: String,
Template: String,
UnitOne: String,
UnitMany: String,
UnitOneEs: String,
UnitManyEs: String,
FacilityNoun: String,
FacilityNounEs: String,
FacilityName: String,
Levels:
[
{
Code: String,
Name: String,
Ready: String,
WithinMin: 0,
InBy: String,
Surcharge: 0,
Days:
[
0
],
DeadlineMin: 0
}
],
Asap: False,
Recurring: False,
PayTiming: String,
FinalAfterCount: False,
CancelFee: 0,
MissedFee: 0,
MissedWaitMin: 0,
ServiceArea:
[
String
],
Zips:
[
String
],
Handoffs:
{
Hand: False,
Porch: False,
Desk: False,
SigRequired: False,
IdRequired: False,
CodeRequired: False
}
},
Profiles:
[
{
Code: String,
Name: String,
Shape: String
}
],
CardEnabled: False,
PublishableKey: String,
AppUrl: String,
Today: String,
Weekday: 0,
NowMin: 0
},
ManifestUrl: String
},
Customer:
{
ContactId: 0,
FirstName: String,
LastName: String,
Name: String,
Phone: String,
NeedsName: False,
BillingMode: String,
AccountCode: String,
Addresses:
[
{
Id: 0,
Label: String,
Street: String,
Unit: String,
City: String,
Zip: String,
Lat: 0,
Lng: 0,
InArea: False
}
],
Cards:
[
{
Id: 0,
Label: String,
Brand: String,
Last4: String,
IsDefault: False
}
],
Notif:
{
Texts: False,
Push: False,
Promos: False
},
Orders:
[
{
Id: 0,
Code: String,
Status: String,
State: String,
Active: False,
LevelCode: String,
LevelName: String,
Units: 0,
UnitsFound: 0,
Address: String,
Unit: String,
Zip: String,
DropAddress: String,
RecipientName: String,
Handoff: String,
IsAsap: False,
DayIx: 0,
DateText: String,
StartMin: 0,
EndMin: 0,
DriverFirstName: String,
EtaMin: 0,
Promise: String,
PayMode: String,
Amount: 0,
Charged: 0,
Tip: 0,
CardLast4: String,
RecurrenceId: 0,
Steps:
[
{
Key: String,
Done: False,
Time: String
}
]
}
],
Recurring:
[
{
Id: 0,
Weekday: 0,
StartMin: 0,
EndMin: 0,
Cadence: String,
LevelCode: String,
Units: 0,
Handoff: String,
Address: String,
Paused: False,
PayMode: String,
CardLast4: String,
NextDate: String,
SkippedDate: String,
AheadDays: 0
}
],
Invoices:
[
{
Uid: 00000000000000000000000000000000,
Number: String,
DateText: String,
Total: 0,
Balance: 0,
Paid: False
}
],
Today: String,
NowMin: 0
},
Addresses:
[
{
Id: 0,
Label: String,
Street: String,
Unit: String,
City: String,
Zip: String,
Lat: 0,
Lng: 0,
InArea: False
}
],
Cards:
[
{
Id: 0,
Label: String,
Brand: String,
Last4: String,
IsDefault: False
}
],
Notif:
{
Texts: False,
Push: False,
Promos: False
},
Recurring:
[
{
Id: 0,
Weekday: 0,
StartMin: 0,
EndMin: 0,
Cadence: String,
LevelCode: String,
Units: 0,
Handoff: String,
Address: String,
Paused: False,
PayMode: String,
CardLast4: String,
NextDate: String,
SkippedDate: String,
AheadDays: 0
}
],
Booked:
{
Done: False,
NeedsAction: False,
ClientSecret: String,
SetupIntentId: String,
Code: String,
TrackUrl: String,
IcsUrl: String,
WindowText: String,
Promise: String,
Total: 0,
PayTiming: String,
CardLast4: String,
Repeats: String,
LinkSentBy: String,
ReopenStep: String,
ResponseStatus:
{
ErrorCode: String,
Message: String,
StackTrace: String,
Errors:
[
{
ErrorCode: String,
FieldName: String,
Message: String,
Meta:
{
String: String
}
}
],
Meta:
{
String: String
}
}
},
Sent: False,
Token: String,
NeedsName: False,
Name: String,
Url: String,
ClientSecret: String,
PublishableKey: String,
Message: String,
ReopenStep: String,
Customers:
[
{
ContactId: 0,
Name: String,
Phone: String,
BillingMode: String,
AccountCode: String,
Orders: 0,
LastOrderAt: 0001-01-01,
Unbilled: 0,
UnbilledAmount: 0,
Cards: 0
}
],
Run:
{
Invoices: 0,
Orders: 0,
Total: 0,
Skipped:
[
String
]
},
ResponseStatus:
{
ErrorCode: String,
Message: String,
StackTrace: String,
Errors:
[
{
ErrorCode: String,
FieldName: String,
Message: String,
Meta:
{
String: String
}
}
],
Meta:
{
String: String
}
}
}