Skip to content

Confirm a booking

POST /api/bookings/v4/{id}/confirm

Confirms a booking with a selected courier and pickup date. This triggers the payment process and submits the booking to the chosen courier.

Before confirming, ensure the booking has full sender and receiver details. Use update booking to add any missing information.

ParameterTypeRequiredDescription
idintegerYesThe unique booking ID.
FieldTypeRequiredDescription
courierstringYesCourier identifier from the quotes response (e.g. "allied", "couriers_please", "tnt_road_express"). Use the exact key from quotes — not a brand group name.
pickup-datestringYesDesired pickup date in YYYY-MM-DD format. Must be one of the dates from the courier’s pickup_dates array. v4 requires this hyphenated name. v5 also accepts pickup_date (underscore) as an alias.
pickup-timestringNoPickup time window in HH:MM-HH:MM format (e.g. "09:00-17:00"). Optional — pass the value from the courier’s pickup_time field if provided. v5 also accepts pickup_time (underscore).
tierintegerNoFrequent rate tier identifier. Only applicable for couriers that offer frequent rates (e.g. Couriers Please, Aramex).
payment_methodstringNoHow to pay: "nab_<id>" / "paypal_<id>" (an id from GET /api/members/payment-methods), "credit" for your credit account, or "demo" for a demo booking. Omit to use the credit account. This is the recommended field — the same value works on create.
paymentobjectNoStructured alternative to payment_method, still supported: { "method": "demo" }, { "method": "credit" }, { "method": "card", "card_id": N }, or { "method": "paypal", "agreement_id": N }. May be sent alongside payment_method if the two agree; naming different methods is a 400.
Terminal window
curl -X POST \
-H "Api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"courier": "allied",
"pickup-date": "2025-08-18"
}' \
https://www.transdirect.com.au/api/bookings/v4/12345678/confirm
Terminal window
curl -X POST \
-H "Api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"courier": "couriers_please",
"pickup-date": "2025-08-18",
"tier": 1
}' \
https://www.transdirect.com.au/api/bookings/v4/12345678/confirm

A successful confirmation returns a 204 No Content status with no response body.

After confirmation, retrieve the booking to check its updated status and obtain the connote (consignment note number) once the courier has confirmed.

A confirmation results in a live booking only when you can pay for it. Say how with payment_method — see how payments work for the full picture:

  • Charge a saved card or PayPal agreement"nab_<id>" or "paypal_<id>", using the id verbatim from GET /api/members/payment-methods.
  • Bill a credit account"credit", or omit the field. Requires an approved Transdirect credit account with available credit.
  • Confirm as a demo"demo". No charge, never shipped.
Terminal window
curl -X POST \
-H "Api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"courier": "allied",
"pickup-date": "2025-08-18",
"payment_method": "nab_123"
}' \
https://www.transdirect.com.au/api/bookings/v4/12345678/confirm

If you nominate no payment method and have no credit account, the confirmation is refused with 403 Forbidden and an access_error code of NO_PAYMENT_METHOD. Having a card saved on your account is not enough on its own — the API charges a saved method only when you nominate it in the request. There is no manual approval step and nothing for support to enable; access is open by default.

A credit-account booking that would take you past your credit limit is refused the same way, with an access_error code of CREDIT_LIMIT_REACHED. Settle an outstanding invoice, or nominate a saved payment method on the request instead.

An unrecognised payment_method returns 400 rather than being ignored, so a typo can never silently become a credit-account attempt.

When selecting a courier, use the exact key returned in the quotes object from the create booking response. These are service-level identifiers (not brand group names). Examples of active services:

IdentifierCourier
alliedAllied Express
allied_palletAllied Pallet
couriers_pleaseCouriers Please
aramexAramex
tnt_road_expressTNT Road Express
tnt_overnight_expressTNT Overnight Express
tnt_nine_express / tnt_ten_express / tnt_twelve_expressTNT timed express
hunter_road_freightHunter Road Freight
northlineNorthline
team_global_expressTeam Global Express
direct_couriers_regular / _express / _eliteDirect Couriers

See list couriers for the full nested list of string_ids.

Status codeDescription
400Bad request — missing required fields or invalid courier/date.
401Unauthorised — invalid or missing credentials. The message says which: credentials rejected, or none received.
402Payment required — a supplied saved payment method was declined. The response includes a payment_error object.
403Forbidden — no payment capability (no credit account / saved payment method), the credit limit has been reached, or API access has been disabled for the account. The response includes an access_error object with a code (NO_PAYMENT_METHOD, CREDIT_LIMIT_REACHED or API_ACCESS_DISABLED) and a user_message.
404Not found — no booking exists with the given ID, or it belongs to another member.
422Unprocessable entity — the booking is missing required details (e.g. sender/receiver address) or has already been confirmed.