Skip to content

Booking lifecycle

Every shipment in Transdirect starts as a quote and progresses through a series of statuses as it moves from pricing to pickup to delivery.

flowchart LR
A[Quote created] --> B[Details added]
B --> C[Courier selected]
C --> D[Payment]
D --> E[Confirmed]
E --> F[Picked up]
F --> G[Delivered]

Statuses are stored as machine codes. GET responses for non-quote bookings often return the human label instead (e.g. "Confirmed"). The labels come from a fixed lookup table, not from mechanical title-casing — note On hold and Sending to Courier — so treat matching as case-insensitive, or accept both forms. See get a booking for the same map alongside the GET response.

Machine codeTypical labelDescription
newnew (v4 quote) / New (v5)Quote has been created with basic details (sender/receiver postcodes, items). Pricing has been returned.
pending_paymentPending PaymentSender and receiver details have been added, a courier has been selected. Awaiting payment.
paidPaidPayment has been processed. The booking is ready to be sent to the courier.
pending_reviewPending ReviewFlagged for manual review.
under_reviewUnder ReviewUndergoing manual review.
request_sentRequest SentSubmitted to the courier for confirmation.
request_failedRequest FailedThe courier was unable to process the booking. Contact support.
reviewedReviewedPassed manual review and is being processed.
sending_to_courierSending to CourierActively being sent to the courier.
confirmedConfirmedThe courier has confirmed the booking. A connote has been generated.
cancelledCancelledCancelled.
cancelled_refundCancel RefundCancelled with a refund.
booked_manuallyBooked ManuallyProcessed manually by the Transdirect team.
on_holdOn holdOn hold.
on_hold_suspiciousPending ReviewOn hold for fraud review. The label is the same as pending_review, so the label alone does not identify the code.
from_on_holdfrom_on_holdReleased from an on-hold state. Deliberately unlabelled — the lookup table has no entry, so 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.

Send a POST request to /api/bookings/v4 with the minimum required fields: sender and receiver postcodes/suburbs, and at least one item with weight and dimensions (in centimetres).

The response includes an id and quotes from all available couriers, keyed by courier string_id (e.g. allied, tnt_road_express).

Update the booking with PUT /api/bookings/v4/{id} to add full sender and receiver information: name, address, email, phone, and address type (business or residential).

Choose a courier from the returned quotes and confirm with POST /api/bookings/v4/{id}/confirm, specifying:

  • courier — the exact string_id from the quotes object
  • pickup-date — hyphenated on v4 (YYYY-MM-DD)
  • optional payment_method / payment — see how payments work

For API integrations, the cost is billed to your Transdirect credit account when you omit payment on confirm, or you can charge a saved payment method. API access is open by default; a live booking only requires the ability to pay. If you have neither a credit account nor a nominated saved payment method, the confirm is refused with 403 — use payment_method: "demo" to test without paying.

Once confirmed, retrieve the shipping label with GET /api/bookings/v4/{id}/label. The label is returned as a PDF. A6 labels and manifests are also available on the same booking (/a6label, /manifest).

Track the booking with GET /api/bookings/v4/track/{id}. See tracking for details on the response shape.