Skip to content

Get a booking

GET /api/bookings/v4/{id}

Returns the full details of a single booking, including sender and receiver information, items, quotes (while still a quote), selected courier, and current status.

ParameterTypeRequiredDescription
idintegerYesThe unique booking ID.
Terminal window
curl -X GET \
-H "Api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
https://www.transdirect.com.au/api/bookings/v4/12345678
{
"id": 12345678,
"status": "Confirmed",
"booked_at": "2025-08-15T10:30:00+0000",
"booked_by": "sender",
"created_at": "2025-08-15T10:30:00+0000",
"updated_at": "2025-08-15T10:35:00+0000",
"declared_value": 1000,
"insured_value": 1000,
"description": null,
"tailgate_pickup": false,
"tailgate_delivery": false,
"courier": "allied",
"connote": "ALD123456789",
"charged_weight": 5,
"scanned_weight": 5,
"special_instructions": "Leave at front door",
"pickup_instructions": null,
"pickup_window": [
"2025-08-18T14:00:00+1000",
"2025-08-18T18:00:00+1000"
],
"label": "http://www.transdirect.com.au/api/bookings/12345678/label",
"notifications": {
"email": false,
"sms": false
},
"cost": 79.24,
"additional_charges": 0,
"sender": {
"name": "John Smith",
"company_name": "Example Pty Ltd",
"email": "john@example.com",
"phone": "0400000000",
"address": "123 George Street",
"postcode": "2000",
"suburb": "SYDNEY",
"state": "NSW",
"type": "business",
"country": "AU"
},
"receiver": {
"name": "Jane Doe",
"company_name": "Receiver Co",
"email": "jane@example.com",
"phone": "0400000001",
"address": "456 Collins Street",
"postcode": "3000",
"suburb": "MELBOURNE",
"state": "VIC",
"type": "business",
"country": "AU"
},
"items": [
{
"weight": 5,
"height": 25,
"width": 35,
"length": 40,
"quantity": 1,
"description": "carton"
}
]
}

While the booking is still a quote, the body includes a quotes object (and usually quote_errors) and does not include cost / additional_charges / courier yet:

{
"id": 12345678,
"status": "new",
"quotes": {
"allied": {
"total": 79.24,
"price_insurance_ex": 72.09,
"fee": 7.15,
"insured_amount": 4500,
"service": "road",
"transit_time": "1-2 days",
"pickup_dates": ["2025-08-18", "2025-08-19"],
"pickup_time": { "from": "14:00", "to": "18:00" }
}
},
"quote_errors": [],
"sender": { "postcode": "2000", "suburb": "SYDNEY", "type": "business", "country": "AU" },
"receiver": { "postcode": "3000", "suburb": "MELBOURNE", "type": "business", "country": "AU" },
"items": [
{ "weight": 5, "height": 25, "width": 35, "length": 40, "quantity": 1, "description": "carton" }
]
}
FieldTypeDescription
idintegerUnique booking identifier.
statusstringCurrent booking status. See statuses.
booked_atstringDate and time the booking was placed (ISO 8601).
booked_bystringWho placed the booking. Defaults to "sender".
created_atstringDate and time the booking record was created (ISO 8601).
updated_atstringDate and time the booking was last updated (ISO 8601).
declared_valuenumberDeclared value of the goods (AUD).
insured_valuenumberFinal insured amount once a courier has been selected. 0 until confirmation. See warranty and insurance.
descriptionstring | nullFree-text goods description, if provided.
tailgate_pickupbooleanWhether tailgate is required at pickup.
tailgate_deliverybooleanWhether tailgate is required at delivery.
courierstringSelected courier string_id. Present after confirmation (and on v5 sometimes earlier once selected).
connotestring | nullCourier consignment note number. Populated once the courier has confirmed.
charged_weightnumberWeight the courier billed against (after re-weigh, if applicable). 0 until set by the courier.
scanned_weightnumberWeight scanned by the courier at pickup. 0 until set by the courier.
special_instructionsstringSpecial handling instructions. Multiple instructions are returned semicolon-joined.
pickup_instructionsstring | nullPickup-specific instructions.
pickup_windowarrayTwo ISO 8601 strings ([from, to]) bounding the pickup window. Empty array [] before pickup is set.
labelstringURL to fetch the PDF label. See get a label.
notificationsobjectNotification toggles. Always returns {"email": false, "sms": false} — this field is a stub and does not reflect member notification preferences.
senderobjectFull sender details.
receiverobjectFull receiver details.
itemsarrayArray of item objects.
quotesobjectCourier quotes keyed by courier string_id. Only present when the booking is still a quote (status is new on v4). Once confirmed, quotes is omitted and replaced by cost and additional_charges.
quote_errorsarrayCouriers that could not provide a quote, e.g. [{"courier": "direct_couriers_express", "code": "no_service"}, ...].
costnumberFinal booking cost. Present once the booking is no longer a bare quote.
additional_chargesnumberPost-booking adjustments total. Present once the booking is no longer a bare quote.
orderobjectOptional linked e-commerce order: { order_id, order_number }.
collection_pointobjectOptional PUDO / collection-point details when set.
FieldTypeDescription
namestringContact name.
company_namestringCompany or business name.
emailstringContact email address.
phonestringContact phone number.
addressstringStreet address.
postcodestringPostcode.
suburbstringSuburb name.
statestringState or territory abbreviation (e.g. "NSW", "VIC").
typestringAddress type: "business" or "residential".
countrystringISO 3166-1 alpha-2 country code.

The database stores machine codes (e.g. confirmed). The GET response often returns the human label for non-quote bookings (e.g. "Confirmed"). The labels come from a fixed lookup table, not from mechanical title-casing — note On hold and Sending to Courier — and the mapping is not reversible: both pending_review and on_hold_suspicious return Pending Review. Treat matching as case-insensitive, or accept both forms.

Machine codeTypical labelDescription
newnew (v4 quote) / New (v5)Quote created; pricing returned.
pending_paymentPending PaymentCourier selected; awaiting payment.
paidPaidPayment processed; ready to send to the courier.
pending_reviewPending ReviewFlagged for manual review.
under_reviewUnder ReviewUnder review by Transdirect.
request_sentRequest SentSubmitted to the courier.
request_failedRequest FailedCourier could not process the booking.
reviewedReviewedPassed review; being processed.
sending_to_courierSending to CourierActively being sent to the courier.
confirmedConfirmedCourier confirmed; connote generated.
cancelledCancelledCancelled.
cancelled_refundCancel RefundCancelled with refund.
booked_manuallyBooked ManuallyProcessed manually by Transdirect.
on_holdOn holdOn hold.
on_hold_suspiciousPending ReviewFraud / suspicion hold.
from_on_holdfrom_on_holdReleased from an on-hold state. Deliberately unlabelled — the raw code is returned as-is.
labels_failedLabels FailedLabel generation failed.
demoDemoLegacy sandbox status. Bookings made with payment_method: "demo" do not get this status — they follow the normal lifecycle.
multipickup_unpaidMultipickup UnpaidMultipickup booking awaiting payment.

For more detail on how statuses progress, see booking lifecycle.

Status codeDescription
401Unauthorised — invalid or missing credentials.
403 / 404Not found — no booking exists with the given ID, or it belongs to another member.