1Fetch Client API

<back to all web services

PicUpCreateShipmentRequest

The following routes are available for this service:
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 .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 /picup/createshipment HTTP/1.1 
Host: 1fetch.api.client.prod.86degrees.com 
Accept: text/jsv
Content-Type: text/jsv
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/jsv
Content-Length: length

{
	is_success: False,
	courier_reference: String,
	error: String,
	Waypoints: 
	[
		{
			
		}
	],
	WaypointValidations: 
	[
		{
			
		}
	],
	Waybill: String
}