Free lookups, extracts and orders
How asicapi charges for ASIC data: free company and people lookups, purchased company and person extracts you read for free, and asynchronous document orders.
ASIC sells its register in units. A company search is free, but the directors, registered office, share capital and members of a company only exist inside a company extract, which ASIC produces on request for a statutory fee. A person's directorships live in a person extract, a lodged form arrives as an image order, and so on. asicapi keeps those units visible instead of hiding them behind individual endpoints: you look things up for free, you purchase an extract with an explicit POST and receive it in the same response, and from then on you read any part of it as often as you like at no cost. Image based products are ordered and collected when ASIC has produced them. Every response tells you in meta.billable and meta.product whether it cost anything, so a fee can never appear on your invoice that you did not see in a response.
The three tiers
| Tier | How you call it | HTTP status | meta.billable | Where the data comes from |
|---|---|---|---|---|
| Free lookups | GET | 200 | false | ASIC's indexes, the identity record of a company, and anything you already hold |
| Purchased extracts | POST to an extracts endpoint | 201 | true | ASIC produces the extract during the request and asicapi stores it for 12 months |
| Orders | POST to an orders endpoint | 202 | true | ASIC retrieves images or runs a batch search after the request; you collect the result |
Only the POST requests in the second and third tiers incur an ASIC fee. No GET request ever does, including the section endpoints such as office holders, which read from the extract you hold rather than buying a new one.
Tier 1: free lookups
| Endpoint | What it gives you | meta.product |
|---|---|---|
GET /v1/companies/search | Company, scheme and business name matches from ASIC's names index | null (name_search only when a state business names index charges for the search; see the note on waiverToken below) |
GET /v1/companies/{id} | Identity and status of a company: names, ACN and ABN, type, class and sub-class, status, registration and review dates, deregistration, state and place of registration, controlling jurisdiction, governance type, principal place locality, former names, scheme categories | null |
GET /v1/companies/{id}/documents | The company's document list, windowed and paginated | null |
GET /v1/documents/{documentNumber} | Details of one lodged document and its related parties | null |
GET /v1/business-names/{id} | Business name registration details | null |
GET /v1/people/search | People matching a name and date of birth range, with person ids you can buy extracts for | null |
GET /v1/registers, GET /v1/registers/{register}/entries | Register types and browse results by family name or number | null |
GET /v1/reference/..., GET /v1/identifiers/{value} | Code tables, the form schedule and ACN, ABN, ARBN and ARSN validation | null |
GET /v1/extracts/{id}, GET /v1/extracts, GET /v1/companies/{id}/extracts | Any extract you hold, and the list of extracts you hold | null |
Section endpoints (/officeholders, /addresses, /share-capital, /members, /charges, /external-administration, /annual-returns, /financial-reports, /relationships, GET /v1/people/{personId} and its sub-resources, GET /v1/registers/{register}/entries/{number}, GET /v1/weekly-summaries/{id}) | One section of the most recent extract you hold | null |
GET /v1/orders/{id}, GET /v1/orders, GET /v1/orders/{id}/download | Order status and the finished PDF | null |
State business names indexes are the one place a search can attract a fee. ASIC waives it when you go on to purchase the extract of a name from the results, so a search in a paying jurisdiction returns a waiverToken that you pass in the body of the extract purchase. Searches in jurisdiction ASIC, which is the default and covers every company, are always free.
Tier 2: purchased extracts
Each purchase is one synchronous POST. ASIC produces the extract while the request is open and the 201 Created response is the complete extract, with an id of the form ext_... that you can read back for 12 months.
| Endpoint | Body | meta.product | Extract kind |
|---|---|---|---|
POST /v1/companies/{id}/extracts | { "type": "current" } | company_extract_current | company |
POST /v1/companies/{id}/extracts | { "type": "historical" } | company_extract_historical | company |
POST /v1/companies/{id}/extracts | { "type": "relational" } | company_relationships | company |
POST /v1/people/extracts | { "searchId": "psr_...", "personIds": ["prs_..."], "history": false, "includeShareholdings": false } | person_extract, once per person | person |
POST /v1/registers/{register}/entries/{number}/extracts | { "history": false } | register_extract | register |
POST /v1/weekly-summaries | { "type": "new-registrations", "weekStarting": "2026-08-24" } | weekly_summary | weeklySummary |
Current and historical company extracts accept an optional documents object ({ "years": 5, "limit": 200 }) that controls how much of the document list is embedded in the extract, and an optional waiverToken from a paid state search. Company extracts exist for proprietary and public companies, registered bodies, foreign companies and, for current and historical only, managed investment schemes; other organisation types return 422 extract_unavailable_for_type. Buying the same weekly summary twice returns the copy you already hold with the same id and no second fee, unless you send "refresh": true.
Tier 3: orders
Orders are for products ASIC produces from images or batch jobs. The POST returns 202 Accepted with an order (or offlineSearch) object in status pending, and the fee is incurred at that moment. Nothing further is charged when you poll or download.
| Endpoint | What ASIC produces | meta.product |
|---|---|---|
POST /v1/documents/{documentNumber}/image-orders | A PDF of one lodged form, with any supplementary documents at no extra charge | document_image |
POST /v1/documents/image-orders | PDFs of several documents in one order | document_image, once per document |
POST /v1/companies/{id}/charges/extract-orders | An image based extract of a company's satisfied charges | charges_extract |
POST /v1/companies/search/offline | A full name search with no 100-name cap, delivered as a list | name_search |
Failed orders are not billed. An order that ASIC could not fulfil moves to failed and the order.failed webhook carries the reason.
Buying and reading a company extract
Purchase the extract
Decide which extract you need. current covers the records in force today. historical adds ceased office holders, former addresses, former share classes and members, satisfied charges, annual return history and financial report history. relational is a different product altogether: the roles, licences and shareholdings the company holds in other organisations. Send an Idempotency-Key so a retried request cannot buy two extracts.
curl -X POST https://api.asicapi.dev/v1/companies/004085616/extracts \
-H "Authorization: Bearer $ASICAPI_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 9d2f4c6e-8a1b-4d3e-b5f7-0c2a4e6d8b1f" \
-d '{ "type": "current" }'{
"object": "extract",
"id": "ext_01J9AB3K7Q2XM4",
"kind": "company",
"type": "current",
"subject": {
"acn": "004085616",
"formatted": "004 085 616",
"numberType": { "code": "ACN", "label": "Australian Company Number" },
"name": "ACME WIDGETS PTY LTD",
"type": { "code": "APTY", "label": "Australian Proprietary Company" },
"status": { "code": "REGD", "label": "Registered" },
"abn": "53004085616",
"registeredCharity": false
},
"purchasedAt": "2026-09-04T03:12:44Z",
"asOf": "2026-09-04T03:12:41Z",
"expiresAt": "2027-09-04T03:12:44Z",
"disclaimer": "This extract contains information derived from the Australian Securities and Investments Commission's (ASIC) database under section 1274A of the Corporations Act 2001. Please advise ASIC of any error which you may identify.",
"company": {
"object": "company",
"id": "004085616",
"acn": "004085616",
"formatted": "004 085 616",
"numberType": { "code": "ACN", "label": "Australian Company Number" },
"abn": "53004085616",
"name": "ACME WIDGETS PTY LTD",
"nameStartDate": "2004-03-12",
"type": { "code": "APTY", "label": "Australian Proprietary Company" },
"class": { "code": "LMSH", "label": "Limited By Shares" },
"subClass": { "code": "PROP", "label": "Proprietary Company" },
"status": { "code": "REGD", "label": "Registered" },
"registrationDate": "1948-07-06",
"reviewDate": "2026-07-06",
"deregistration": null,
"stateOfRegistration": { "code": "VIC", "label": "Victoria" },
"placeOfRegistration": "VICTORIA",
"previousStateNumber": "C0123456X",
"controllingJurisdiction": { "code": "ASIC", "label": "Australian Securities and Investments Commission" },
"governanceType": null,
"disclosingEntity": false,
"registeredCharity": false,
"principalPlace": { "locality": "MELBOURNE", "state": "VIC", "postcode": "3000" },
"formerNames": [
{ "name": "ACME WIDGET COMPANY PTY LTD", "from": "1948-07-06", "to": "2004-03-12", "sourceDocument": { "documentNumber": "0E1122334", "qualifier": null } }
],
"schemeCategories": [],
"satisfiedChargesExtractSize": "small"
},
"officeholders": [
{
"object": "officeholder",
"role": { "code": "DR", "label": "Director" },
"status": { "code": "C", "label": "Current" },
"appointedAt": "2015-02-01",
"ceasedAt": null,
"party": {
"type": "person",
"person": { "familyName": "SMITH", "givenNames": ["JANE", "LOUISE"], "formatted": "JANE LOUISE SMITH" },
"birth": { "date": "1975-04-03", "locality": "MELBOURNE", "stateOrCountry": "VIC" },
"organisation": null
},
"address": { "careOf": null, "line1": null, "street": "8 WATTLE COURT", "locality": "KEW", "state": "VIC", "postcode": "3101", "country": "AUSTRALIA" },
"sourceDocument": { "documentNumber": "0E5123456", "qualifier": null },
"cessationDocuments": [],
"court": null
}
],
"addresses": [
{
"object": "address",
"type": { "code": "RG", "label": "Registered Office" },
"status": { "code": "C", "label": "Current" },
"from": "2018-01-15",
"to": null,
"address": { "careOf": null, "line1": "LEVEL 3", "street": "12 EXAMPLE STREET", "locality": "MELBOURNE", "state": "VIC", "postcode": "3000", "country": "AUSTRALIA" },
"sourceDocument": { "documentNumber": "0E4987654", "qualifier": null }
}
],
"shareCapital": [
{ "object": "shareClass", "classCode": "ORD", "classTitle": "ORDINARY", "status": { "code": "C", "label": "Current" }, "sharesIssued": 1000, "amountPaid": "1000.00", "amountDue": "0.00", "sourceDocument": { "documentNumber": "0E5123456", "qualifier": null } }
],
"members": [
{
"object": "shareholding",
"classCode": "ORD",
"numberHeld": 1000,
"beneficiallyOwned": true,
"fullyPaid": true,
"status": { "code": "C", "label": "Current" },
"jointHolding": false,
"holders": [
{
"party": { "type": "person", "person": { "familyName": "SMITH", "givenNames": ["JANE", "LOUISE"], "formatted": "JANE LOUISE SMITH" }, "birth": null, "organisation": null },
"address": { "careOf": null, "line1": null, "street": "8 WATTLE COURT", "locality": "KEW", "state": "VIC", "postcode": "3101", "country": "AUSTRALIA" }
}
],
"sourceDocument": { "documentNumber": "0E5123456", "qualifier": null }
}
],
"externalAdministration": null,
"charges": null,
"documents": {
"data": [
{ "object": "document", "documentNumber": "0E5123456", "formCode": "484", "formDescription": "Change to company details", "subForms": [{ "code": "484E", "description": "Change to members register" }], "receivedAt": "2024-05-01", "processedAt": "2024-05-03", "effectiveAt": "2024-04-30", "qualifier": null, "pageCount": 4, "imaged": true, "underRequisition": false, "xbrlAvailable": false, "xbrlDocumentNumber": null, "status": null, "priced": true }
],
"preAsicDocuments": [],
"hasMore": true
},
"annualReturns": null,
"financialReports": null,
"contactAddress": null,
"meta": { "billable": true, "product": "company_extract_current", "requestId": "req_01J9AB3K7Q2XM4" }
}The response is the whole extract. Store id if you want to refer to exactly this snapshot later; GET /v1/extracts/ext_01J9AB3K7Q2XM4 returns the same document for free at any time in the next 12 months. The company extracts concept page walks through every section.
Read sections for free
The section endpoints read from the most recent extract you hold that contains the section, so the same office holder list is available at its own path without a second purchase. Every section response carries an extract reference telling you which purchase it came from, and meta.billable is false.
curl "https://api.asicapi.dev/v1/companies/004085616/officeholders?status=current" \
-H "Authorization: Bearer $ASICAPI_KEY"{
"object": "list",
"data": [
{
"object": "officeholder",
"role": { "code": "DR", "label": "Director" },
"status": { "code": "C", "label": "Current" },
"appointedAt": "2015-02-01",
"ceasedAt": null,
"party": {
"type": "person",
"person": { "familyName": "SMITH", "givenNames": ["JANE", "LOUISE"], "formatted": "JANE LOUISE SMITH" },
"birth": { "date": "1975-04-03", "locality": "MELBOURNE", "stateOrCountry": "VIC" },
"organisation": null
},
"address": { "careOf": null, "line1": null, "street": "8 WATTLE COURT", "locality": "KEW", "state": "VIC", "postcode": "3101", "country": "AUSTRALIA" },
"sourceDocument": { "documentNumber": "0E5123456", "qualifier": null },
"cessationDocuments": [],
"court": null
}
],
"hasMore": false,
"nextCursor": null,
"totalCount": null,
"extract": { "id": "ext_01J9AB3K7Q2XM4", "type": "current", "purchasedAt": "2026-09-04T03:12:44Z", "asOf": "2026-09-04T03:12:41Z" },
"meta": { "billable": false, "product": null, "requestId": "req_01J9AB4M8R3YN5" }
}To read from a specific purchase rather than the latest, pass its id as the extract query parameter: GET /v1/companies/004085616/officeholders?extract=ext_01J9AB3K7Q2XM4. That is how you compare two snapshots of the same company, or pin a report to the extract that was current when you wrote it.
Handle 402 when you hold no extract
If you call a section endpoint for a company you have not bought an extract for, or your extract has expired, the response is 402 Payment Required with code extract_required. The error tells you exactly what to buy: details.purchase is the request that would satisfy the call.
curl https://api.asicapi.dev/v1/companies/004249987/officeholders \
-H "Authorization: Bearer $ASICAPI_KEY"{
"error": {
"type": "extract_required_error",
"code": "extract_required",
"message": "Office holders are part of a company extract. Purchase one with POST /v1/companies/004249987/extracts.",
"param": null,
"asicCode": null,
"requestId": "req_01J9AB5N9S4ZP6",
"docUrl": "https://asicapi.dev/docs/errors#extract_required",
"details": {
"purchase": {
"method": "POST",
"path": "/v1/companies/004249987/extracts",
"body": { "type": "current" },
"product": "company_extract_current"
}
}
}
}A client can treat this generically: on extract_required, submit details.purchase (after whatever approval your application requires for spending) and retry the original request. asicapi never performs that purchase on your behalf.
Refresh when you need newer data
An extract is a snapshot as at asOf. Nothing you do with the section endpoints changes it; a director appointed after asOf will not appear until you purchase again. A new purchase creates a new extract with its own id and its own fee, and becomes the extract the section endpoints read from. The older one stays readable by id until it expires.
curl -X POST https://api.asicapi.dev/v1/companies/004085616/extracts \
-H "Authorization: Bearer $ASICAPI_KEY" \
-H "Content-Type: application/json" \
-d '{ "type": "current" }'To decide whether a refresh is worth paying for, compare the newest documentNumber in the free document list (GET /v1/companies/{id}/documents?limit=1) with the one embedded in your extract; if nothing new has been processed, the extract you hold is still what ASIC would send you. GET /v1/companies/{id}/extracts lists every extract you hold for a company with its type, asOf and expiresAt.
Current versus historical
The extract type is fixed at purchase time. Section endpoints can only serve what is inside the extract you hold, so a request for records that exist only in a historical extract returns the same 402 extract_required with "body": { "type": "historical" } and a message explaining that a historical extract is needed, even if you hold a current one.
| Request | Extract that satisfies it |
|---|---|
/officeholders, /addresses, /share-capital, /members with status=current (the default) | Current or historical |
The same endpoints with status=former or status=all | Historical only |
/charges, /annual-returns, /financial-reports | Historical only |
/external-administration | Current or historical |
/relationships | Relational only |
If you hold both a current and a historical extract, a request for current records reads from whichever is more recent, and a request for ceased records reads from the most recent historical extract. Pass extract to choose explicitly.
Ordering a document image
Image orders follow a different rhythm because ASIC retrieves pages from its imaging system rather than answering inline. The same sequence applies to charges extract orders and offline searches; only the endpoints and the shape of the result differ.
Place the order
curl -X POST https://api.asicapi.dev/v1/documents/0E5123456/image-orders \
-H "Authorization: Bearer $ASICAPI_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6c1f9a2e-3b44-4d0f-9d8e-1a2b3c4d5e6f" \
-d '{ "delivery": { "method": "web" } }'{
"object": "order",
"id": "ord_01J8ZK6M4R9S2T",
"type": "document_image",
"status": "pending",
"documents": [
{ "object": "document", "documentNumber": "0E5123456", "formCode": "484", "formDescription": "Change to company details", "subForms": [{ "code": "484E", "description": "Change to members register" }], "receivedAt": "2024-05-01", "processedAt": "2024-05-03", "effectiveAt": "2024-04-30", "qualifier": null, "pageCount": 4, "imaged": true, "underRequisition": false, "xbrlAvailable": false, "xbrlDocumentNumber": null, "status": null, "priced": true }
],
"delivery": { "method": "web", "email": null },
"downloadUrl": null,
"asicRequestIds": [],
"createdAt": "2026-09-04T01:12:08Z",
"readyAt": null,
"meta": { "billable": true, "product": "document_image", "requestId": "req_01J8ZK6M5U1V3W" }
}The fee is incurred here, on acceptance. Check imaged on the document first; a document ASIC has not imaged returns 422 document_not_imaged and nothing is charged.
Wait for it to become ready
Either poll GET /v1/orders/{id} every few seconds, or configure the order.ready webhook and do nothing until it arrives. Polling is free but counts against your rate limit.
curl https://api.asicapi.dev/v1/orders/ord_01J8ZK6M4R9S2T \
-H "Authorization: Bearer $ASICAPI_KEY"{
"object": "order",
"id": "ord_01J8ZK6M4R9S2T",
"type": "document_image",
"status": "ready",
"documents": [
{ "object": "document", "documentNumber": "0E5123456", "formCode": "484", "formDescription": "Change to company details", "subForms": [{ "code": "484E", "description": "Change to members register" }], "receivedAt": "2024-05-01", "processedAt": "2024-05-03", "effectiveAt": "2024-04-30", "qualifier": null, "pageCount": 4, "imaged": true, "underRequisition": false, "xbrlAvailable": false, "xbrlDocumentNumber": null, "status": null, "priced": true }
],
"delivery": { "method": "web", "email": null },
"downloadUrl": "https://api.asicapi.dev/v1/orders/ord_01J8ZK6M4R9S2T/download",
"asicRequestIds": ["000114747"],
"createdAt": "2026-09-04T01:12:08Z",
"readyAt": "2026-09-04T01:12:41Z",
"meta": { "billable": false, "product": null, "requestId": "req_01J8ZK7C8X4Y9Z" }
}Download the PDF
curl -L -o 0E5123456.pdf https://api.asicapi.dev/v1/orders/ord_01J8ZK6M4R9S2T/download \
-H "Authorization: Bearer $ASICAPI_KEY"The download is free and can be repeated until the link expires seven days after readyAt. Store the PDF; a processed document never changes, so there is no reason to order it twice.
Order states
status | Meaning | Billed? |
|---|---|---|
pending | Accepted by asicapi and queued for ASIC | Yes, at acceptance |
processing | ASIC is retrieving the images or running the batch search | Yes |
ready | Web delivery: the PDF or result list is available at downloadUrl | Yes |
delivered | Email or post delivery: ASIC has dispatched the result | Yes |
failed | ASIC could not fulfil the order. failure explains why | No |
Retention
| What | Kept for | After that |
|---|---|---|
Extracts (ext_...) | 12 months from purchasedAt; the exact moment is expiresAt | GET /v1/extracts/{id} returns 410 extract_expired and section endpoints return 402 extract_required |
| Order downloads | 7 days from readyAt | 410 order_download_expired; place a new order |
| Order records | Indefinitely, in GET /v1/orders | Status and metadata remain, the download does not |
People search ids (prs_...) | 30 days from the search | 410 search_expired; run the search again before purchasing |
ASIC's own terms require brokers to serve extracts from data that is current at the time of the request, which is why an expired extract is not silently refreshed. If you need a company on file continuously, purchase on a schedule that suits the risk, or watch the free document list for changes and purchase only when something has been lodged.
Reconciling meta.product with your ASIC fees
Every purchase and order response carries meta.product, and the same product string appears on the matching line of your monthly invoice together with the requestId and the X-Client-Reference header you sent. Fees are the statutory amounts set under the Corporations (Fees) Regulations for the corresponding ASIC product, passed through at cost, so the simplest reconciliation is to log meta.product, meta.requestId and your client reference from every response where meta.billable is true and match them against the invoice.
meta.product | ASIC product behind it | Counted per |
|---|---|---|
company_extract_current | Current company extract | Purchase |
company_extract_historical | Historical company extract | Purchase |
company_relationships | Relational extract | Purchase |
person_extract | Personal name extract | Person in the purchase |
register_extract | Professional register, authorised representative or banned person extract | Purchase |
weekly_summary | Weekly summary | Type and week, first purchase only |
document_image | Document image | Document in the order |
charges_extract | Charges extract (image) | Order |
name_search | Business name search in a paying state jurisdiction, or an offline name search | Search |
Three rules keep the numbers matching. A 201 or 202 response is a fee; a 4xx or 5xx response is never a fee, including 402 extract_required. A retried POST with the same Idempotency-Key returns the original response and is not billed again. Reads are free without exception, so however many times a section endpoint, GET /v1/extracts/{id} or a download URL is called, no line is added.
Sandbox behaviour
Test keys go through the same three tiers, so your code paths are identical in development and production. A purchase with a test key returns 201 with a real extract id, meta.billable is false, and the extract is stored and readable for 12 months like any other, with the placeholder names described on the sandbox page. Section endpoints return 402 extract_required in the sandbox exactly as they do live, which makes it easy to test the buy-then-read flow end to end. Orders return 202 and progress to ready within a few seconds for documents of company 009 136 109; other documents fail with document_not_imaged.
Related
Purchase a company extract
POST /v1/companies/{id}/extracts: body, products and the full extract response.
Company extracts explained
What a current, historical and relational extract each contain.
Office holders
A section endpoint that reads from the extract you hold.
Person extracts
Buy up to 100 person extracts from a people search in one request.
Document image orders
Order a PDF of a lodged form.
Orders
Poll, list and download orders.
Errors
extract_required and the other extract errors.
Webhooks
Be told when an order is ready instead of polling.
Authentication and API keys
Authenticate to the asicapi REST API with bearer API keys, understand live and test key prefixes, product scopes, jurisdictions and how to rotate keys safely.
Requests and responses
Learn the asicapi request headers, JSON conventions for ASIC data, the extract reference on section reads, the meta billing object and the versioning policy.