| POST | /picup/createshipment |
|---|
import Foundation
import ServiceStack
public class PicUpCreateShipmentRequest : IHasApiKey, ILogRequest, Codable
{
public var apiKey:String
// @DataMember(Name="courier_request")
public var courier_request:CourierRequest
required public init(){}
}
public class CourierRequest : Codable
{
// @DataMember(Name="bucket_details")
public var bucket_details:BucketDetails
// @DataMember(Name="shipments")
public var shipments:[Shipment] = []
required public init(){}
}
public class BucketDetails : Codable
{
// @DataMember(Name="delivery_date")
public var delivery_date:Date
required public init(){}
}
public class Shipment : Codable
{
// @DataMember(Name="waybill_number")
public var waybill_number:String
// @DataMember(Name="business_reference")
public var business_reference:String
// @DataMember(Name="service_type")
public var service_type:String
// @DataMember(Name="sender")
public var sender:Sender
// @DataMember(Name="receiver")
public var receiver:Receiver
required public init(){}
}
public class Sender : Codable
{
// @DataMember(Name="address")
public var address:Address
// @DataMember(Name="contact")
public var contact:Contact
required public init(){}
}
public class Address : Codable
{
// @DataMember(Name="address_line_1")
public var address_line_1:String
// @DataMember(Name="address_line_2")
public var address_line_2:String
// @DataMember(Name="address_line_3")
public var address_line_3:String
// @DataMember(Name="address_line_4")
public var address_line_4:String
// @DataMember(Name="city")
public var city:String
// @DataMember(Name="formatted_address")
public var formatted_address:String
// @DataMember(Name="latitude")
public var latitude:Double
// @DataMember(Name="longitude")
public var longitude:Double
// @DataMember(Name="postal_code")
public var postal_code:String
// @DataMember(Name="suburb")
public var suburb:String
// @DataMember(Name="unit")
public var unit:String
// @DataMember(Name="building")
public var building:String
required public init(){}
}
public class Contact : Codable
{
// @DataMember(Name="customer_name")
public var customer_name:String
// @DataMember(Name="customer_phone")
public var customer_phone:String
// @DataMember(Name="email_address")
public var email_address:String
// @DataMember(Name="special_instructions")
public var special_instructions:String
required public init(){}
}
public class Receiver : Codable
{
// @DataMember(Name="parcels")
public var parcels:[Parcel] = []
// @DataMember(Name="address")
public var address:Address
// @DataMember(Name="contact")
public var contact:Contact
required public init(){}
}
public class Parcel : Codable
{
// @DataMember(Name="parcel_waybill")
public var parcel_waybill:String
// @DataMember(Name="parcel_reference")
public var parcel_reference:String
// @DataMember(Name="tracking_number")
public var tracking_number:String
// @DataMember(Name="length_mm")
public var length_mm:Int
// @DataMember(Name="width_mm")
public var width_mm:Int
// @DataMember(Name="height_mm")
public var height_mm:Int
// @DataMember(Name="weight_kg")
public var weight_kg:Int
required public init(){}
}
public class PicUpCreateShipmentResponse : Codable
{
// @DataMember(Name="is_success")
public var is_success:Bool
// @DataMember(Name="courier_reference")
public var courier_reference:String
// @DataMember(Name="error")
public var error:String
/**
* List of order information for pricing etc between each waypoint
*/
// @ApiMember(Description="List of order information for pricing etc between each waypoint")
public var waypoints:[WaypointQuoteInformation] = []
/**
* List with validation information for each waypoint
*/
// @ApiMember(Description="List with validation information for each waypoint")
public var waypointValidations:[WaypointValidationInformation] = []
/**
* The 1Fetch Waybill reference for the shipment
*/
// @ApiMember(Description="The 1Fetch Waybill reference for the shipment")
public var waybill:String
required public init(){}
}
public class WaypointQuoteInformation : LinkedWaypoint
{
/**
* Distance between waypoints as a number
*/
// @ApiMember(Description="Distance between waypoints as a number")
public var distance:Double
/**
* String formatted distance
*/
// @ApiMember(Description="String formatted distance")
public var distanceValue:String
public var waypointValid:Bool
public var message:String
public var errorDetails:[String] = []
/**
* Caculated price between waypoints excluding vat
*/
// @ApiMember(Description="Caculated price between waypoints excluding vat")
public var price:Double
/**
* Price excluding vat formatted as a string rand value
*/
// @ApiMember(Description="Price excluding vat formatted as a string rand value")
public var priceValue:String
/**
* The price between waypoints including vat
*/
// @ApiMember(Description="The price between waypoints including vat")
public var priceWithVAT:Double
/**
* The price including vat formatted as a rand value string
*/
// @ApiMember(Description="The price including vat formatted as a rand value string")
public var priceValueWithVAT:String
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case distance
case distanceValue
case waypointValid
case message
case errorDetails
case price
case priceValue
case priceWithVAT
case priceValueWithVAT
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
distance = try container.decodeIfPresent(Double.self, forKey: .distance)
distanceValue = try container.decodeIfPresent(String.self, forKey: .distanceValue)
waypointValid = try container.decodeIfPresent(Bool.self, forKey: .waypointValid)
message = try container.decodeIfPresent(String.self, forKey: .message)
errorDetails = try container.decodeIfPresent([String].self, forKey: .errorDetails) ?? []
price = try container.decodeIfPresent(Double.self, forKey: .price)
priceValue = try container.decodeIfPresent(String.self, forKey: .priceValue)
priceWithVAT = try container.decodeIfPresent(Double.self, forKey: .priceWithVAT)
priceValueWithVAT = try container.decodeIfPresent(String.self, forKey: .priceValueWithVAT)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if distance != nil { try container.encode(distance, forKey: .distance) }
if distanceValue != nil { try container.encode(distanceValue, forKey: .distanceValue) }
if waypointValid != nil { try container.encode(waypointValid, forKey: .waypointValid) }
if message != nil { try container.encode(message, forKey: .message) }
if errorDetails.count > 0 { try container.encode(errorDetails, forKey: .errorDetails) }
if price != nil { try container.encode(price, forKey: .price) }
if priceValue != nil { try container.encode(priceValue, forKey: .priceValue) }
if priceWithVAT != nil { try container.encode(priceWithVAT, forKey: .priceWithVAT) }
if priceValueWithVAT != nil { try container.encode(priceValueWithVAT, forKey: .priceValueWithVAT) }
}
}
public class LinkedWaypoint : Codable
{
public var fromWaypointNumber:Int
public var toWaypointNumber:Int
public var fromLatitude:Double
public var fromLongitude:Double
public var toLatitude:Double
public var toLongitude:Double
required public init(){}
}
public class WaypointValidationInformation : Codable
{
public var waypointNumber:Int
public var isValid:Bool
public var errorMessages:[String] = []
required public init(){}
}
Swift PicUpCreateShipmentRequest DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /picup/createshipment HTTP/1.1
Host: 1fetch.api.client.prod.86degrees.com
Accept: text/csv
Content-Type: text/csv
Content-Length: length
{"ApiKey":"String","courier_request":{"bucket_details":{"delivery_date":"0001-01-01T00:00:00.0000000+00:00"},"shipments":[{"waybill_number":"String","business_reference":"String","service_type":"String","sender":{"address":{"address_line_1":"String","address_line_2":"String","address_line_3":"String","address_line_4":"String","city":"String","formatted_address":"String","latitude":0,"longitude":0,"postal_code":"String","suburb":"String","unit":"String","building":"String"},"contact":{"customer_name":"String","customer_phone":"String","email_address":"String","special_instructions":"String"}},"receiver":{"parcels":[{"parcel_waybill":"String","parcel_reference":"String","tracking_number":"String","length_mm":0,"width_mm":0,"height_mm":0,"weight_kg":0}],"address":{"address_line_1":"String","address_line_2":"String","address_line_3":"String","address_line_4":"String","city":"String","formatted_address":"String","latitude":0,"longitude":0,"postal_code":"String","suburb":"String","unit":"String","building":"String"},"contact":{"customer_name":"String","customer_phone":"String","email_address":"String","special_instructions":"String"}}}]}}
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length
{"is_success":false,"courier_reference":"String","error":"String","Waypoints":[{}],"WaypointValidations":[{}],"Waybill":"String"}