Skip to content

API introduction

The Transdirect API is a standard REST API with JSON responses that can be easily integrated into new and existing systems. It allows for instant live quoting, booking of jobs, tracking, and label generation.

Base URL:

https://www.transdirect.com.au/api

All API endpoints use the /api/bookings/v4 path prefix for the current version.

DetailValue
Base URLhttps://www.transdirect.com.au/api
FormatJSON
Content-Typeapplication/json
Date formatISO 8601 (e.g. 2025-08-27T14:00:00+1000)
CurrencyAUD
AuthenticationBasic auth or API key header

New API integrations start in demo mode. While in demo mode:

  • You can create bookings and confirm them as normal
  • Confirmed bookings receive a demo status instead of being sent to a courier
  • Demo labels are available for testing (static format per courier)
  • No charges are incurred

When your integration is ready for production, contact support@transdirect.com.au to enable live bookings.

The API enforces two complementary limits per identity. An identity is your authenticated member account (when using Basic auth or an API key) or your IP address (for unauthenticated requests).

IdentityLimit
Authenticated member60 requests / minute
Unauthenticated (per IP)30 requests / minute
IdentityLimit
Authenticated member10 simultaneous requests
Unauthenticated (per IP)5 simultaneous requests

The concurrency limit prevents a single integration from monopolising server resources by holding many long-running requests open at once. If your application needs to issue many quote requests, run them in batches that respect this limit rather than firing all of them in parallel.

Successful responses include the following headers so you can track your usage:

HeaderMeaning
X-RateLimit-LimitMaximum requests allowed in the current window
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets

Requests that exceed either limit return 429 Too Many Requests with a JSON error body and a Retry-After header indicating how many seconds to wait before retrying.

{
"message": "Rate limit exceeded. Try again in 47 seconds.",
"code": 429
}

We recommend implementing exponential backoff in your client and respecting the Retry-After value.

  • Cache quote results where possible rather than re-requesting
  • Use webhooks or polling intervals of at least 5 minutes for tracking updates
  • Run bulk operations sequentially or in small parallel batches to stay under the concurrency limit

Errors are returned as JSON with an appropriate HTTP status code:

{
"error": "Invalid postcode",
"message": "The sender postcode '0000' is not a valid Australian postcode."
}
Status codeMeaning
400Bad request — check your request body
401Unauthorised — invalid credentials or API key
404Not found — the booking or resource doesn’t exist
415Unsupported media type — set Content-Type to application/json
422Unprocessable entity — validation errors
500Server error — contact support if this persists