asicapidocs

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.

asicapi returns the ASIC register as consistent JSON. Whether you purchase a company extract, read a director's history from it or look up a document, the same rules apply: camelCase property names, coded values that carry both the ASIC code and a plain-English label, ISO dates, money as decimal strings, an extract reference on every response that reads from a purchased extract, and a meta object that tells you whether the call incurred an ASIC statutory fee. Learning these conventions once means every endpoint behaves the way you expect.

Request headers

HeaderDirectionPurpose
AuthorizationRequestBearer asicapi_live_... or Bearer asicapi_test_.... Required. See authentication
Content-TypeRequestapplication/json on POST bodies
X-Request-IdBothYour own trace id for the request. Echoed back verbatim on the response and recorded against the ASIC query. If you omit it asicapi generates one of the form req_01J...
X-Client-ReferenceBothUp to 30 characters of your own reference (a matter number, customer id or job id). Echoed back and printed on your invoice next to each purchase and order
Idempotency-KeyRequestA unique string (a UUID works well) on POST requests. Replays with the same key and body return the original response instead of buying a second extract or placing a second order. Keys are kept for 24 hours; the same key with a different body returns 409 idempotency_conflict
RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, Retry-AfterResponseSee rate limits
Request
curl https://api.asicapi.dev/v1/companies/004085616/officeholders \
  -H "Authorization: Bearer $ASICAPI_KEY" \
  -H "X-Request-Id: 3f9c1c62-0e6d-4b3a-8f4e-2c1a9d7e5b10" \
  -H "X-Client-Reference: MATTER-2026-0412"

Responses are always Content-Type: application/json; charset=utf-8, including errors. The download endpoint for ready orders is the one exception and returns application/pdf.

JSON conventions

Property names and nulls

Property names are camelCase. Every documented field is present on every response; a value ASIC does not hold is null, never omitted. Empty collections are []. This lets you write company.deregistration?.date without also guarding against missing keys.

Object types

Every resource carries an "object" discriminator: company, extract, officeholder, address, shareClass, shareholding, charge, document, person, personMatch, companyMatch, registerEntry, weeklySummaryItem, order, offlineSearch, identifier, list.

Coded values

ASIC stores most attributes as short codes. asicapi returns each as an object with the ASIC code verbatim and a label from the matching code table.

"role": { "code": "DR", "label": "Director" },
"status": { "code": "C", "label": "Current" },
"type": { "code": "APTY", "label": "Australian Proprietary Company" }

Store and compare on code. Display label. ASIC adds new codes to its tables without a specification change, and records converted from pre-1991 state systems sometimes carry codes that are not in the published tables at all. When asicapi does not recognise a code the label equals the code, so your UI always has something to show. Never treat an unknown code as an error, and never build an exhaustive switch that throws on an unexpected value.

The full code tables are available on the reference pages and through GET /v1/reference/code-tables/{tableId}.

Dates and timestamps

Dates are ISO 8601 YYYY-MM-DD. Timestamps are RFC 3339 in UTC, for example "2026-09-04T01:12:08Z". Where ASIC records a date as unknown (common on records taken over from state registries on 1 January 1991) the value is null. ASIC notes that the precise date may exist in paper or microfiche records it holds; the API cannot supply it.

Money

Monetary amounts are decimal strings in Australian dollars with two decimal places, for example "amountPaid": "1000.00". They are strings so that no precision is lost; parse them with a decimal library, not parseFloat.

Booleans

ASIC Y/N flags become JSON booleans: "beneficiallyOwned": true, "imaged": false.

Identifiers and formatting

IdentifierShapeExampleNotes
ACN, ARBN, ARSN9-digit string"004085616"A companion formatted field carries ASIC's display format "004 085 616". Path parameters accept either form; spaces are stripped
ABN11-digit string"53004085616"For companies the ABN embeds the ACN in its last nine digits
ASIC document number9-character string, first character numeric"0E5123456"Case-insensitive on input, returned uppercase
Charge number, ASIC identifierNumeric string up to 9 digits"1234567"ASIC identifiers appear on people, name reservations and register entries
Person idprs_ prefixed"prs_8f3k2m9q"Valid for 30 days after the search that produced it
Extract idext_ prefixed"ext_01J9AB3K7Q2XM4"Returned by every purchase; readable for 12 months
Order id, event id, request idord_, evt_, req_ prefixed"ord_01J8ZK6M4R9S2T"Opaque; do not parse

Use GET /v1/identifiers/{value} to detect and validate any of the first two rows before purchasing an extract.

Names

Company and person names are returned exactly as ASIC stores them, in uppercase. Person names are structured:

{ "familyName": "SMITH", "givenNames": ["JANE", "LOUISE"], "formatted": "JANE LOUISE SMITH" }

The same structure is used for office holders, members, register entries and people search. Organisations acting in a role (a corporate trustee, a chargee bank) use the party wrapper with "type": "organisation".

Extracts and section endpoints

GET /v1/companies/{id} returns a company's identity and status for free. Everything else about a company (office holders, addresses, share capital, members, external administration, charges, annual returns, financial reports, the embedded document list) is part of a company extract that you purchase once with POST /v1/companies/{id}/extracts. The 201 response is the whole extract, and the same data is then readable for free at GET /v1/extracts/{id} and through the section endpoints (/v1/companies/{id}/officeholders and so on), which serve one section of the most recent extract you hold with pagination on long lists. People, register entries and weekly summaries follow the same pattern. The full model is on free lookups, extracts and orders; the conventions that touch every response are below.

Current versus historical

Current versus historical extracts are chosen at purchase time with type on POST /v1/companies/{id}/extracts. A historical extract adds ceased office holders, former addresses, former share classes and members, satisfied charges, annual return history and financial report history; each ceased record carries "status": { "code": "E", "label": "Ceased" } and a ceasedAt or to date. There is no flag on a section endpoint that changes which extract ASIC produces. Section endpoints reject requests for ceased records (status=former, status=all, /charges, /annual-returns, /financial-reports) with 402 extract_required unless you hold a historical extract, and the error's details.purchase carries "body": { "type": "historical" } so you know what to buy.

The extract reference

Every response that reads from a purchased extract carries an extract object naming the purchase it came from. It appears on section lists and on single resources such as GET /v1/people/{personId}.

"extract": {
  "id": "ext_01J9AB3K7Q2XM4",
  "type": "current",
  "purchasedAt": "2026-09-04T03:12:44Z",
  "asOf": "2026-09-04T03:12:41Z"
}
FieldTypeDescription
idstringThe extract the data was read from. GET /v1/extracts/{id} returns it in full
typestringcurrent, historical or relational for company extracts; current or historical for person and register extracts; current for weekly summaries
purchasedAtstringWhen the purchase was made
asOfstringASIC's timestamp for the data. Records lodged after this moment are not in the extract; purchase again to see them

The extract query parameter

By default a section endpoint reads from the most recent extract you hold that contains the requested section. Pass extract=ext_... to read from a specific purchase instead, for example to compare two snapshots or pin a report to the extract that was current when it was produced. The id must belong to your account and environment (403 extract_owner_mismatch otherwise), must be an extract of the right kind for the endpoint (400 extract_type_invalid), and must not have expired (410 extract_expired).

Request
curl "https://api.asicapi.dev/v1/companies/004085616/officeholders?extract=ext_01J9AB3K7Q2XM4" \
  -H "Authorization: Bearer $ASICAPI_KEY"

The meta object

Every top-level response includes meta.

"meta": {
  "billable": true,
  "product": "company_extract_current",
  "requestId": "req_01J8ZK4H2N8P5W"
}
FieldTypeDescription
billablebooleanWhether this call incurred an ASIC statutory fee. true only on the 201 response to a purchase POST and the 202 response to an order POST with a live key. Always false on every GET, on error responses and on test keys
productstring or nullWhich product was consumed. null when billable is false
requestIdstringThe request id, identical to the X-Request-Id response header. Quote it when contacting support

A section endpoint therefore always returns "meta": { "billable": false, "product": null, "requestId": "..." } alongside its extract reference. Products:

ProductCharged by
company_extract_currentPOST /v1/companies/{id}/extracts with type: "current"
company_extract_historicalPOST /v1/companies/{id}/extracts with type: "historical"
company_relationshipsPOST /v1/companies/{id}/extracts with type: "relational"
person_extractPOST /v1/people/extracts, per person
register_extractPOST /v1/registers/{register}/entries/{number}/extracts
weekly_summaryPOST /v1/weekly-summaries, per type per week, first purchase only
document_imageDocument image orders, per document
charges_extractImage based charges extract orders
name_searchOffline name searches, and company or business name searches in state jurisdictions that charge for searching; free for jurisdiction ASIC

Fees are the statutory amounts set under the Corporations Act 2001 and are itemised on your monthly invoice with the X-Client-Reference you supplied. State business name searches that attract a fee have that fee waived if you go on to buy the extract of a name from the results, matching ASIC's own rule; the search response includes a waiverToken that you pass in the body of the purchase.

Lists

Collections share one shape. See pagination for the cursor rules.

{
  "object": "list",
  "data": [],
  "hasMore": false,
  "nextCursor": null,
  "totalCount": 0,
  "meta": { "billable": false, "product": null, "requestId": "req_01J8ZKB1C6D0E4" }
}

Errors

Errors use one envelope with an error object containing type, code, message, param, asicCode, requestId and docUrl. The errors reference lists every code.

Versioning

The version is in the path: /v1. Within a version asicapi only makes backwards-compatible changes:

  • new response fields may appear at any time;
  • new values may appear in coded fields, because ASIC adds codes to its tables without notice;
  • new optional query parameters and new endpoints may be added;
  • new event types may be added to webhooks.

Removing or renaming a field, changing a type, or changing the meaning of an existing value would only happen under a new path version, announced at least six months in advance. Write clients that ignore unknown fields and tolerate unknown codes and you will never need to change for a /v1 release.

On this page