WorkClear

Australian licence compliance workflows. 1.0M records across building, trade, and expanding sector coverage via verification search, bulk checks, and API.

QLDNSWVICSAWAACTNTTAS

Product

  • Search
  • Pricing
  • API Documentation
  • Data Sources
  • Coverage Status
  • Guides

Verify by State

  • Queensland (QBCC)
  • New South Wales
  • Victoria (VBA)
  • Real estate licences
  • All coverage

Legal

  • Privacy Policy
  • Terms of Service

Contact

Get in touch

© 2026 WorkClear. All rights reserved.

Data sourced from official registers. Public availability varies by state and licence category.

WorkClear
SearchPricingVerifySourcesDocsGuidesStatus
Loading

Getting Started

Dashboard

REST API

Reference

SDKs & Integration

Product & API Documentation

WorkClear supports both non-technical operations teams and developer integrations. Test licence coverage in the dashboard, inspect API response shapes, or verify/search via API across 8 states with 1.0M licence records across building and trades, real-estate, and current security coverage.

Base URLhttps://www.workclear.com.au/api

Test coverage first

Use web search and the status page to confirm the licence categories your workflow needs.

Try search

Choose an API tier

API access starts on Pro, with higher monthly call volume on Business and Enterprise.

Compare pricing

Build server-side

Keep API keys out of client code and call WorkClear from your own backend service.

Authentication

Quick Start

Get your first API response in under two minutes.

1

Create an account

Sign up at workclear.com.au/signup — API access is available on paid plans.

2

Get your API key

Generate a key from your dashboard. Keys start with wc_live_.

3

Make your first request


Authentication

All API v1 endpoints require authentication. Pass your API key via the x-api-key request header.

Header Authentication (recommended)

Security tip: Never expose your API key in client-side code. Always call the WorkClear API from your backend server.

API Key Format

PrefixDescription
wc_live_API key — requests count against your monthly quota

Unauthenticated Endpoints

The following endpoints do not require an API key:

  • GET /api/status— System health check

Dashboard Workflows

Built for quick manual verification and integration testing. Search current coverage, inspect source fields, and compare the dashboard result with the `/api/v1/verify` response shape before wiring checks into your own system.

Verify Console

Test a licence type before you build against it

The dashboard is the quickest way to confirm whether WorkClear covers a register, what the official source publishes, and what your API integration should expect for a matching licence.

  • Search by licence number, name, or ABN across contractor, real-estate, and security coverage.
  • Scope searches by state and category where the API needs source-family context, such as NSW Design and Building Practitioners.
  • Review status, class, expiry, source, and enriched fields before deciding how to map them in your platform.
  • Copy a representative API request or JSON response for backend implementation and QA.
Good fit for onboarding flows, contractor platforms, workforce systems, CRMs, and compliance tools that need programmatic licence checks.

Endpoint

/api/v1/verify

Mode

Response preview

{

"status": "active",

"state": "QLD",

"licence_number": "15427909",

"valid_currently": true

}

GET request

state, sector, category where needed

Copy

What you test

Whether a licence type is covered, which state/category parameters matter, and whether the record returns active, inactive, expired, or not found.

What you inspect

Licence type, authorised classes, expiry, source, address fields, ABN/ACN, and source-specific enrichment when published.

What you build

Use the copied request and response shape as a reference for backend onboarding, compliance decisions, and QA fixtures.

Search & Verify

Fast single-licence checks from the dashboard

  • Search by licence number, name, or ABN.
  • View status, licence class, state, and expiry in one result card.
  • Toggle between the UI summary, API response preview, and request example.
Search: QLD-DEMO-54898
JOHN EXAMPLE BUILDING PTY LTDActive

Licence: QLD-DEMO-54898

State: QLD

Class: Builder - Open

Expiry: 31 Jan 2028

API responseRequest

Bulk CSV

Upload contractor lists and verify them in batches

Business +

CSV processing pipeline

1. Upload filedone
2. Parse + validate rowsdone
3. Verify licencesrunning

218 / 320 rows processed

Post-run actions

  • Filter invalid/expiring rows
  • Download the verified CSV result set
  • Use the API for ongoing or higher-volume verification

Free search

Fast manual checks for occasional verification

Use the dashboard when you need to look up a licence quickly or test how a source is represented.

API path

Programmatic checks for onboarding and compliance systems

Use API keys when checks need to run inside your own product, workflow, or database process.

Try Verify ConsoleView Plans

Verify Licence

GET/api/v1/verify

Look up a licence by its licence number. Returns full details including holder name, status, expiry date, data source, and any published register metadata. Searches across all current coverage by default, or filter to a specific state and sector. State-scoped exact checks can use source-specific freshness paths where available.

Canonical endpoint: /api/v1/verify. The legacy /api/verify alias remains available for compatibility.

Parameters

ParameterTypeRequiredDescription
licence_numberstringRequiredThe licence number to verify
statestringOptionalState code: QLD, NSW, VIC, SA, WA, ACT, NT, TAS. Searches all states if omitted; required for QLD QBCC live exact fallback.
sectorstringOptional"contractor" (default), "real_estate", or "security". Real-estate checks are live for VIC, NSW, QLD, WA, ACT, NT, and TAS; security coverage is source-specific, starting with QLD Security.
categorystringOptionalOptional specialised source category. Use "designer" or "nsw_dbp" for NSW Design and Building Practitioners records.

Sector Values

Choose the sector that matches the register being checked. Security is a separate sector from contractor coverage; current security checks are live for QLD security employee and firm records.

Request

Security Request Example

For QLD security employee and firm checks, pass sector=security and state=QLD.

Specialised NSW DBP Example

NSW Design and Building Practitioners records share state=NSW and sector=contractor, so they are opt-in through category=designer or category=nsw_dbp. Ordinary NSW contractor checks do not return DBP rows unless this category is provided.

State Scope and Live Fallbacks

Licence numbers are not globally unique across Australian registers. For broad discovery you can omit state, but production exact checks should pass both sector and state. QLD QBCC contractor checks use the local WorkClear dataset first; when a scoped exact lookup misses, WorkClear may run a live QBCC exact check and cache a positive result.

Response

FieldTypeDescription
statusstring"active", "expired", "inactive", "unknown", "source_absent", or "not_found"
statestringAustralian state code (QLD, NSW, VIC, etc.)
licence_numberstringThe licence number
licensee_namestringName of the licence holder
abnstring | nullAustralian Business Number
acnstring | nullAustralian Company Number
business_addressstring | nullPublished business or register address, where available
licence_typestring | nullSource-published licence, instrument, or category label
financial_categorystring | nullFinancial category where published by the source
licence_classesarraySource-published authorised work classes or scopes, where available
issue_datestring | nullLicence issue date (YYYY-MM-DD)
expiry_datestring | nullLicence expiry date (YYYY-MM-DD)
sourcestringData source (e.g. "QBCC Licensed Contractors Register")
valid_currentlybooleanFalse when expired, inactive, unknown, or absent from the latest source refresh
source_absent_atstring | nullWhen the record was first missing from a completed source refresh
live_lookupobject | undefinedPresent when a source-specific live lookup was attempted, skipped, or unavailable

Licence Type and Classes

WorkClear preserves the wording published by each official register. Different states place the useful authorisation signal in different fields, so national integrations should not rely on licence_type = "Electrician" alone.

Use licence_typeas the source's licence or instrument label, and use licence_classes as the published classes or scopes where that register exposes them. An empty licence_classes array does not by itself mean the licence is not electrical; some registers express the relevant authorisation in licence_type.

Electrical Checks by State

StateWhere the electrical signal usually appears
NSWUsually in licence_classes, for example Electrician.
ACTlicence_type may be Electrician, while licence_classes gives the class or scope, for example Class 2 - Unrestricted.
VICOften in licence_type, for example Registered Electrical Contractor, Licensed Electrical Worker, or Licensed Electrical Inspector.
WAOften in licence_type, for example Electrician or Electrician's Training Licence.
NTOften in licence_type, including restricted, unrestricted, mechanic, and fitter wording.
TASBoth fields can matter, for example an electrical type plus Practitioner or Contractor class.
SACurrent live SA coverage is active Consumer and Business Services PGE and Builder/BLD records; assess the returned type/class values and active status.
QLD electricalNot live yet through the gated Appian electrical source. QLD building/trades and real-estate coverage remain separate.

Electrical Field Examples

These examples show field placement across registers. Always evaluate the actual values returned for the licence being checked.

Recommended Matching Logic

  1. Require status = "active" and valid_currently = true.
  2. Evaluate both licence_type and every licence_classes[].class.
  3. Apply state-specific rules for accepted roles and scopes.
  4. Treat restricted, unrestricted, provisional, training, worker, and contractor labels according to your policy.

Search Licences

GET/api/v1/search

Search for licences by name, ABN, or supported sector-specific fields. Supports state filtering, sector selection, and pagination.

Canonical endpoint: /api/v1/search. The legacy /api/search alias remains available for compatibility.

Parameters

ParameterTypeRequiredDescription
qstringRequiredSearch query — name, holder name, or ABN depending on sector
statestringOptionalFilter by state (QLD, NSW, VIC, SA, WA, ACT, NT, TAS)
typestringOptional"name", "abn", or "licence_type" (auto-detected if omitted)
sectorstringOptional"contractor" (default), "real_estate", or "security". Real-estate checks are live for VIC, NSW, QLD, WA, ACT, NT, and TAS; security coverage is source-specific, starting with QLD Security.
limitintegerOptionalMax results to return (default: 10, max: 100)
include_absentbooleanOptionalSet to "true" to include records absent from the latest source refresh. Hidden by default.

Request

Response


Bulk Verify

POST/api/verify/bulk

Verify multiple licence numbers in one request. Supports sector-aware batches, including VIC, NSW, QLD, WA, ACT, NT, and TAS real-estate lists and QLD security lists.

Parameters

ParameterTypeRequiredDescription
licencesstring[]RequiredArray of licence numbers to verify (max 100 per request)
statestringOptionalOptional state filter. Use VIC, NSW, QLD, WA, ACT, NT, and TAS for current real-estate coverage and QLD for current security coverage.
sectorstringOptional"contractor" (default), "real_estate", or "security".
categorystringOptionalOptional batch-wide specialised source category. Use "designer" or "nsw_dbp" for NSW Design and Building Practitioners records.

Request

Response


Data Coverage

GET/api/v1/coverage

Returns data coverage information — which states are available, record counts, data sources, and when data was last updated.

Request

Response

Current Coverage

This table summarises the main state coverage used by contractor-first API examples. For the live sector matrix, including real-estate and security source families, use the Status page or the coverage endpoint response.

StateRecordsSourceStatus
QLD120K+QBCCLive
NSW356K+NSW Fair TradingLive
VIC185K+VBA / ESVLive
SA35K+CBS active PGE + Builder/BLD slicesLive
WA98K+WA Building CommissionLive
ACT23K+ACT Construction OccupationsLive
NT13K+NT LicensingLive
TAS14K+CBOS TasmaniaLive

Need a source we don't cover yet?

Send us the register name, state, licence type, and a few sample licence numbers. If the official source is workable, we can assess it for onboarding.

Request a data source

Health Check

GET/api/healthNo auth required

Minimal service health endpoint. Use this for uptime probes and infrastructure monitoring. This is not a licence lookup endpoint.

Request

Response


System Status

GET/api/statusNo auth required

Public system and data-status snapshot. Returns monitored state health and record coverage. No authentication required. For simple uptime checks, use /api/health.

Request

Response

See real-time status on our Status Page.


Check Licence Status

GET/api/v1/status

Quick validity check — returns whether a licence is currently valid with a simple boolean is_valid flag. Lighter response than the full verify endpoint.

Naming note: /api/status is platform status, while /api/v1/status is licence status.

Parameters

ParameterTypeRequiredDescription
licence_numberstringRequiredThe contractor licence number
statestringOptionalState code (QLD, NSW, VIC, etc.). Recommended for accuracy.

Request

Response


API Usage

Standard API plans are for your own business workflows. Use the API from your backend to verify licences inside onboarding, procurement, compliance, marketplace, CRM, or back-office systems.

Included in standard API plans

  • Embed licence checks into your own product or internal workflow.
  • Show verification results to your users as part of your normal service.
  • Store results for reasonable operational, audit, support, and compliance purposes.

Requires a separate agreement

  • Reselling, white-labelling, or syndicating WorkClear-powered checks.
  • Offering licence verification as a standalone third-party data service.
  • Bulk redistributing results or building a substitute licence database from API output.

If your platform needs partner, reseller, or customer-facing verification rights, contact us and we can set up the right commercial API agreement.


Rate Limits

API calls are rate-limited based on your plan. Monthly API limits reset on the 1st of each month. Web lookups on workclear.com.au are free and unlimited for all plans.

PlanAPI CallsPriceBest For
FreeWeb only (no API access)$0Manual lookups
Pro1,000 / month$29/moGrowing businesses
Business10,000 / month$99/moHigh-volume applications
EnterpriseUnlimitedCustomCustom SLAs & support

Rate Limit Headers

When you exceed your rate limit, the API returns a 429 status with these headers:

HeaderDescription
X-RateLimit-LimitYour monthly limit
X-RateLimit-RemainingRemaining calls this month
Retry-AfterSeconds until the monthly limit can be retried

Need higher limits? Compare plans or contact us for Enterprise pricing.


Error Codes

The API uses standard HTTP status codes. All error responses include a JSON body with an error field.

CodeMeaningWhat to Do
200SuccessRequest succeeded. Check the response body — a 200 with "status": "not_found" means no licence was matched.
400Bad RequestInvalid or missing parameters. Check that licence_number is provided and state is a valid code.
401UnauthorizedMissing or invalid API key. Verify your x-api-key header.
429Rate LimitedYou've hit your monthly limit. Upgrade your plan or wait for the next monthly reset.
500Server ErrorSomething went wrong on our side. Retry after a moment. If it persists, contact support.

Error Response Format

Python Integration

Use the standard requestslibrary to integrate WorkClear into any Python application. Here's a ready-to-use client class:

No official Python package is required today.Use this client directly with your API key; we'll document a package if we add one.


JavaScript / Node Integration

Works with Node.js, Deno, Bun, or any runtime with fetchsupport. Here's a reusable client class:

No official npm package is required today.Use this client directly with your API key; we'll document a package if we add one.


Webhooks

Planned

Receive licence status-change events, renewal confirmations, and source-update notifications delivered to your endpoint.

Interested? Let us know and we'll notify you when it's live.

Ready to build licence checks into your workflow?

Start with free web search, then choose a paid plan when you need API access, bulk checks, or higher verification volume.

Create Free AccountCompare PlansContact Sales
Your first API call
curl "https://www.workclear.com.au/api/v1/verify?licence_number=QLD-DEMO-54898" \
  -H "x-api-key: wc_live_your_api_key_here"
x-api-key header
curl "https://www.workclear.com.au/api/v1/verify?licence_number=QLD-DEMO-54898" \
  -H "x-api-key: wc_live_your_api_key_here"
Supported sector values
[
  {
    "sector": "contractor",
    "use_for": "Building, trade, construction, plumbing, electrical, and related contractor registers",
    "state_guidance": "QLD, NSW, VIC, SA, WA, ACT, NT, TAS where live"
  },
  {
    "sector": "real_estate",
    "use_for": "Property, agent, salesperson, resident letting, and real-estate business checks",
    "state_guidance": "VIC, NSW, QLD, WA, ACT, NT, and TAS"
  },
  {
    "sector": "security",
    "use_for": "Security employee and security provider firm checks",
    "state_guidance": "QLD currently"
  }
]
Verify a licence
curl -X GET "https://www.workclear.com.au/api/v1/verify?licence_number=QLD-RE-DEMO-1005023&state=QLD&sector=real_estate" \
  -H "x-api-key: wc_live_your_api_key_here"
Verify a QLD security licence
curl -X GET "https://www.workclear.com.au/api/v1/verify?licence_number=10022&state=QLD&sector=security" \
  -H "x-api-key: wc_live_your_api_key_here"
Verify a NSW design practitioner
curl -X GET "https://www.workclear.com.au/api/v1/verify?licence_number=DEP0002044&state=NSW&sector=contractor&category=designer" \
  -H "x-api-key: wc_live_your_api_key_here"
200 OK — Licence found
{
  "status": "active",
  "sector": "contractor",
  "state": "NSW",
  "licence_number": "NSW-DEMO-401328C",
  "licensee_name": "Demo Electrical Services Pty Ltd",
  "abn": "00 000 000 000",
  "acn": null,
  "business_address": "SEVEN HILLS NSW 2147",
  "licence_type": "Contractor",
  "financial_category": null,
  "issue_date": "2022-07-06",
  "expiry_date": "2027-06-30",
  "licence_classes": [
    { "class": "Electrician" }
  ],
  "source": "NSW Fair Trading",
  "valid_currently": true,
  "source_absent_at": null
}
200 OK — Licence not found
{
  "status": "not_found",
  "live_lookup": {
    "provider": "qld_qbcc",
    "attempted": false,
    "persisted": false,
    "status": "skipped_state_required",
    "durationMs": 0,
    "message": "Pass state=QLD and sector=contractor to enable QBCC live exact lookup."
  }
}
Illustrative electrical field patterns
[
  {
    "state": "NSW",
    "licence_type": "Contractor",
    "licence_classes": [{ "class": "Electrician" }]
  },
  {
    "state": "ACT",
    "licence_type": "Electrician",
    "licence_classes": [{ "class": "Class 2 - Unrestricted" }]
  },
  {
    "state": "VIC",
    "licence_type": "Registered Electrical Contractor",
    "licence_classes": []
  },
  {
    "state": "WA",
    "licence_type": "Electrician",
    "licence_classes": []
  },
  {
    "state": "SA",
    "licence_type": "PGE",
    "licence_classes": [{ "class": "PGE" }]
  },
  {
    "state": "TAS",
    "licence_type": "Electrical / Electrician",
    "licence_classes": [{ "class": "Practitioner" }]
  }
]
Search by name
curl -X GET "https://www.workclear.com.au/api/v1/search?q=Demo%20Property&state=QLD&type=name&sector=real_estate&limit=5" \
  -H "x-api-key: wc_live_your_api_key_here"
200 OK
{
  "count": 3,
  "results": [
    {
      "state": "QLD",
      "licence_number": "QLD-DEMO-54898",
      "licensee_name": "Demo Plumbing Services Pty Ltd",
      "abn": "00 000 000 000",
      "licence_type": "Business",
      "licence_classes": [{ "class": "Plumbing and Drainage" }],
      "expiry_date": null
    },
    {
      "state": "NSW",
      "licence_number": "NSW-DEMO-123456C",
      "licensee_name": "Harbour Electrical Group Pty Ltd",
      "abn": "11 111 111 111",
      "licence_type": "Business",
      "licence_classes": [{ "class": "Electrician" }],
      "expiry_date": "2027-03-15"
    }
  ]
}
Bulk verify QLD security licences
curl -X POST "https://www.workclear.com.au/api/verify/bulk" \
  -H "x-api-key: wc_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "sector": "security",
    "state": "QLD",
    "licences": ["10022"]
  }'
200 OK
{
  "summary": {
    "total": 1,
    "found": 1,
    "not_found": 0,
    "errors": 0,
    "processing_time_ms": 182
  },
  "results": [
    {
      "licence_number": "10022",
      "status": "found",
      "data": {
        "status": "active",
        "sector": "security",
        "state": "QLD",
        "licence_number": "10022",
        "licensee_name": "Published security licence holder",
        "licence_type": "Security Provider",
        "source": "Queensland Office of Fair Trading Security Providers Register"
      }
    }
  ]
}
Get coverage
curl -X GET "https://www.workclear.com.au/api/v1/coverage" \
  -H "x-api-key: wc_live_your_api_key_here"
200 OK
{
  "total_records": 1034571,
  "states_covered": 8,
  "states": [
    {
      "state": "ACT",
      "source": "ACT Construction Occupations Registrar",
      "source_url": "https://...",
      "records": 23401,
      "last_updated": "YYYY-MM-DD",
      "data_as_of": "YYYY-MM-DD",
      "notes": null
    },
    {
      "state": "NSW",
      "source": "NSW Fair Trading",
      "records": 356990,
      "last_updated": "YYYY-MM-DD"
    },
    ...
  ]
}
Service health check
curl -X GET "https://www.workclear.com.au/api/health"
200 OK
{
  "status": "ok"
}
System health check
curl -X GET "https://www.workclear.com.au/api/status"
200 OK
{
  "status": "operational",
  "badge": { "label": "Operational", "color": "green" },
  "timestamp": "2026-05-28T12:00:00.000Z",
  "policyVersion": "2026-05-28",
  "summary": {
    "monitoredStates": 8,
    "operationalStates": 8,
    "degradedStates": 0,
    "totalRecords": 1034571
  },
  "states": [
    {
      "state": "SA",
      "health": "operational",
      "records": 35056,
      "lastUpdated": "YYYY-MM-DDTHH:mm:ss.sssZ"
    },
    {
      "state": "QLD",
      "health": "operational",
      "records": 120778,
      "lastUpdated": "YYYY-MM-DDTHH:mm:ss.sssZ",
      "note": "Queensland electrical worker-only checks are not live yet; QBCC contractor, real-estate, and QLD security coverage are separate."
    }
  ]
}
Quick status check
curl -X GET "https://www.workclear.com.au/api/v1/status?licence_number=QLD-DEMO-54898&state=QLD" \
  -H "x-api-key: wc_live_your_api_key_here"
200 OK — Licence found & valid
{
  "licence_number": "QLD-DEMO-54898",
  "licensee_name": "Demo Plumbing Services Pty Ltd",
  "state": "QLD",
  "found": true,
  "is_valid": true,
  "status": "Current",
  "expiry_date": null
}
200 OK — Licence not found
{
  "licence_number": "INVALID123",
  "state": "all",
  "found": false,
  "is_valid": false,
  "message": "No licence found"
}
429 Too Many Requests
{
  "error": "Rate limit exceeded"
}
workclear_client.py
import requests

class WorkClearClient:
    def __init__(self, api_key: str):
        self.api_key = api_key
        self.base_url = "https://www.workclear.com.au/api/v1"
        self.headers = {"x-api-key": api_key}

    def verify(self, licence_number: str, state: str = None):
        params = {"licence_number": licence_number}
        if state:
            params["state"] = state
        r = requests.get(f"{self.base_url}/verify", params=params, headers=self.headers)
        r.raise_for_status()
        return r.json()

    def search(self, query: str, state: str = None, limit: int = 10):
        params = {"q": query, "limit": limit}
        if state:
            params["state"] = state
        r = requests.get(f"{self.base_url}/search", params=params, headers=self.headers)
        r.raise_for_status()
        return r.json()

    def coverage(self):
        r = requests.get(f"{self.base_url}/coverage", headers=self.headers)
        r.raise_for_status()
        return r.json()

# Usage
client = WorkClearClient("wc_live_your_api_key_here")
result = client.verify("QLD-DEMO-54898", state="QLD")
print(result)
workclear-client.js
class WorkClearClient {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.baseUrl = "https://www.workclear.com.au/api/v1";
  }

  async #request(endpoint, params = {}) {
    const url = new URL(`${this.baseUrl}${endpoint}`);
    Object.entries(params).forEach(([k, v]) => {
      if (v !== undefined && v !== null) url.searchParams.set(k, String(v));
    });
    const res = await fetch(url, {
      headers: { "x-api-key": this.apiKey }
    });
    if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
    return res.json();
  }

  verify(licenceNumber, state) {
    return this.#request("/verify", { licence_number: licenceNumber, state });
  }

  search(query, { state, limit } = {}) {
    return this.#request("/search", { q: query, state, limit });
  }

  coverage() {
    return this.#request("/coverage");
  }
}

// Usage
const client = new WorkClearClient("wc_live_your_api_key_here");
const result = await client.verify("QLD-DEMO-54898", "QLD");
console.log(result);