API Reference
Quick Start
PlateAPI is a simple REST API. Send a GET request with a plate number and state, and you get structured vehicle data back as JSON. Starter plans and above also get a vehicle database endpoint for make / model / year dropdowns. No SDK required -- any HTTP client works.
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
response = requests.get(
"https://api.plateapi.com.au/api/v1/lookup",
params={"plate": "ABC123", "state": "VIC"},
headers={"X-API-Key": "pk_live_YOUR_API_KEY"}
)
data = response.json()
if data["success"]:
v = data["vehicle"]
print(f"{v['year_range']} {v['make']} {v['model']} -- {v['engine']}")
else:
print(data["error"])JavaScript
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}`);
} else {
console.error(data.error);
}Authentication
Every request must include your API key in the X-API-Key header. You get a key instantly when you create an account -- keys look like pk_live_... and can be viewed or rotated from your dashboard at any time. Requests without a valid key return 401 Unauthorized.
curl -s "https://api.plateapi.com.au/api/v1/lookup?plate=ABC123&state=VIC" \ -H "X-API-Key: pk_live_YOUR_API_KEY"
Sandbox Test Plate
The plate TEST123 (any state) is a permanent sandbox plate. It returns the fixed response below instantly, and it is completely free: it does not count toward your monthly quota and is not rate limited by your plan. Use it to build your integration, in CI test suites, and for health checks of your own code paths. A valid API key is still required, so it also verifies your auth wiring.
curl -s "https://api.plateapi.com.au/api/v1/lookup?plate=TEST123&state=VIC" \ -H "X-API-Key: pk_live_YOUR_API_KEY"
{
"success": true,
"vehicle": {
"year_range": "2015-2020",
"lowest_year": 2015,
"highest_year": 2020,
"make": "TOYOTA",
"model": "HILUX",
"description": "15~20 TOYOTA HILUX SR 2.8L DIESEL",
"body": "UTE",
"engine": "2.8L",
"vehicle_id": 1380801
},
"source": "plateapi",
"duration_ms": 0.1,
"request_id": "req_5b8e2f1a9c3d7e0f4a6b9c1d",
"alternatives": [],
"match": "exact",
"sandbox": true
}Sandbox responses include "sandbox": true so your code can tell them apart from real lookups. They carry the same X-RateLimit-* headers as real lookups, but the remaining count is never decremented -- sandbox lookups consume no quota. The sandbox vehicle_id is a real record, so /api/v1/vehicles/1380801 works for testing the vehicle database too. The sandbox also supports detailed=true:
curl -s "https://api.plateapi.com.au/api/v1/lookup?plate=TEST123&state=VIC&detailed=true" \ -H "X-API-Key: pk_live_YOUR_API_KEY"
{
"success": true,
"vehicle": {
"year_range": "2015-2020",
"lowest_year": 2015,
"highest_year": 2020,
"make": "TOYOTA",
"model": "HILUX",
"description": "15~20 TOYOTA HILUX SR 2.8L DIESEL",
"body": "UTE",
"engine": "2.8L",
"vehicle_id": 1380801,
"detailed_description": "TOYOTA HILUX SR Auto or Manual AN120 AN130 05/2015~12/2020 4 Door UTE 4x4 DIESEL 2.8 litre, 1GD-FTV I4 16v DOHC I/C Turbo DI {130kW}"
},
"source": "plateapi",
"duration_ms": 0.1,
"request_id": "req_5b8e2f1a9c3d7e0f4a6b9c1d",
"alternatives": [],
"match": "exact",
"sandbox": true
}Official SDKs
Official client libraries with built-in retries, rate limit handling, and typed responses. No SDK is required -- any HTTP client works -- but these save boilerplate.
| Language | Package | Install |
|---|---|---|
| Python | plateapi-python | pip install plateapi |
| Node.js / TypeScript | plateapi-node | npm install plateapi-sdk |
| PHP | plateapi-php | Composer git repository |
| Go | plateapi-go | go get github.com/PlateAPI/plateapi-go |
| Rust | plateapi-rust | Cargo git dependency |
| C++ | plateapi-cpp | Build from source (CMake) |
The Python SDK (0.2.0) also covers the vehicle database, vehicle IDs and motorcycles. The other five cover plate lookups and the account endpoints; for the vehicle database from those languages, call the REST endpoints directly.
from plateapi import PlateAPI
client = PlateAPI("pk_live_YOUR_API_KEY")
result = client.lookup("ABC123", "VIC")
print(result.vehicle.make, result.vehicle.model)import { PlateAPI } from "plateapi-sdk";
const client = new PlateAPI("pk_live_YOUR_API_KEY");
const result = await client.lookup("ABC123", "VIC");
console.log(result.vehicle?.make, result.vehicle?.model);use PlateAPI\Client;
$client = new Client('pk_live_YOUR_API_KEY');
$result = $client->lookup('ABC123', 'VIC');
echo $result['vehicle']['make'] . ' ' . $result['vehicle']['model'];import plateapi "github.com/PlateAPI/plateapi-go"
client := plateapi.NewClient("pk_live_YOUR_API_KEY")
result, _ := client.Lookup(ctx, "ABC123", "VIC", false)
fmt.Println(*result.Vehicle.Make, *result.Vehicle.Model)use plateapi::PlateAPI;
let client = PlateAPI::new("pk_live_YOUR_API_KEY");
let result = client.lookup("ABC123", "VIC", false).await?;
println!("{} {}", result.vehicle.unwrap().make.unwrap(), result.vehicle.unwrap().model.unwrap());#include <plateapi/client.hpp>
plateapi::PlateAPI client("pk_live_YOUR_API_KEY");
auto result = client.lookup("ABC123", "VIC");
std::cout << *result.vehicle->make << " " << *result.vehicle->model;Source code and full documentation on GitHub.
Versioning
The API is versioned via the URL path. The current and only version is /api/v1/. If a breaking change is ever needed (removing a field, changing a response shape, or altering default behaviour), it will ship under a new version prefix such as /api/v2/. The previous version will continue to work for at least 6 months after the new version is announced, and all active customers will be notified by email before any deprecation takes effect.
Non-breaking changes -- adding new fields to responses, adding new optional query parameters, or adding new endpoints -- may be introduced to the current version at any time without a version bump.
Service health check. No authentication required and no effect on your quota -- suitable for uptime monitors and pre-flight checks in your own deployment pipelines.
curl -s "https://api.plateapi.com.au/api/v1/health"
{
"status": "ok"
}Live uptime history is also published on the status page.