Get a booking
Fetch a single booking you own, whether it is still a draft quote or has been confirmed.
GET /api/v5/bookings/{id}Requires your API key in the api-key header. You can only read bookings that belong to your account.
Path parameters
Section titled “Path parameters”| Parameter | Type | Description |
|---|---|---|
id | integer | The Transdirect booking id returned when you created the quote. Not your order number or the courier connote. |
Example request
Section titled “Example request”curl https://api.transdirect.com.au/api/v5/bookings/623630 \ -H "api-key: $TD_API_KEY"import { client, getApiV5BookingsById } from '@transdirect/api-sdk';
client.setConfig({ headers: { 'api-key': process.env.TD_API_KEY! } });
const { data: booking, error } = await getApiV5BookingsById({ path: { id: '623630' },});if (error) throw new Error(JSON.stringify(error));
if (booking.status_code === 'confirmed') { console.log('Connote', booking.connote);}Response
Section titled “Response”200 OK. This booking has been confirmed on Couriers Please.
{ "id": 623630, "booked_at": "2026-10-16T04:13:34.000Z", "booked_by": "sender", "created_at": "2026-10-16T04:13:34.000Z", "declared_value": 0, "insured_value": 0, "description": "Books", "items": [ { "id": 46885332, "description": "Carton", "weight": 5, "length": 40, "width": 30, "height": 20, "quantity": 1 } ], "label": "/api/v5/bookings/623630/label", "notifications": { "email": false, "sms": false }, "receiver": { "id": 69194890, "address": "200 Collins Street", "company_name": "", "email": "jordan@example.com", "name": "Jordan Lee", "postcode": "3000", "phone": "0398765432", "state": "VIC", "suburb": "MELBOURNE", "type": "residential", "country": "AU" }, "sender": { "id": 69194889, "address": "1 Martin Place", "company_name": "Example Books Pty Ltd", "email": "dispatch@example.com", "name": "Sam Taylor", "postcode": "2000", "phone": "0291234567", "state": "NSW", "suburb": "SYDNEY", "type": "business", "country": "AU" }, "pickup_window": ["2026-10-19T09:00:00.000Z", "2026-10-19T16:00:00.000Z"], "connote": "CPBV00123456789", "charged_weight": 6, "scanned_weight": 0, "special_instructions": "", "status": "Confirmed", "status_code": "confirmed", "is_paid": true, "updated_at": "2026-10-16T04:20:11.000Z", "pickup_instructions": "", "tailgate_pickup": false, "tailgate_delivery": false, "courier": "couriers_please", "cost": 28.43, "additional_charges": 0, "customer_reference": "ORDER-1042"}Response fields
Section titled “Response fields”| Field | Type | Description |
|---|---|---|
id | integer | Transdirect booking id. |
status_code | string | The machine status, for example new, paid or confirmed. Switch on this field. See booking statuses. |
status | string | A display label for the status, for example New, Paid or Pending Review. Two codes share Pending Review, so do not branch on it. |
is_paid | boolean | true once a transaction is recorded on the booking (card, PayPal or credit account). A booking on Pay at end of day is true before its 9pm charge has settled. |
courier | string or null | The selected or confirmed courier, for example couriers_please. null when none has been selected. |
cost | number | Amount charged in AUD, including GST. Only present once the booking has moved past new. |
additional_charges | number | Extra charges added after booking, in AUD. Only present once the booking has moved past new. |
connote | string or null | The courier’s consignment number, once the courier has issued one. |
label | string | Relative path of the label PDF. Prefix it with https://api.transdirect.com.au, or call get a label. |
sender, receiver | object, or "" | Address details. An empty string means the address is not set. |
items | array | Item lines: package type in description, weight in kg, dimensions in cm. |
description | string or null | The goods description: what is inside the parcels. |
declared_value | number | Declared value in AUD, which sets the transit warranty cover. 0 means no cover. |
customer_reference | string or null | Your own reference, as sent when you quoted or updated. |
pickup_window | array | Pickup start and end, from the pickup date and time stored on the booking. The times are local pickup times, even though the strings end in Z. A draft shows a placeholder window until you confirm with a pickup date and time. |
charged_weight, scanned_weight | number | Weight in kg the courier charges on (the greater of dead and cubic weight) and, if reported, the weight it scanned. |
tailgate_pickup, tailgate_delivery | boolean | Whether a tail-lift truck was requested. |
special_instructions, pickup_instructions | string or null | Delivery and pickup instructions. |
order | object | Present when the booking came from an imported e-commerce order: order_id and order_number. |
collection_point | object | Present when the parcel goes to a collection point. |
created_at, booked_at, updated_at | string | ISO 8601 timestamps in UTC. booked_at currently repeats created_at. |
notifications | object | Always {"email": false, "sms": false}. |
A booking response never contains quotes or quote_errors. Those appear only in the response to the quote request that created the booking. To see prices again, quote again.
Booking context
Section titled “Booking context”GET /api/v5/bookings/{id}/contextReturns the same booking body plus total_booking_count: the number of bookings on your account paid in the current week and the 11 weeks before it. SDK function: getApiV5BookingsByIdContext.
Errors
Section titled “Errors”| Status | Body | Cause |
|---|---|---|
400 | {"success":false,"error":{"name":"ZodError","message":"..."}} with “id must be a positive integer” | The id is not a number, for example a placeholder such as [id] left in the URL. |
401 | {"error":"missing_api_key"} or {"error":"invalid_api_key"} | No key, or a key that is not active. |
404 | {"error":"booking_not_found"} | No booking with that id belongs to your account. |
404 | {"error":"legacy_public_route_not_mounted","path":"..."} | The path does not exist, for example a typo after the id. |
429 | {"error":"rate_limited"} | More than 600 requests a minute on this key. Wait for the retry-after seconds. |
Try it
Section titled “Try it”Open the API Explorer, add your key, and find Get a booking.