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

shell
curl -s "https://api.plateapi.com.au/api/v1/lookup?plate=ABC123&state=VIC" \
  -H "X-API-Key: pk_live_YOUR_API_KEY"

Python

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

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.

shell
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.

shell
curl -s "https://api.plateapi.com.au/api/v1/lookup?plate=TEST123&state=VIC" \
  -H "X-API-Key: pk_live_YOUR_API_KEY"
200 OK -- always this response (request_id varies)
{
  "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:

shell
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"
200 OK -- with detailed_description
{
  "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.

LanguagePackageInstall
Pythonplateapi-pythonpip install plateapi
Node.js / TypeScriptplateapi-nodenpm install plateapi-sdk
PHPplateapi-phpComposer git repository
Goplateapi-gogo get github.com/PlateAPI/plateapi-go
Rustplateapi-rustCargo git dependency
C++plateapi-cppBuild 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.

python -- using the SDK
from plateapi import PlateAPI

client = PlateAPI("pk_live_YOUR_API_KEY")
result = client.lookup("ABC123", "VIC")
print(result.vehicle.make, result.vehicle.model)
typescript -- using the SDK
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);
php -- using the SDK
use PlateAPI\Client;

$client = new Client('pk_live_YOUR_API_KEY');
$result = $client->lookup('ABC123', 'VIC');
echo $result['vehicle']['make'] . ' ' . $result['vehicle']['model'];
go -- using the SDK
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)
rust -- using the SDK
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());
c++ -- using the SDK
#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.


GET/api/v1/health

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.

shell
curl -s "https://api.plateapi.com.au/api/v1/health"
200 OK -- application/json
{
  "status": "ok"
}

Live uptime history is also published on the status page.