Get checkout rates
Returns the shipping options a buyer should be offered, priced by the rules you
have configured in Bob Go. This is the cart endpoint, not for quoting a
consignment you are about to book. For that, use
POST /v2/rates; the difference is explained in
Important concepts.
What comes back is shaped entirely by your Bob Go setup: service levels you have enabled, the zones you serve, weight and order-value bands, markups and surcharges. Each service level is priced by the kind of rate you configured for it:
| Configured as | How it is priced |
|---|---|
| Dynamic | Priced live off the courier's rate for the lane. |
| Fixed | A flat price you set, regardless of the parcel. |
| Courier | The courier's own price, passed through. |
| Formula | Calculated from a formula you configure. |
This is configuration only. The response does not say which kind priced an
option; its type says how the parcel reaches the buyer.
An area you have excluded returns no rate for that lane. When nothing matches,
rates comes back as null or as an empty array, depending on where the match
failed, so treat the two the same. That is a valid answer, not an error, and
your checkout should handle it by hiding delivery rather than showing a price
of zero.
Request
Three things are validated: collection_address, delivery_address and a
non-empty items array. The account must also be active, or the call fails
with Account is not active. Everything else is optional.
| Field | Type | Required | Notes |
|---|---|---|---|
collection_address |
object | yes | Where the goods ship from. See address fields. |
delivery_address |
object | yes | The buyer's address. |
items |
array | yes | The cart, at least one entry. See item fields. |
declared_value |
number | no | Total value of the cart in ZAR, drives liability cover. Defaults to order_total_price when you send it, otherwise to the item total. |
handling_time |
integer | no | Business days between the order landing and the parcel being ready. Overrides the service level's own handling time, and shifts the delivery dates that come back. |
channel_id |
integer | no | The Bob Go channel the cart belongs to. Defaults to your manual channel. A channel key always uses its own channel. |
order_total_price |
number | no | Cart total after discounts and taxes. Use this to drive order-value rules. |
delivery_type |
array of string | no | Only return some kinds of option: door keeps door delivery and in-store pickup, locker and counter keep pickup point options at locations of that type. Also accepts pickup-point, which keeps pickup point service levels but matches no location on its own. |
Fields this endpoint ignores
These parse without complaint and have no effect on the rates you get back. Do not build against them.
| Field | Why |
|---|---|
total_weight_kg |
Always recalculated from items, using the greater of actual and volumetric weight. |
total_price |
Always recalculated: from order_total_price if you sent it, otherwise from items. |
currency |
Every rate comes back ZAR regardless. |
channel_order_ref |
Not carried through, so it does not reach the rates-at-checkout history either. |
collection_pickup_point_location_id |
Shipping from a pickup point is not wired up on this endpoint yet. Delivery to one works and needs no request field: pickup point options come back on their own. See Pickup points. |
collection_pickup_point_provider_slug |
As above. |
customer_address |
Not used. The buyer's address is delivery_address. |
store_location |
Set by Bob Go for in-store pickup, not by you. |
rule_engine_fields |
Set by Bob Go while your checkout rules run, not by you. |
Item fields
None of these are enforced, but the quote is only as good as what you send: an item with no dimensions or no weight weakens the rate for the whole cart.
| Field | Type | Required | Notes |
|---|---|---|---|
description |
string | send it | Matched by rules that look at the description. |
price |
number | send it | Unit price in ZAR. |
length_cm |
number | send it | |
width_cm |
number | send it | |
height_cm |
number | send it | |
weight_kg |
number | send it | An item left at 0 picks up the default item weight from your rates at checkout settings, if you have turned that on. |
quantity |
integer | no | Defaults to 1. An explicit 0 drops the item from dimension stacking, but it still counts once towards price and weight. |
vendor |
string | no | |
sku |
string | no | |
shipping_class |
string | no | Matched by rules that price by shipping class. |
Dimensions are per unit. Bob Go stacks them across the cart to work out the parcel it would take to ship the order.
Response
See the example response.
| Field | Notes |
|---|---|
id |
The Bob Go rate the buyer picked. Keep it. 0 on the fallback rate. |
service_name |
Display this to the buyer. |
service_code |
Always prefixed bobgo_, and not stable: it ends with the option's position in this response (_0, _1, ...), so the same service can come back with a different code on the next call. Do not store it as a key. Send it back on the order as you received it, so the fulfilment side knows what was sold. |
total_price |
What to charge the buyer, in ZAR, including liability cover and surcharges. |
base_rate |
The price before liability cover and surcharges. |
min_delivery_date / max_delivery_date |
Estimated window, already adjusted for handling_time. Null if you have turned delivery dates off in your checkout settings. |
type |
How the parcel reaches the buyer: door, pickup-point or in-store-pickup. |
service_level_priority |
The order you configured. Sort ascending to present them as intended. |
liability_cover |
What the cover costs and whether the courier carries it. |
surcharges |
Named amounts already included in total_price. Empty or null when none apply. |
pickup_point_location_id |
Pickup point options only. Carry it through to the rate request and the shipment. |
pickup_point_location_distance |
Pickup point options only: how far the location is from the delivery address, in km. |
collection_pickup_point_location_id |
Present when one of your checkout rules ships this option from a pickup point. |
in_store_pickup_location_distance |
In-store pickup options only: how far the store is from the buyer, in km. |
provider_slug, service_level_code |
The courier and service level behind the rate. Present on pickup point rates, where you need them to book, and on door rates priced from a courier. |
Rates are quotes for the buyer, not bookings. Nothing is reserved, and the amount you are charged when you book the shipment comes from the courier, not from here.