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.
https://www.workclear.com.au/apiTest coverage first
Use web search, JSON previews, and the status page to confirm the licence categories you need.
Try searchRun an API evaluation
Use one test key for 25 single-record requests over seven days, then choose a production plan.
Start API trialBuild server-side
Keep API keys out of client code and call WorkClear from your own backend service.
AuthenticationQuick Start
Get your first licence-verification response in under two minutes.
Create an account
Sign up at the API trial signup to evaluate 25 single-record requests over seven days. No card is required.
Get your API key
Generate a key from your dashboard. Test keys start with wc_test_ and production keys start with wc_live_.
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
| Prefix | Description |
|---|---|
| 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.
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.
Endpoint
/api/v1/verify
Mode
Response preview
{
"status": "active",
"state": "QLD",
"licence_number": "15427909",
"valid_currently": true
}
state, sector, category where needed
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.
Licence: QLD-DEMO-54898
State: QLD
Class: Builder - Open
Expiry: 31 Jan 2028
Bulk CSV
Upload contractor lists and verify them in batches
CSV processing pipeline
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
/api/v1/verifyLook 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| licence_number | string | Required | The licence number to verify |
| state | string | Optional | State 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. |
| sector | string | Optional | "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. |
| category | string | Optional | Optional 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
| Field | Type | Description |
|---|---|---|
| status | string | "active", "expired", "inactive", "unknown", "source_absent", "multiple_matches", or "not_found" |
| state | string | Australian state code (QLD, NSW, VIC, etc.) |
| licence_number | string | The licence number |
| licensee_name | string | Name of the licence holder |
| abn | string | null | Australian Business Number |
| acn | string | null | Australian Company Number |
| business_address | string | null | Published business or register address, where available |
| licence_type | string | null | Source-published licence, instrument, or category label |
| financial_category | string | null | Financial category where published by the source |
| conditions | string | null | Overall licence conditions published by the source, where available |
| licence_classes | array | Authorised work classes or scopes, including source codes, status, dates, and class conditions where published |
| licence_details | object | Explicitly allowlisted source-specific licence type/subtype, scope, credential, compliance, permit, and register details |
| issue_date | string | null | Licence issue date (YYYY-MM-DD) |
| expiry_date | string | null | Licence expiry date (YYYY-MM-DD) |
| source | string | Data source (e.g. "QBCC Licensed Contractors Register") |
| valid_currently | boolean | False when expired, inactive, unknown, or absent from the latest source refresh |
| source_absent_at | string | null | When the record was first missing from a completed source refresh |
| live_lookup | object | undefined | Present when a source-specific live lookup was attempted, skipped, or unavailable |
| count | number | undefined | Number of records when status is "multiple_matches" |
| states | string[] | undefined | Matching states when status is "multiple_matches" |
| matches | array | undefined | Normalized 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
| State | Where the electrical signal usually appears |
|---|---|
| NSW | Usually in licence_classes, for example Electrician. |
| ACT | licence_type may be Electrician, while licence_classes gives the class or scope, for example Class 2 - Unrestricted. |
| VIC | Often in licence_type, for example Registered Electrical Contractor, Licensed Electrical Worker, or Licensed Electrical Inspector. |
| WA | Often in licence_type, for example Electrician or Electrician's Training Licence. |
| NT | Often in licence_type, including restricted, unrestricted, mechanic, and fitter wording. |
| TAS | Both fields can matter, for example an electrical type plus Practitioner or Contractor class. |
| SA | Current live SA coverage is active Consumer and Business Services PGE and Builder/BLD records; assess the returned type/class values and active status. |
| QLD electrical | Not 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
- Require
status = "active"andvalid_currently = true. - Evaluate both
licence_typeand everylicence_classes[].class. - Apply state-specific rules for accepted roles and scopes.
- Treat restricted, unrestricted, provisional, training, worker, and contractor labels according to your policy.
Search Licences
/api/v1/searchSearch 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| q | string | Required | Search query — name, holder name, or ABN depending on sector |
| state | string | Optional | Filter by state (QLD, NSW, VIC, SA, WA, ACT, NT, TAS) |
| type | string | Optional | "name", "abn", or "licence_type" (auto-detected if omitted) |
| sector | string | Optional | "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. |
| limit | integer | Optional | Max results to return (default: 10, max: 100) |
| include_absent | boolean | Optional | Set to "true" to include records absent from the latest source refresh. Hidden by default. |
Request
Response
Bulk Verify
/api/v1/verify/bulkVerify 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| licences | string[] | Required | Array of licence numbers to verify (max 100 per request) |
| state | string | Optional | Optional 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. |
| sector | string | Optional | "contractor" (default), "real_estate", or "security". |
| category | string | Optional | Optional 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
/api/v1/coverageReturns 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.
| State | Records | Source | Status |
|---|---|---|---|
| QLD | 120K+ | QBCC | Live |
| NSW | 358K+ | NSW Fair Trading | Live |
| VIC | 48K+ | VBA / ESV | Live |
| SA | 35K+ | CBS active PGE + Builder/BLD slices | Live |
| WA | 92K+ | WA Building Commission | Live |
| ACT | 23K+ | ACT Construction Occupations | Live |
| NT | 13K+ | NT Licensing | Live |
| TAS | 14K+ | CBOS Tasmania | Live |
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.
Health Check
/api/healthNo auth requiredMinimal service health endpoint. Use this for uptime probes and infrastructure monitoring. This is not a licence lookup endpoint.
Request
Response
System Status
/api/statusNo auth requiredPublic 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
/api/v1/statusQuick 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| licence_number | string | Required | The contractor licence number |
| state | string | Optional | State 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.
| Plan | API Calls | Price | Best For |
|---|---|---|---|
| Free | One-time 25-call API evaluation | $0 | Manual search and integration testing |
| Pro | 1,000 / month | $29/mo | Developers and small teams |
| Business | 10,000 / month | $99/mo | Production API use and dashboard bulk CSV |
| Scale | Custom volume | Custom | Custom API volume |
| Enterprise | By agreement | Custom | SLA, partner, reseller, or custom source terms |
Rate Limit Headers
When you exceed your rate limit, the API returns a 429 status with these headers:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Your monthly limit |
| X-RateLimit-Remaining | Remaining calls this month |
| Retry-After | Seconds 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.
| Code | Meaning | What to Do |
|---|---|---|
| 200 | Success | Request succeeded. Check the response body: "not_found" means no match, while "multiple_matches" means state is required to select one record. |
| 400 | Bad Request | Invalid or missing parameters. Check that licence_number is provided and state is a valid code. |
| 401 | Unauthorized | Missing or invalid API key. Verify your x-api-key header. |
| 429 | Rate Limited | You've hit your monthly limit. Upgrade your plan or wait for the next monthly reset. |
| 500 | Server Error | Something 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 schemaPython 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.