Skip to main content

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.1M licence records across building and trades, real-estate, and current security coverage.

API Use Cases

API use cases and coverage

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

Quick Start

Get your first licence-verification response in under two minutes.

1

Create an account

Sign up at the API trial signup to evaluate 25 single-record requests over seven days. No card is required.

2

Get your API key

Generate a key from your dashboard. Test keys start with wc_test_ and production 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 its trial or production-plan quota

Unauthenticated Endpoints

The following endpoints do not require an API key:

  • GET /api/status— System health check

Dashboard

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.

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, system, or database process.


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. If an unscoped number matches more than one record, the response returns multiple_matches instead of selecting one silently. 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. If omitted, one unique match is returned normally and ambiguous numbers return multiple_matches. 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, or "owner_builder" for NSW Owner Builder Permit 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 Category Examples

NSW Design and Building Practitioners and NSW Owner Builder Permit records share state=NSW and sector=contractor, so they are opt-in through category=designer, category=nsw_dbp, or category=owner_builder. Ordinary NSW contractor checks do not return these specialised rows unless the category is provided.

State Scope and Live Fallbacks

Licence numbers are not globally unique across Australian registers. For broad discovery you can omit state; WorkClear returns multiple_matches when more than one visible record shares the number. Production exact checks should pass both sector and state whenever known. 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", "multiple_matches", 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
conditionsstring | nullOverall licence conditions published by the source, where available
licence_classesarrayAuthorised work classes or scopes, including source codes, status, dates, and class conditions where published
licence_detailsobjectExplicitly allowlisted source-specific licence type/subtype, scope, credential, compliance, permit, and register details
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
countnumber | undefinedNumber of records when status is "multiple_matches"
statesstring[] | undefinedMatching states when status is "multiple_matches"
matchesarray | undefinedNormalized matching records when status is "multiple_matches"

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_type as 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.

Source-Specific Licence Details

The licence_details object preserves material regulator-specific facts that do not fit the national baseline. Depending on the source, this can include type and subtype codes, term, area, register classification, endorsements, restrictions, limitations, credential and automatic deemed registration flags, compliance summaries, permit work sites, and the source publication date.

The object is always present and may be empty. WorkClear does not return raw source payloads, internal source IDs, scraper or reconciliation metadata, contact details, or geographic coordinates.

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 supported in public WorkClear verification. QLD building/trades, real-estate, and security 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/v1/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. An unscoped ambiguous item is returned with status multiple_matches.

The legacy /api/verify/bulk path remains available for existing integrations.

Parameters

ParameterTypeRequiredDescription
licencesstring[]RequiredArray of licence numbers to verify (max 100 per request)
statestringOptionalOptional state filter. Ambiguous unscoped numbers return multiple_matches. 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, or "owner_builder" for NSW Owner Builder Permit records.

Request

Response


Data Coverage

GET/api/v1/coverage

Returns the product-safe source-family coverage contract for a sector, while retaining the original state, source, record-count, and freshness fields for compatibility.

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
NSW358K+NSW Fair TradingLive
VIC48K+VBA / ESVLive
SA35K+CBS active PGE + Builder/BLD slicesLive
WA92K+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 current 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. If state is omitted and more than one record matches, the response returnsmultiple_matches with is_valid: null.

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 a single deterministic result; ambiguous unscoped numbers return multiple_matches.

Request

Response


API Usage

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

Included in standard API plans

  • Use licence checks inside your own product or internal system.
  • Show verification results to your own users or customers as part of your normal service.
  • Store results for reasonable 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 product, widget, or data service.
  • Bulk redistributing results or building a substitute licence database from API output.
  • Formal SLA, procurement, or custom source onboarding commitments.

If your platform needs Scale, Enterprise, partner, reseller, white-label, SLA, or custom source terms, 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 included for validating source coverage before integration, with anti-abuse limits.

PlanAPI CallsPriceBest For
FreeOne-time 25-call API evaluation$0Manual search and integration testing
Pro1,000 / month$29/moDevelopers and small teams
Business10,000 / month$99/moProduction API use and dashboard bulk CSV
ScaleCustom volumeCustomCustom API volume
EnterpriseBy agreementCustomSLA, partner, reseller, or custom source terms

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 Scale or Enterprise pricing.


Error Codes

The API uses standard HTTP status codes. Versioned errors retain the human-readable error field and add a stable code plus request_id. The same request ID is returned in the X-Request-ID header.

CodeMeaningWhat to Do
200SuccessRequest succeeded. Check the response body: "not_found" means no match, while "multiple_matches" means state is required to select one record.
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


OpenAPI Schema

Use the OpenAPI 3.1 JSON contract to inspect endpoints, generate typed clients, or validate integration requests and responses.

Open the API schema

Python Integration

Use the standard requests library 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 fetch support. 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

Under evaluation

WorkClear is validating which licence changes, exception states, evidence, and delivery guarantees customers need before defining a webhook contract.

Share the workflow and event semantics your integration requires. Contact WorkClear

Ready to use the API?

Start with 25 API test requests over seven days. Choose Pro for a production key or Business for higher volume and dashboard bulk CSV.