Skip to content

Prices a delivery without booking it.

POST
/v1/quotes
curl --request POST \
--url https://courierapi.itdlogisoft.co.uk/v1/quotes \
--header 'Authorization: Basic <credentials>' \
--header 'Content-Type: application/json' \
--data '{ "pickup": { "latitude": 1, "longitude": 1, "postcode": "example" }, "dropoff": { "latitude": 1, "longitude": 1, "postcode": "example" }, "vehicle": "example", "weight_grams": 1, "scheduled_for": "2026-04-15T12:00:00Z" }'
Media typeapplication/json

The shape of POST /v1/quotes.

Deliberately close to what Stuart and Mealshift already accept, because every merchant we want has integrated with one of them and the cheapest integration is the one that looks familiar. Property names are snake_case in JSON for the same reason.

object
pickup
required

Where the job starts.

object
latitude
required
number | string format: double
/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/
longitude
required
number | string format: double
/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/
postcode
null | string
dropoff
required

Where it ends.

object
latitude
required
number | string format: double
/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/
longitude
required
number | string format: double
/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/
postcode
null | string
vehicle

Optional. One of bicycle, electric_bicycle, motorcycle, car, van. Omitted means the smallest vehicle the market offers, which is almost always the cheapest.

null | string
weight_grams

Optional consignment weight; selects the price bracket.

null | integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
scheduled_for

Optional. When the job will happen, if not now — a job booked on Tuesday for Friday evening is priced for Friday evening, not for Tuesday.

null | string format: date-time

Example generated

{
"pickup": {
"latitude": 1,
"longitude": 1,
"postcode": "example"
},
"dropoff": {
"latitude": 1,
"longitude": 1,
"postcode": "example"
},
"vehicle": "example",
"weight_grams": 1,
"scheduled_for": "2026-04-15T12:00:00Z"
}

Created

Media typeapplication/json

A price we will honour until it expires.

object
id
required
string
currency
required
string
total_amount_minor
required
integer | string format: int64
/^-?(?:0|[1-9]\d*)$/
total
required
string
distance_metres
required
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
estimated_duration_seconds
required
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
vehicle
required
string
expires_at
required
string format: date-time
breakdown
required
Array<object>

One line of the price.

Returned rather than kept internal because a merchant deciding whether to book deserves to see what they are paying for, and because support answering “why is this £6” should be reading the same numbers the customer can see.

object
code
required
string
description
required
string
amount_minor
required
integer | string format: int64
/^-?(?:0|[1-9]\d*)$/
price_book_version
required
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/

Example generated

{
"id": "example",
"currency": "example",
"total_amount_minor": 1,
"total": "example",
"distance_metres": 1,
"estimated_duration_seconds": 1,
"vehicle": "example",
"expires_at": "2026-04-15T12:00:00Z",
"breakdown": [
{
"code": "example",
"description": "example",
"amount_minor": 1
}
],
"price_book_version": 1
}

Unauthorized

Unprocessable Entity

Media typeapplication/json

The shape of every refusal from this API.

string ApiError.Code is stable and machine-readable; string ApiError.Message is for a human reading a log and may change without notice. Integrators are told to branch on the code.

object
code
required
string
message
required
string

Example generated

{
"code": "example",
"message": "example"
}