1Fetch Client API

<back to all web services

PicUpCreateShipmentRequest

The following routes are available for this service:
POST/picup/createshipment
import java.math.*
import java.util.*
import net.servicestack.client.*
import com.google.gson.annotations.*
import com.google.gson.reflect.*


open class PicUpCreateShipmentRequest : IHasApiKey, ILogRequest
{
    var ApiKey:String? = null
    @DataMember(Name="courier_request")
    @SerializedName("courier_request")
    var CourierRequest:CourierRequest? = null
}

open class CourierRequest
{
    @DataMember(Name="bucket_details")
    @SerializedName("bucket_details")
    var BucketDetails:BucketDetails? = null

    @DataMember(Name="shipments")
    @SerializedName("shipments")
    var Shipments:ArrayList<Shipment>? = null
}

open class BucketDetails
{
    @DataMember(Name="delivery_date")
    @SerializedName("delivery_date")
    var DeliveryDate:Date? = null
}

open class Shipment
{
    @DataMember(Name="waybill_number")
    @SerializedName("waybill_number")
    var WaybillNumber:String? = null

    @DataMember(Name="business_reference")
    @SerializedName("business_reference")
    var BusinessReference:String? = null

    @DataMember(Name="service_type")
    @SerializedName("service_type")
    var ServiceType:String? = null

    @DataMember(Name="sender")
    @SerializedName("sender")
    var Sender:Sender? = null

    @DataMember(Name="receiver")
    @SerializedName("receiver")
    var Receiver:Receiver? = null
}

open class Sender
{
    @DataMember(Name="address")
    @SerializedName("address")
    var Address:Address? = null

    @DataMember(Name="contact")
    @SerializedName("contact")
    var Contact:Contact? = null
}

open class Address
{
    @DataMember(Name="address_line_1")
    @SerializedName("address_line_1")
    var AddressLine1:String? = null

    @DataMember(Name="address_line_2")
    @SerializedName("address_line_2")
    var AddressLine2:String? = null

    @DataMember(Name="address_line_3")
    @SerializedName("address_line_3")
    var AddressLine3:String? = null

    @DataMember(Name="address_line_4")
    @SerializedName("address_line_4")
    var AddressLine4:String? = null

    @DataMember(Name="city")
    @SerializedName("city")
    var City:String? = null

    @DataMember(Name="formatted_address")
    @SerializedName("formatted_address")
    var FormattedAddress:String? = null

    @DataMember(Name="latitude")
    @SerializedName("latitude")
    var Latitude:Double? = null

    @DataMember(Name="longitude")
    @SerializedName("longitude")
    var Longitude:Double? = null

    @DataMember(Name="postal_code")
    @SerializedName("postal_code")
    var PostalCode:String? = null

    @DataMember(Name="suburb")
    @SerializedName("suburb")
    var Suburb:String? = null

    @DataMember(Name="unit")
    @SerializedName("unit")
    var Unit:String? = null

    @DataMember(Name="building")
    @SerializedName("building")
    var Building:String? = null
}

open class Contact
{
    @DataMember(Name="customer_name")
    @SerializedName("customer_name")
    var CustomerName:String? = null

    @DataMember(Name="customer_phone")
    @SerializedName("customer_phone")
    var CustomerPhone:String? = null

    @DataMember(Name="email_address")
    @SerializedName("email_address")
    var EmailAddress:String? = null

    @DataMember(Name="special_instructions")
    @SerializedName("special_instructions")
    var SpecialInstructions:String? = null
}

open class Receiver
{
    @DataMember(Name="parcels")
    @SerializedName("parcels")
    var Parcels:ArrayList<Parcel>? = null

    @DataMember(Name="address")
    @SerializedName("address")
    var Address:Address? = null

    @DataMember(Name="contact")
    @SerializedName("contact")
    var Contact:Contact? = null
}

open class Parcel
{
    @DataMember(Name="parcel_waybill")
    @SerializedName("parcel_waybill")
    var ParcelWaybill:String? = null

    @DataMember(Name="parcel_reference")
    @SerializedName("parcel_reference")
    var ParcelReference:String? = null

    @DataMember(Name="tracking_number")
    @SerializedName("tracking_number")
    var TrackingNumber:String? = null

    @DataMember(Name="length_mm")
    @SerializedName("length_mm")
    var LengthMm:Long? = null

    @DataMember(Name="width_mm")
    @SerializedName("width_mm")
    var WidthMm:Long? = null

    @DataMember(Name="height_mm")
    @SerializedName("height_mm")
    var HeightMm:Long? = null

    @DataMember(Name="weight_kg")
    @SerializedName("weight_kg")
    var WeightKg:Long? = null
}

open class PicUpCreateShipmentResponse
{
    @DataMember(Name="is_success")
    @SerializedName("is_success")
    var IsSuccess:Boolean? = null

    @DataMember(Name="courier_reference")
    @SerializedName("courier_reference")
    var CourierReference:String? = null

    @DataMember(Name="error")
    @SerializedName("error")
    var Error:String? = null

    /**
    * List of order information for pricing etc between each waypoint
    */
    @ApiMember(Description="List of order information for pricing etc between each waypoint")
    var Waypoints:ArrayList<WaypointQuoteInformation> = ArrayList<WaypointQuoteInformation>()

    /**
    * List with validation information for each waypoint
    */
    @ApiMember(Description="List with validation information for each waypoint")
    var WaypointValidations:ArrayList<WaypointValidationInformation> = ArrayList<WaypointValidationInformation>()

    /**
    * The 1Fetch Waybill reference for the shipment
    */
    @ApiMember(Description="The 1Fetch Waybill reference for the shipment")
    var Waybill:String? = null
}

open class WaypointQuoteInformation : LinkedWaypoint()
{
    /**
    * Distance between waypoints as a number
    */
    @ApiMember(Description="Distance between waypoints as a number")
    var Distance:Double? = null

    /**
    * String formatted distance
    */
    @ApiMember(Description="String formatted distance")
    var DistanceValue:String? = null

    var WaypointValid:Boolean? = null
    var Message:String? = null
    var ErrorDetails:ArrayList<String> = ArrayList<String>()
    /**
    * Caculated price between waypoints excluding vat
    */
    @ApiMember(Description="Caculated price between waypoints excluding vat")
    var Price:BigDecimal? = null

    /**
    * Price excluding vat formatted as a string rand value
    */
    @ApiMember(Description="Price excluding vat formatted as a string rand value")
    var PriceValue:String? = null

    /**
    * The price between waypoints including vat
    */
    @ApiMember(Description="The price between waypoints including vat")
    var PriceWithVAT:BigDecimal? = null

    /**
    * The price including vat formatted as a rand value string
    */
    @ApiMember(Description="The price including vat formatted as a rand value string")
    var PriceValueWithVAT:String? = null
}

open class LinkedWaypoint
{
    var FromWaypointNumber:Int? = null
    var ToWaypointNumber:Int? = null
    var FromLatitude:Double? = null
    var FromLongitude:Double? = null
    var ToLatitude:Double? = null
    var ToLongitude:Double? = null
}

open class WaypointValidationInformation
{
    var WaypointNumber:Int? = null
    var IsValid:Boolean? = null
    var ErrorMessages:ArrayList<String> = ArrayList<String>()
}

Kotlin 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: api.1fetch.co.za 
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
}