Australian Rego Check API for Developers
Australia has no public government API for registration lookups. Each state runs its own web portal, none of them expose an endpoint, and scraping them yourself means maintaining eight different integrations behind CAPTCHAs. This post walks through doing it the easy way instead: a single REST call with PlateAPI that works for every state and territory.
What you get back
Send a plate and a state, receive structured vehicle data:
{
"success": true,
"vehicle": {
"year_range": "2003-2006",
"lowest_year": 2003,
"highest_year": 2006,
"make": "TOYOTA",
"model": "COROLLA",
"description": "03~06 TOYOTA COROLLA SPORTIVO 1.8L PETROL",
"body": "HATCHBACK",
"engine": "1.8L"
},
"confidence": "high",
"duration_ms": 1509.96,
"alternatives": []
}A few details worth noting:
- Year ranges, not guesses. Vehicles are identified at the model-generation level, so you get the honest production range ("2003-2006") rather than a single arbitrary year. Models still in production return an open range like "2020-ON".
- Alternatives. When a plate maps to several variants (the same model with different engines, for example), the extra matches arrive in the
alternativesarray so your UI can ask the user to pick. - Confidence. Every response carries a
high/medium/lowconfidence score from our validation layer.
Getting a key
Create a free account -- no credit card -- and your API key works immediately for 20 lookups a month. Pass it in the X-API-Key header on every request.
Code examples
cURL
curl -s "https://api.plateapi.com.au/api/v1/lookup?plate=ABC123&state=VIC" \ -H "X-API-Key: pk_live_YOUR_API_KEY"
Python
import requests
resp = requests.get(
"https://api.plateapi.com.au/api/v1/lookup",
params={"plate": "ABC123", "state": "VIC"},
headers={"X-API-Key": "pk_live_YOUR_API_KEY"},
timeout=30,
)
data = resp.json()
if data["success"]:
v = data["vehicle"]
print(f"{v['year_range']} {v['make']} {v['model']} ({v['engine']})")
else:
print(f"Not found: {data['error']}")JavaScript / Node.js
const res = await fetch(
"https://api.plateapi.com.au/api/v1/lookup?plate=ABC123&state=VIC",
{ headers: { "X-API-Key": "pk_live_YOUR_API_KEY" } }
);
const data = await res.json();
if (data.success) {
const { year_range, make, model, engine } = data.vehicle;
console.log(`${year_range} ${make} ${model} (${engine})`);
}Handling the edge cases
- Plate not found: you still get HTTP 200, with
success: falseandcode: "not_found". Treat it as a normal outcome, not an exception -- typos in plates are common, so give the user a clear retry path. - Invalid state: HTTP 400. Valid values are ACT, NSW, NT, QLD, SA, TAS, VIC, WA.
- Rate limits: HTTP 429 when you exceed your plan's per-minute rate or monthly quota. Successful responses include
X-RateLimit-Remainingso you can track usage without polling. - Multiple matches: check
alternatives.length-- for parts fitment, showing a "which one is yours?" picker beats guessing.
Why not scrape it yourself?
You technically can, and some teams try. The trade-offs: eight separate state portals to reverse-engineer, CAPTCHAs and bot protection that break your integration without warning, and the ongoing maintenance of all of it. An aggregated API costs $29/month for 400 lookups and that problem stops existing. The live demo is the fastest way to see the data quality for your own test plates, and the full API reference covers everything above in more detail.
PlateAPI turns Australian number plates into structured vehicle data -- one REST endpoint, all eight states, free tier included.