Pickup availability
Get the pickup dates and time windows a courier currently offers for a sender’s location, for example to refresh a date picker before you confirm a booking.
POST /api/v5/quotes/pickup-availabilityRequires your API key in the api-key header. Send the body as JSON with Content-Type: application/json. It does not create or change a booking.
Every quote already includes the same information for each courier (pickup_dates, pickup_time, pickup_window and pickupAvailability), so you only need this call when that quote is no longer fresh, for example the next day.
Request body
Section titled “Request body”| Field | Type | Required | Description |
|---|---|---|---|
courier | string | Yes | The courier id, as used for the keys of quotes, for example couriers_please or tnt_road_express. |
sender | object | Yes | The pickup location. Only the fields below are accepted. |
sender.postcode | string | No | The sender’s postcode, used for regional lead times and public holidays. |
sender.state | string | No | The sender’s state, for example NSW, used for public holidays. |
sender.suburb | string | No | The sender’s suburb. Accepted, but it does not change the result today. |
sender.type | string | No | business or residential. Accepted, but it does not change the result today. |
hasTailgate | boolean | No | Whether a tail lift is selected. Only changes Direct Couriers windows. If you leave it out, Direct Couriers windows assume a tail lift. |
Any other field inside sender, such as country, is rejected with 400. A courier value that is not a courier id is not rejected: you get a default 12:00 to 17:00 window, so take the id from the quote.
Example request
Section titled “Example request”curl -X POST https://api.transdirect.com.au/api/v5/quotes/pickup-availability \ -H "api-key: $TD_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "courier": "couriers_please", "sender": { "suburb": "SYDNEY", "postcode": "2000", "state": "NSW", "type": "business" } }'import { client, postApiV5QuotesPickupAvailability } from '@transdirect/api-sdk';
client.setConfig({ headers: { 'api-key': process.env.TD_API_KEY! } });
const { data, error } = await postApiV5QuotesPickupAvailability({ body: { courier: 'couriers_please', sender: { suburb: 'SYDNEY', postcode: '2000', state: 'NSW', type: 'business' }, },});if (!data) throw new Error(JSON.stringify(error));console.log(data.pickupDates[0], data.pickupTimes[0]);Response
Section titled “Response”200 OK. Couriers Please, asked on a Friday afternoon after its 11:00 same-day cutoff, so the first date is Monday:
{ "pickupDates": [ "2026-10-19", "2026-10-20", "2026-10-21", "2026-10-22", "2026-10-23", "2026-10-26", "2026-10-27", "2026-10-28", "2026-10-29", "2026-10-30" ], "pickupTimes": [{ "from": "09:00", "to": "16:00" }], "fromTime": "09:00", "toTime": "16:00", "earliest": "2026-10-19 09:00:00", "minWindowMinutes": 30, "readyFromTimes": ["09:00"], "lastAvailableTimes": ["16:00"], "todayReadyFromTimes": [], "pickupWindow": { "operatingStart": "09:00", "operatingEnd": "16:00", "displayStart": "09:00", "displayEnd": "16:00", "sameDayCutoff": "11:00", "minWindowMinutes": 0, "incrementMinutes": 30, "fixed": true }}| Field | Type | Description |
|---|---|---|
pickupDates | string[] | Up to 10 business days you can choose, as YYYY-MM-DD, skipping public holidays at the sender. Today is included only before the courier’s same-day cutoff. Send one of these as pickup_date when you confirm. |
pickupTimes | object[] | Pickup windows as {"from": "HH:MM", "to": "HH:MM"}. |
fromTime, toTime | string | The first window’s start and end. |
earliest | string or null | The earliest pickup, as YYYY-MM-DD HH:MM:SS. null when no date is available. |
minWindowMinutes | number | The shortest pickup window the courier accepts, in minutes. |
readyFromTimes, lastAvailableTimes | string[] | For couriers with a configurable window, the “ready from” and “last available” times you can offer, as HH:MM. |
todayReadyFromTimes | string[] | The “ready from” times still available if the first date is today. Empty otherwise. |
sameDayReadyFrom | string | When the first date is today and the window is configurable, the earliest “ready from” time for a same-day pickup. |
pickupWindow | object | The courier’s window rules: operating hours, the suggested window to show (displayStart, displayEnd), the sameDayCutoff, the minimum window, the time step and whether the window is fixed. |
readyFromTimes, lastAvailableTimes, todayReadyFromTimes and pickupWindow only appear for couriers with these pickup rules, such as Aramex, Couriers Please, TNT, Hunter Express, Northline, Team Global Express and Capital Transport. When pickupWindow.fixed is true, the courier only takes its standard window.
Errors
Section titled “Errors”| Status | Body | Cause |
|---|---|---|
400 | {"success":false,"error":{"name":"ZodError","message":"..."}} | courier is missing or empty, sender is missing, or sender has a field that is not accepted. |
401 | {"error":"missing_api_key"} or {"error":"invalid_api_key"} | No key, or a key that is not active. |
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, paste your API key into the authentication box, and find Get pickup availability for a courier and sender address.