Prices a delivery without booking it.
const url = 'https://courierapi.itdlogisoft.co.uk/v1/quotes';const options = { method: 'POST', headers: {Authorization: 'Basic <credentials>', 'Content-Type': 'application/json'}, body: '{"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"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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" }'Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”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
Where the job starts.
object
Where it ends.
object
Optional. One of bicycle, electric_bicycle, motorcycle, car, van.
Omitted means the smallest vehicle the market offers, which is almost always the cheapest.
Optional consignment weight; selects the price bracket.
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.
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"}Responses
Section titled “Responses”Created
A price we will honour until it expires.
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
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
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
Example generated
{ "code": "example", "message": "example"}