API introduction
Overview
Section titled “Overview”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/apiAll API endpoints use the /api/bookings/v4 path prefix for the current version.
Key details
Section titled “Key details”| Detail | Value |
|---|---|
| Base URL | https://www.transdirect.com.au/api |
| Format | JSON |
| Content-Type | application/json |
| Date format | ISO 8601 (e.g. 2025-08-27T14:00:00+1000) |
| Currency | AUD |
| Authentication | Basic auth or API key header |
Important notes
Section titled “Important notes”Demo mode
Section titled “Demo mode”New API integrations start in demo mode. While in demo mode:
- You can create bookings and confirm them as normal
- Confirmed bookings receive a
demostatus 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.
Rate limits
Section titled “Rate limits”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).
Requests per minute
Section titled “Requests per minute”| Identity | Limit |
|---|---|
| Authenticated member | 60 requests / minute |
| Unauthenticated (per IP) | 30 requests / minute |
Concurrent in-flight requests
Section titled “Concurrent in-flight requests”| Identity | Limit |
|---|---|
| Authenticated member | 10 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.
Response headers
Section titled “Response headers”Successful responses include the following headers so you can track your usage:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Maximum requests allowed in the current window |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
When you are rate limited
Section titled “When you are rate limited”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.
Best practices
Section titled “Best practices”- 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
Error responses
Section titled “Error responses”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 code | Meaning |
|---|---|
400 | Bad request — check your request body |
401 | Unauthorised — invalid credentials or API key |
404 | Not found — the booking or resource doesn’t exist |
415 | Unsupported media type — set Content-Type to application/json |
422 | Unprocessable entity — validation errors |
500 | Server error — contact support if this persists |
Next steps
Section titled “Next steps”- Set up authentication
- Create your first booking/quote
- Understand the booking lifecycle