asicapidocs

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

TierHow you call itHTTP statusmeta.billableWhere the data comes from
Free lookupsGET200falseASIC's indexes, the identity record of a company, and anything you already hold
Purchased extractsPOST to an extracts endpoint201trueASIC produces the extract during the request and asicapi stores it for 12 months
OrdersPOST to an orders endpoint202trueASIC 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

EndpointWhat it gives youmeta.product
GET /v1/companies/searchCompany, scheme and business name matches from ASIC's names indexnull (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 categoriesnull
GET /v1/companies/{id}/documentsThe company's document list, windowed and paginatednull
GET /v1/documents/{documentNumber}Details of one lodged document and its related partiesnull
GET /v1/business-names/{id}Business name registration detailsnull
GET /v1/people/searchPeople matching a name and date of birth range, with person ids you can buy extracts fornull
GET /v1/registers, GET /v1/registers/{register}/entriesRegister types and browse results by family name or numbernull
GET /v1/reference/..., GET /v1/identifiers/{value}Code tables, the form schedule and ACN, ABN, ARBN and ARSN validationnull
GET /v1/extracts/{id}, GET /v1/extracts, GET /v1/companies/{id}/extractsAny extract you hold, and the list of extracts you holdnull
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 holdnull
GET /v1/orders/{id}, GET /v1/orders, GET /v1/orders/{id}/downloadOrder status and the finished PDFnull

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.

EndpointBodymeta.productExtract kind
POST /v1/companies/{id}/extracts{ "type": "current" }company_extract_currentcompany
POST /v1/companies/{id}/extracts{ "type": "historical" }company_extract_historicalcompany
POST /v1/companies/{id}/extracts{ "type": "relational" }company_relationshipscompany
POST /v1/people/extracts{ "searchId": "psr_...", "personIds": ["prs_..."], "history": false, "includeShareholdings": false }person_extract, once per personperson
POST /v1/registers/{register}/entries/{number}/extracts{ "history": false }register_extractregister
POST /v1/weekly-summaries{ "type": "new-registrations", "weekStarting": "2026-08-24" }weekly_summaryweeklySummary

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.

EndpointWhat ASIC producesmeta.product
POST /v1/documents/{documentNumber}/image-ordersA PDF of one lodged form, with any supplementary documents at no extra chargedocument_image
POST /v1/documents/image-ordersPDFs of several documents in one orderdocument_image, once per document
POST /v1/companies/{id}/charges/extract-ordersAn image based extract of a company's satisfied chargescharges_extract
POST /v1/companies/search/offlineA full name search with no 100-name cap, delivered as a listname_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.

Request
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" }'
Response (201 Created)
{
  "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.

Request
curl "https://api.asicapi.dev/v1/companies/004085616/officeholders?status=current" \
  -H "Authorization: Bearer $ASICAPI_KEY"
Response
{
  "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.

Request
curl https://api.asicapi.dev/v1/companies/004249987/officeholders \
  -H "Authorization: Bearer $ASICAPI_KEY"
Response (402 Payment Required)
{
  "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.

Request
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.

RequestExtract that satisfies it
/officeholders, /addresses, /share-capital, /members with status=current (the default)Current or historical
The same endpoints with status=former or status=allHistorical only
/charges, /annual-returns, /financial-reportsHistorical only
/external-administrationCurrent or historical
/relationshipsRelational 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

Request
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" } }'
Response (202 Accepted)
{
  "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.

Request
curl https://api.asicapi.dev/v1/orders/ord_01J8ZK6M4R9S2T \
  -H "Authorization: Bearer $ASICAPI_KEY"
Response
{
  "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

Request
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

statusMeaningBilled?
pendingAccepted by asicapi and queued for ASICYes, at acceptance
processingASIC is retrieving the images or running the batch searchYes
readyWeb delivery: the PDF or result list is available at downloadUrlYes
deliveredEmail or post delivery: ASIC has dispatched the resultYes
failedASIC could not fulfil the order. failure explains whyNo

Retention

WhatKept forAfter that
Extracts (ext_...)12 months from purchasedAt; the exact moment is expiresAtGET /v1/extracts/{id} returns 410 extract_expired and section endpoints return 402 extract_required
Order downloads7 days from readyAt410 order_download_expired; place a new order
Order recordsIndefinitely, in GET /v1/ordersStatus and metadata remain, the download does not
People search ids (prs_...)30 days from the search410 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.productASIC product behind itCounted per
company_extract_currentCurrent company extractPurchase
company_extract_historicalHistorical company extractPurchase
company_relationshipsRelational extractPurchase
person_extractPersonal name extractPerson in the purchase
register_extractProfessional register, authorised representative or banned person extractPurchase
weekly_summaryWeekly summaryType and week, first purchase only
document_imageDocument imageDocument in the order
charges_extractCharges extract (image)Order
name_searchBusiness name search in a paying state jurisdiction, or an offline name searchSearch

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.

On this page