Full-text search
Search by company name or ACN, with filters for state, appointment type and notice type.
For developers
Search ASIC's published notices, watch a list of companies by ACN or ABN, and get a signed webhook when one enters liquidation, administration or restructuring.
Search by company name or ACN, with filters for state, appointment type and notice type.
Page through new notices with a since cursor that never misses a late-arriving one.
Get matches pushed to your endpoint, HMAC-signed, with automatic retries.
Send your key as an X-API-Key header, or as anapi_key query parameter when a header is awkward.
There are two kinds. A read-only key reaches the search endpoints. An account key, which looks likeask_... and is issued once when you subscribe, reaches those plus the watch and webhook routes. Store it when you see it; it is not shown again.
curl "https://api.insolvencyalerts.com.au/v1/notices?q=drifta" \
-H "X-API-Key: YOUR_API_KEY"GET /v1/notices takes a company name, an ACN, or filters like state and appointment type. Every request needs anX-API-Key header.
curl "https://api.insolvencyalerts.com.au/v1/notices?q=briagin" \
-H "X-API-Key: YOUR_API_KEY"{
"data": [
{
"id": "6ce624e8-038a-4c93-acd1-06ed9be1974d",
"company_name": "BRIAGIN PTY LIMITED",
"acn": "163753428",
"notice_title": "NOTICE OF APPLICATION FOR WINDING UP ORDER",
"notice_code": "465A(1)(c)",
"appointment_type": "Winding Up Application",
"state": "NSW",
"is_deregistration": false,
"published_date": "2026-09-17",
"source_url": "https://publishednotices.asic.gov.au/browsesearch-notices/notice-details/BRIAGIN-PTY-LIMITED-163753428/6ce624e8-038a-4c93-acd1-06ed9be1974d",
"seq": 4821
}
],
"meta": { "page": 1, "limit": 20, "total": 1 }
}POST /v1/match answers "which of these have notices?" and stores nothing. It takes up to 50,000 identifiers at a time, ACNs or ABNs, and resolves ABNs through ASIC's company register.
Deregistrations are hidden by default here and everywhere else: 88.7% of all notices collected are deregistrations, so counting them would report that almost every company in your book "has notices" when almost none are distressed. Opt in withinclude_deregistration when you actually want them.
{
"data": {
"checked": 2,
"matched": 1,
"matches": [{ "acn": "163753428", "notice_count": 3 }],
"unresolved": [],
"include_deregistration": false
}
}A watch needs identifiers, at least one filter, or both — one with neither would match every notice and is rejected. Identifiers that cannot be resolved come back in unresolved instead of being silently dropped, which matters because around 30% of notices are for companies outside the register.
Attach a webhook to the watch and matches are pushed to you. Add and remove identifiers as your book changes, without rebuilding the watch.
POST /v1/watches
{
"name": "debtor book",
"identifiers": ["163753428", "32613554233"],
"appointment_type": ["Court Liquidation"],
"include_deregistration": false
}
{
"id": "wch_...",
"name": "debtor book",
"acn_count": 2,
"unresolved": []
}Register an https:// endpoint on a watch and matching notices arrive as signed POST requests. Verify withX-ASIC-Signature, an HMAC-SHA256 of the raw body, and dedupe on X-ASIC-Delivery, which stays the same across retries.
Any 2xx acknowledges. A failure is retried five times with increasing delays; ten consecutive failures deactivate the watch, and reactivating it delivers what queued up meanwhile. When something looks wrong, GET /v1/watches/{id}/deliveries shows the status, attempt count and the last error your endpoint returned.
POST https://your-app.example/asic
X-ASIC-Signature: sha256=<hex>
X-ASIC-Delivery: dlv_...
Content-Type: application/json
{
"watch_id": "wch_...",
"delivered_at": "2026-09-23T01:15:00.000Z",
"notice": { "company_name": "BRIAGIN PTY LIMITED", "acn": "163753428", ... }
}Pass since with the highest seq you have seen. The response switches to ascending order and returns only higher seq values, so a notice that ASIC publishes late still reaches you rather than falling behind a date cursor.
Use meta.next_since for the next call. It advances past notices your filters excluded, not just the ones returned, so a filtered poll keeps making progress instead of stalling on a tail of rows it will never be shown.
curl "https://api.insolvencyalerts.com.au/v1/notices?since=4821" \
-H "X-API-Key: YOUR_API_KEY"
{
"data": [ ... ],
"meta": { "next_since": 4877 }
}Base URL https://api.insolvencyalerts.com.au. Full parameters and response shapes are in the docs.
| Method | Path | What it does | Key |
|---|---|---|---|
| GET | /v1/notices | Search notices. Filters, paging and cursor polling. | Any |
| GET | /v1/notices/{id} | One notice by id. | Any |
| GET | /v1/companies/{acn_or_abn} | Every notice for one company, with register data attached. | Any |
| GET | /v1/filters | Every filter value in the database, with counts. Build your dropdowns from it. | Any |
| GET | /v1/stats | Grouped counts by state, month, appointment type or notice code. | Any |
| POST | /v1/match | Screen a list of identifiers once, storing nothing. | Account |
| POST | /v1/watches | Create a watch from identifiers, filters, or both. | Account |
| GET | /v1/watches | List your watches. | Account |
| GET PATCH DELETE | /v1/watches/{id} | Read, update (active, name, alert_email) or delete a watch. | Account |
| POST DELETE | /v1/watches/{id}/acns | Add or remove identifiers on an existing watch. | Account |
| GET | /v1/watches/{id}/matches | Matching notices for a watch, paged like /v1/notices. | Account |
| POST DELETE | /v1/watches/{id}/webhook | Attach or remove a webhook endpoint. | Account |
| POST | /v1/watches/{id}/webhook/rotate | Roll the signing secret. | Account |
| GET | /v1/watches/{id}/deliveries | Delivery log: status, attempts and the last error your endpoint returned. | Account |
| GET | /health | Collector status. No key needed. | None |
Errors come back in one shape, with a stable code you can branch on rather than a message you have to parse.
| Status | Code | Means |
|---|---|---|
| 401 | unauthorised | No key, or a key that matches nothing. |
| 402 | subscription_inactive | The subscription lapsed. Reactivate it and access resumes. |
| 402 | quota_exceeded | The write would take you past your plan's company limit. Nothing is written. |
| 402 | watch_limit_reached | You already have as many watch lists as the plan allows. |
| 403 | account_required | A read-only key was used on a watch or webhook route. |
| 404 | not_found | Unknown route, or a watch that is not yours. |
| 405 | method_not_allowed | Right path, wrong verb. The message names the verb to use. |
{
"error": {
"code": "unauthorised",
"message": "Missing or invalid API key"
}
}Maximum limit on a page of notices. Usesince rather than deep page values to walk a large result set.
Identifiers accepted in a single /v1/match or watch request, so a whole debtor book goes in one call.
Companies under watch on Business, the largest plan. Quota is checked before anything is written, so a request that would exceed it changes nothing.
Every plan includes the full API, webhooks and complete notice history. The plans differ in how many companies you watch, not in what you can do. See the plans
Seven days free, then a plan sized to how many companies you're watching.