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 .csv suffix or ?format=csv

HTTP + 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"}