Important concepts

Important concepts

A few objects and ideas turn up across the whole API. Reading these once saves re-reading them on every endpoint.

Addresses

An address is always the same object, whatever key it appears under: collection_address and delivery_address have identical fields.

"collection_address": {
  "type": "business",
  "company": "Bob Go",
  "street_address": "125 Dallas Avenue",
  "local_area": "Menlyn",
  "city": "Pretoria",
  "zone": "Gauteng",
  "country": "ZA",
  "code": "0181"
}
Field Type Notes
type string business, residential, locker or unknown. Defaults to unknown. Affects both price and which service levels are offered.
company string Optional.
street_address string Street number and name.
local_area string Suburb.
city string
zone string Province, as its name (Gauteng) or its code (GP). Bob Go stores the code, so addresses come back with EC, FS, GP, KZN, LP, MP, NC, NW or WC, and filters on the province take the code.
code string Postal code.
country string ZA or South Africa. Bob Go ships within South Africa only, and an empty value is read as South Africa. Addresses come back with South Africa.
lat, lng number Optional. Supply them and Bob Go skips geocoding.

Send the fields separately rather than packing everything into street_address. Rating and courier acceptance both depend on the address resolving to a real point on the map, and a single free-text line geocodes badly.

Parcels

Wherever a set of parcels is sent, it is the same array.

"parcels": [
  {
    "description": "Box",
    "submitted_length_cm": 42.5,
    "submitted_width_cm": 38.5,
    "submitted_height_cm": 5.5,
    "submitted_weight_kg": 3,
    "custom_parcel_reference": "custom reference"
  },
  {
    "description": "Flyer",
    "submitted_length_cm": 42.5,
    "submitted_width_cm": 38.5,
    "submitted_height_cm": 5.5,
    "submitted_weight_kg": 1.3
  }
]
Field Type Notes
submitted_length_cm number Max 1000.
submitted_width_cm number Max 1000.
submitted_height_cm number Max 1000.
submitted_weight_kg number A parcel over the maximum weight is rejected, and the message gives the limit. Each service level also has its own limit, on the total and the volumetric weight: a consignment over it fails that one rate with the limit in failed_reason, rather than failing the request.
description string Optional.
custom_parcel_reference string Optional, your own reference.

The submitted_ prefix is deliberate: these are the dimensions you declared. Couriers re-measure, and the values they come back with land in the matching actual_ fields on the shipment. Couriers charge on the greater of actual and volumetric weight, so dimensions matter as much as weight, and a parcel declared smaller than it is will be re-rated after collection.

Rates at checkout vs. Rates

Two endpoints return shipping prices, and they answer different questions.

Rates at checkout (POST /v2/rates-at-checkout) returns the options you have configured in Bob Go: your service levels, your zones, your markups, your exclusions. It is what a buyer should see in a cart. Each option is priced the way you set it up, whether that is a dynamic, fixed, courier or formula rate, and it can deliberately return nothing for an area you do not ship to.

Rates (POST /v2/rates) returns what each courier will cost you for a specific consignment, with none of your checkout rules applied. It is what you use to decide which courier to book.

Rates at checkout Rates
Answers "What should this buyer be charged?" "What will each courier charge me?"
Shaped by Your Bob Go configuration The couriers
Typical caller Your cart or checkout page Your fulfilment code
Returns Priced options, buyer-facing Per-courier quotes with a rate_amount

The two are not interchangeable. A buyer quoted a checkout rate is not being quoted the courier's price, and the difference between them is your shipping margin.

Pickup points

Shipments can collect from, or deliver to, a locker or counter instead of an address. Pickup points work through the same rates, checkout-rates and shipment endpoints, with a couple of extra fields. See Pickup points.