Company annual returns and financial reports
List a company's historical ASIC annual returns and lodged financial reports by ACN, with balance dates, due dates, AGM dates and Form 388 documents.
Company annual returns and financial reports
Until 30 June 2003 every Australian company had to lodge an annual return with ASIC each year, confirming its details and, for public companies, the date of its annual general meeting. That regime was replaced by the annual company statement and review fee, but the annual return history remains on the register and is included in historical extracts. Separately, companies that must report (public companies, large proprietary companies, disclosing entities and registered schemes) lodge financial reports, usually on Form 388, and ASIC tracks each report's balance date, due dates, AGM dates and whether it is outstanding. These two endpoints return those records as structured lists. Both sections come from a historical company extract you have already purchased with POST /v1/companies/{id}/extracts and are read back for free, as described in the purchasing guide.
https://api.asicapi.dev/v1/companies/{id}/annual-returnshttps://api.asicapi.dev/v1/companies/{id}/financial-reportsPath parameters
Prop
Type
Query parameters
Prop
Type
Neither endpoint takes any other parameters. Annual returns and financial reports are only present in a historical extract; a current extract does not satisfy either endpoint.
Annual returns
Example request
curl https://api.asicapi.dev/v1/companies/004085616/annual-returns \
-H "Authorization: Bearer $ASICAPI_KEY"Example response
{
"object": "list",
"data": [
{
"object": "annualReturn",
"year": "2002",
"outstanding": false,
"dueDate": "2003-01-31",
"extendedDueDate": null,
"agmDueDate": null,
"extendedAgmDueDate": null,
"agmHeldDate": null,
"document": {
"documentNumber": "7E1234599",
"qualifier": "AR 2002"
}
},
{
"object": "annualReturn",
"year": "2001",
"outstanding": false,
"dueDate": "2002-01-31",
"extendedDueDate": "2002-03-31",
"agmDueDate": null,
"extendedAgmDueDate": null,
"agmHeldDate": null,
"document": {
"documentNumber": "7E1234567",
"qualifier": "AR 2001"
}
},
{
"object": "annualReturn",
"year": "2000",
"outstanding": true,
"dueDate": "2001-01-31",
"extendedDueDate": null,
"agmDueDate": null,
"extendedAgmDueDate": null,
"agmHeldDate": null,
"document": null
}
],
"hasMore": false,
"nextCursor": null,
"totalCount": null,
"extract": {
"id": "ext_01J9AC5D8R3YN7",
"type": "historical",
"purchasedAt": "2026-09-04T03:13:30Z",
"asOf": "2026-09-04T03:13:27Z"
},
"meta": { "billable": false, "product": null, "requestId": "req_01J8ZKF5G6H7J8K" }
}Response fields
| Field | Type | Description |
|---|---|---|
object | string | Always list. |
data[] | annualReturn[] | One record per annual return year, most recent year first. |
data[].object | string | Always annualReturn. |
data[].year | string | The annual return year, for example 2002. |
data[].outstanding | boolean | true when ASIC never received the return for that year. |
data[].dueDate | date or null | Date the return was due. |
data[].extendedDueDate | date or null | Extended due date where ASIC granted an extension. |
data[].agmDueDate | date or null | For public companies, the date by which the annual general meeting had to be held. |
data[].extendedAgmDueDate | date or null | Extended AGM due date where an extension was granted. |
data[].agmHeldDate | date or null | Date the AGM was actually held, as reported on the return. |
data[].document | object or null | Reference to the lodged annual return document, with documentNumber and the AR qualifier, when asicapi can match it in the extract's document list. null for outstanding returns. |
hasMore | boolean | Always false. |
nextCursor | string or null | Always null. |
totalCount | integer or null | null. |
extract | object | The historical extract the data was read from: id, type (always historical), purchasedAt and asOf. |
meta.billable | boolean | Always false. Reading an extract you hold is free. |
meta.product | string or null | Always null. |
meta.requestId | string | Request identifier. |
Financial reports
Example request
curl https://api.asicapi.dev/v1/companies/001000004/financial-reports \
-H "Authorization: Bearer $ASICAPI_KEY"Example response
{
"object": "list",
"data": [
{
"object": "financialReport",
"balanceDate": "2025-06-30",
"dueDate": "2025-10-31",
"agmDueDate": "2025-11-30",
"extendedAgmDueDate": null,
"agmHeldDate": null,
"outstanding": "Y",
"document": null
},
{
"object": "financialReport",
"balanceDate": "2024-06-30",
"dueDate": "2024-10-31",
"agmDueDate": "2024-11-30",
"extendedAgmDueDate": null,
"agmHeldDate": "2024-11-21",
"outstanding": "N",
"document": {
"object": "document",
"documentNumber": "1E5566778",
"formCode": "388",
"formDescription": "Copy of financial statements and reports",
"subForms": [
{ "code": "388B", "description": "Public company or disclosing entity" }
],
"receivedAt": "2024-09-27",
"processedAt": "2024-09-30",
"effectiveAt": "2024-06-30",
"qualifier": "FR 2024",
"pageCount": 68,
"imaged": true,
"underRequisition": false,
"xbrlAvailable": true,
"xbrlDocumentNumber": "1E5566779",
"status": null,
"priced": true
}
},
{
"object": "financialReport",
"balanceDate": "2023-06-30",
"dueDate": "2023-10-31",
"agmDueDate": "2023-11-30",
"extendedAgmDueDate": "2024-01-31",
"agmHeldDate": "2024-01-18",
"outstanding": "N",
"document": {
"object": "document",
"documentNumber": "0E8877665",
"formCode": "388",
"formDescription": "Copy of financial statements and reports",
"subForms": [
{ "code": "388B", "description": "Public company or disclosing entity" }
],
"receivedAt": "2023-10-27",
"processedAt": "2023-10-30",
"effectiveAt": "2023-06-30",
"qualifier": "FR 2023",
"pageCount": 64,
"imaged": true,
"underRequisition": false,
"xbrlAvailable": false,
"xbrlDocumentNumber": null,
"status": null,
"priced": true
}
}
],
"hasMore": false,
"nextCursor": null,
"totalCount": null,
"extract": {
"id": "ext_01J9AG1M6Y4EV2",
"type": "historical",
"purchasedAt": "2026-09-04T03:21:05Z",
"asOf": "2026-09-04T03:21:02Z"
},
"meta": { "billable": false, "product": null, "requestId": "req_01J8ZKG9H0J1K2L" }
}Response fields
| Field | Type | Description |
|---|---|---|
object | string | Always list. |
data[] | financialReport[] | One record per reporting period, most recent balance date first. |
data[].object | string | Always financialReport. |
data[].balanceDate | date | End of the financial year the report covers. |
data[].dueDate | date or null | Date the report was due to be lodged with ASIC. |
data[].agmDueDate | date or null | For public companies, the date by which the AGM must be held (within five months of the balance date). |
data[].extendedAgmDueDate | date or null | Extended AGM due date where ASIC granted an extension. |
data[].agmHeldDate | date or null | Date the AGM was held, once notified. |
data[].outstanding | string | ASIC's outstanding indicator, passed through as recorded. Y means the report has not been received, N means it has. ASIC stores this as a short text value rather than a strict flag, so tolerate other values. |
data[].document | document or null | The lodged financial report document (usually Form 388), in the same shape as the company documents list. null while outstanding. |
data[].document.xbrlAvailable | boolean | true when the report was lodged with XBRL financial data. |
data[].document.xbrlDocumentNumber | string or null | Document number of the XBRL data. |
hasMore | boolean | Always false. |
nextCursor | string or null | Always null. |
totalCount | integer or null | null. |
extract | object | The historical extract the data was read from: id, type (always historical), purchasedAt and asOf. A report lodged after asOf is not reflected. |
meta.billable | boolean | Always false. Reading an extract you hold is free. |
meta.product | string or null | Always null. |
meta.requestId | string | Request identifier. |
Errors
Both endpoints return the same errors.
| Code | HTTP | When it occurs |
|---|---|---|
extract_required | 402 | You hold no unexpired historical extract for this company. Holding only a current extract also returns this error, with error.details.purchase.body set to { "type": "historical" }, because neither section is part of a current extract. |
extract_not_found | 404 | The extract id does not exist on your account. |
extract_expired | 410 | The extract id refers to an extract older than 12 months. |
extract_owner_mismatch | 403 | The extract id belongs to a different account, or is not an extract of this company. |
acn_invalid | 400 | The number fails the ASIC check digit test. |
company_not_found | 404 | No organisation with this identifier. |
abn_invalid | 400 | The ABN fails its check digit test. |
abn_not_acn_based | 400 | The ABN does not embed an ACN. |
abn_not_found | 404 | No company matches the ACN embedded in the ABN. |
extract_unavailable_for_type | 422 | ASIC does not issue extracts for this organisation type. |
unauthorized | 401 | Missing or invalid API key. |
rate_limited | 429 | Rate limit exceeded. |
asic_unavailable | 503 | The ASIC register is offline. |
Notes from the ASIC register
- Historical extract only. ASIC populates annual return and financial report details only in historical extracts. Both endpoints therefore need a historical extract; the free document list still shows the lodged Form 388 documents themselves without one.
- Snapshot. The lists reflect the register at
extract.asOf. A financial report lodged after that date shows as outstanding until you purchase a new historical extract. - Annual returns ended in 2003. The annual return regime ended on 30 June 2003, so no company has an annual return year after 2003 and companies registered after that date return an empty list.
- Annual statements are not annual returns. Since 2003 ASIC issues an annual company statement on the review date and the company pays a review fee; no document is lodged unless details change, so there is nothing to list. The
reviewDateon the company record tells you when the next statement is due. - Who lodges financial reports. Public companies, large proprietary companies, disclosing entities, registered managed investment schemes and some foreign companies must lodge financial reports under Chapter 2M of the Corporations Act. Small proprietary companies generally do not, so their financial report list is empty. That is not an error.
- Balance dates and due dates. Disclosing entities and registered schemes must lodge within three months of the balance date and other companies within four months. Public companies must hold their AGM within five months of the balance date;
extendedAgmDueDatereflects an ASIC-granted extension. - Form 388 and XBRL. Financial reports are lodged on Form 388 with a sub-form indicating the entity category. Reports lodged with XBRL data have
xbrlAvailable: trueand a companionxbrlDocumentNumber; the XBRL document is not listed separately in the document list. - Qualifiers. Wherever an annual return or financial report is the source document for another record (an address, an office holder), the
sourceDocument.qualifieron that record isAR yyyyorFR yyyy, matching theyearor balance year here. - Outstanding indicator. ASIC records
outstandingfor financial reports as text rather than a strict Y/N flag. Values other thanYandNare rare and passed through unchanged.
Related
Purchase a company extract
Buy the historical extract these endpoints read from.
Purchasing
How free lookups, purchased extracts and orders fit together.
Company documents
Locate Form 388 and annual return documents in the free lodgement list.
Order a document image
Purchase the PDF of a lodged financial report.
Company extracts
Why annual returns appear only in historical extracts.
ASIC documents
Form codes, sub-forms, qualifiers and XBRL.
Company external administration status and documents
Check whether an Australian company is in liquidation, administration or receivership by ACN, with the appointed liquidators and ASIC documents.
Get a business name by registration number
Look up an Australian business name on the ASIC Business Names Register by state registration number or ASIC identifier, with status, ABN and renewal date.