Skip to content

Manifests, invoices and other documents

Besides the label, each booking has a manifest and an invoice. You can also print labels and manifests for up to 50 bookings in one PDF, create a link that lets someone without your API key download a label, and regenerate a label for some couriers.

Every endpoint on this page requires your API key in the api-key header and works only on bookings that belong to your account.

DocumentEndpointReturns
ManifestGET /api/v5/bookings/{id}/manifestPDF
InvoiceGET /api/v5/bookings/{id}/invoicePDF, or a redirect to it
Shareable label linkGET /api/v5/bookings/{id}/public_urlJSON with a signed URL
Labels for many bookingsPOST /api/v5/bookings/labels/batchOne merged PDF
Manifests for many bookingsPOST /api/v5/bookings/manifests/batchOne merged PDF
Regenerate a labelGET /api/v5/bookings/{id}/tntregeneralabel, /tgeregeneralabel, /northlineregeneralabelPDF

A not-ready response is JSON unless the request sends Accept: text/html, in which case it is a readable HTML page.

GET /api/v5/bookings/{id}/manifest

The manifest lists the consignment for the driver. It is ready at the same point as the label’s HEAD check (see when a label is ready), so a Couriers Please manifest needs the booking to be confirmed. Allied (allied) bookings do not have a manifest.

Terminal window
curl https://api.transdirect.com.au/api/v5/bookings/623630/manifest \
-H "api-key: $TD_API_KEY" \
-o manifest-623630.pdf

SDK function: getApiV5BookingsByIdManifest. Not ready returns 400:

{
"error": "manifest_not_ready",
"message": "The manifest is not ready for this booking.",
"booking_id": 623630,
"status": "new"
}
GET /api/v5/bookings/{id}/invoice

The tax invoice for the booking, available once it is paid. The response is the PDF, or a 302 redirect to it, so use curl -L.

Terminal window
curl -L https://api.transdirect.com.au/api/v5/bookings/623630/invoice \
-H "api-key: $TD_API_KEY" \
-o invoice-623630.pdf

SDK function: getApiV5BookingsByIdInvoice. Before payment it returns 409:

{
"error": "invoice_not_ready",
"message": "The invoice is not available until the booking is paid.",
"booking_id": 623630,
"status": "new"
}
GET /api/v5/bookings/{id}/public_url

Creates a signed link to the booking’s label that works without an API key, for example to send to a warehouse or to the person handing over the parcel. Each call creates a new link. Links work for 7 days.

Terminal window
curl https://api.transdirect.com.au/api/v5/bookings/623630/public_url \
-H "api-key: $TD_API_KEY"

SDK function: getApiV5BookingsByIdPublicUrl.

200 OK

{
"success": true,
"url": "https://www.transdirect.com.au/api/signed/label/3f9c2a7e5b1d48c0a6e2f4b8d7c1e9a05b3f6d2c8e4a1b7f9d0c3e5a2b6f8d1c",
"expires_at": "2026-10-23 04:20:11"
}

expires_at is in UTC, formatted YYYY-MM-DD HH:MM:SS. Use url exactly as returned. Anyone who has the link can download the label until it expires, so share it only with people who need it.

StatusBodyCause
400{"error":"Label not ready","status":"paid"}The label is not ready for this booking’s status.
400{"error":"ParcelPoint Id not found. Please try again after some time"}The booking goes to a collection point that has not been assigned yet.
POST /api/v5/bookings/labels/batch
POST /api/v5/bookings/manifests/batch

Merge the labels (or manifests) of up to 50 bookings into one PDF, in the order you list them.

FieldTypeDescription
idsarray of integers1 to 50 booking ids, all on your account.
formatstringLabels only: standard (A4, the default) or a6.
Terminal window
curl -X POST https://api.transdirect.com.au/api/v5/bookings/labels/batch \
-H "api-key: $TD_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "ids": [623630, 623631, 623632], "format": "a6" }' \
-D headers.txt \
-o labels.pdf
import { client, postApiV5BookingsLabelsBatch } from '@transdirect/api-sdk';
client.setConfig({ headers: { 'api-key': process.env.TD_API_KEY! } });
const { data, response } = await postApiV5BookingsLabelsBatch({
body: { ids: [623630, 623631, 623632], format: 'a6' },
});
const skipped = response.headers.get('x-transdirect-skipped-bookings');

The SDK function for manifests is postApiV5BookingsManifestsBatch.

Bookings whose label or manifest is not ready are left out of the PDF and listed, comma-separated, in the x-transdirect-skipped-bookings response header. Check it every time: a 200 does not mean every booking was included.

StatusBodyCause
400{"error":"No labels are ready for the selected bookings"} or {"error":"No manifests available for the selected bookings"}None of the bookings has a document ready.
400ZodError bodyids is empty, has more than 50 entries, or format is not standard or a6.
403{"error":"One or more bookings do not belong to your account"}At least one id is not on your account. Nothing is returned.
404{"error":"No bookings found"}None of the ids is on your account.
GET /api/v5/bookings/{id}/tntregeneralabel
GET /api/v5/bookings/{id}/tgeregeneralabel
GET /api/v5/bookings/{id}/northlineregeneralabel

Discards the stored label and builds a new one, then returns it as a PDF. Use the endpoint that matches the booking’s courier: TNT, Team Global Express or Northline. Reach for it only when the stored label is wrong or will not download. For everyday downloads use get a label.

Terminal window
curl https://api.transdirect.com.au/api/v5/bookings/623630/tntregeneralabel \
-H "api-key: $TD_API_KEY" \
-o label-623630.pdf

SDK functions: getApiV5BookingsByIdTntregeneralabel, getApiV5BookingsByIdTgeregeneralabel and getApiV5BookingsByIdNorthlineregeneralabel.

StatusBodyCause
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.
429{"error":"rate_limited"}More than 600 requests a minute on this key. Wait for the retry-after seconds.

Open the API Explorer, add your key, and look under the booking PDF operations.