List a person's shareholdings in Australian companies
List the shares a person holds in Australian proprietary companies as recorded by ASIC, with share class, number held, paid-up status and the issuing company.
Proprietary companies must report their members to ASIC, and ASIC records the twenty largest holders in each share class on the register. A person's shareholdings are the other side of that record: every company in which the person is listed as a member, with the share class, the number of shares, whether they are held beneficially and whether they are fully paid. This is how you discover a person's ownership interests in private companies for beneficial ownership, KYC and related-party checks. The endpoint reads from the most recent person extract you hold that was purchased with includeShareholdings: true and is free; the extract is bought once with POST /v1/people/extracts, as explained in the purchasing guide.
https://api.asicapi.dev/v1/people/{personId}/shareholdingsPath parameters
Prop
Type
Query parameters
Prop
Type
Example request
curl "https://api.asicapi.dev/v1/people/prs_8f3k2m9q/shareholdings?status=all" \
-H "Authorization: Bearer $ASICAPI_KEY"Example response
{
"object": "list",
"extract": {
"id": "ext_01J9AG8K1L4M7N2P",
"type": "historical",
"purchasedAt": "2026-09-04T03:12:44Z",
"asOf": "2026-09-04T03:12:41Z"
},
"data": [
{
"object": "shareholding",
"classCode": "ORD",
"numberHeld": 500,
"beneficiallyOwned": true,
"fullyPaid": true,
"status": { "code": "C", "label": "Current" },
"jointHolding": false,
"company": {
"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
},
"address": {
"careOf": null,
"line1": "UNIT 7",
"street": "45 STATION STREET",
"locality": "HAWTHORN",
"state": "VIC",
"postcode": "3122",
"country": "AUSTRALIA"
},
"sourceDocument": { "documentNumber": "0E5123456", "qualifier": null }
},
{
"object": "shareholding",
"classCode": "A",
"numberHeld": 1200,
"beneficiallyOwned": false,
"fullyPaid": true,
"status": { "code": "C", "label": "Current" },
"jointHolding": true,
"company": {
"acn": "001000004",
"formatted": "001 000 004",
"numberType": { "code": "ACN", "label": "Australian Company Number" },
"name": "BLUE HARBOUR HOLDINGS PTY LTD",
"type": { "code": "APTY", "label": "Australian Proprietary Company" },
"status": { "code": "REGD", "label": "Registered" },
"abn": "71001000004",
"registeredCharity": false
},
"address": {
"careOf": null,
"line1": null,
"street": "18 BEACH ROAD",
"locality": "MANLY",
"state": "NSW",
"postcode": "2095",
"country": "AUSTRALIA"
},
"sourceDocument": { "documentNumber": "6E2233445", "qualifier": "AR 2011" }
},
{
"object": "shareholding",
"classCode": "ORD",
"numberHeld": 100,
"beneficiallyOwned": true,
"fullyPaid": false,
"status": { "code": "E", "label": "Ceased/Former" },
"jointHolding": false,
"company": {
"acn": "004249987",
"formatted": "004 249 987",
"numberType": { "code": "ACN", "label": "Australian Company Number" },
"name": "SOUTHERN CROSS LOGISTICS PTY LTD",
"type": { "code": "APTY", "label": "Australian Proprietary Company" },
"status": { "code": "EXAD", "label": "** Under External Administration And/Or Controller Appointed **" },
"abn": "38004249987",
"registeredCharity": false
},
"address": {
"careOf": null,
"line1": null,
"street": "18 BEACH ROAD",
"locality": "MANLY",
"state": "NSW",
"postcode": "2095",
"country": "AUSTRALIA"
},
"sourceDocument": { "documentNumber": "2E7788990", "qualifier": null }
}
],
"hasMore": false,
"nextCursor": null,
"totalCount": 3,
"meta": {
"billable": false,
"product": null,
"requestId": "req_01J9AE2B7C3D8E4F"
}
}Response fields
| Field | Type | Description |
|---|---|---|
object | string | Always list. |
extract | object | The extract the holdings were read from: id, type (current or historical), purchasedAt, asOf. |
data[] | array | Shareholding records for the person. |
data[].object | string | Always shareholding. |
data[].classCode | string | Share class code as the issuing company reports it, for example ORD, A, PREF. Class titles are on the company's share capital. |
data[].numberHeld | integer | Number of shares of that class held. |
data[].beneficiallyOwned | boolean or null | Whether the shares are held beneficially. null when the company did not report it. |
data[].fullyPaid | boolean or null | Whether the shares are fully paid. null when not reported. |
data[].status | code | C current or E ceased. Ceased holdings appear only with status=former or status=all, read from a historical extract. |
data[].jointHolding | boolean | true when the shares are held jointly with one or more other members. |
data[].company | object | Summary of the issuing company: acn, formatted, numberType, name, type, status, abn, registeredCharity. |
data[].address | object or null | Member address as reported by the company. |
data[].sourceDocument | object or null | The document that last changed the holding; qualifier is set for annual returns (AR 2011) and financial reports (FR 2011). |
hasMore | boolean | Whether another page exists. |
nextCursor | string or null | Cursor for the next page. See pagination. |
totalCount | integer | Total holdings matching the filter. |
meta | object | Reads are free: billable is false and product is null. |
Errors
| Code | HTTP status | When |
|---|---|---|
extract_required | 402 | You hold no person extract for this person that includes shareholdings, or you asked for ceased holdings and hold only a current one. details.purchase carries the POST body that would satisfy the request, with includeShareholdings: true and, where needed, history: true. |
extract_not_found | 404 | The extract query parameter names an extract that does not exist, belongs to another person or is not a person extract. |
extract_expired | 410 | The extract is more than 12 months old. Purchase again. |
extract_owner_mismatch | 403 | The extract named by extract was purchased under a different account. |
person_not_found | 404 | The person id is malformed or was never returned by a search under your account. |
validation_error | 422 | status is not one of current, former, all; extract is malformed; or limit is out of range. |
{
"error": {
"type": "extract_required_error",
"code": "extract_required",
"message": "Shareholdings are only included in a person extract purchased with includeShareholdings. Purchase one with POST /v1/people/extracts.",
"param": null,
"asicCode": null,
"requestId": "req_01J9AE2B7C3D8E4F",
"docUrl": "https://asicapi.dev/docs/errors#extract_required",
"details": {
"purchase": {
"method": "POST",
"path": "/v1/people/extracts",
"body": {
"searchId": "psr_01J9AB3CD4EFG5HJ6KM7NP8QR",
"personIds": ["prs_8f3k2m9q"],
"history": false,
"includeShareholdings": true
},
"product": "person_extract"
}
}
}
}Notes from the ASIC register
- Shareholdings are opt-in at purchase. ASIC only includes shareholdings in a personal name extract when they are asked for. An extract bought without
includeShareholdingshas an emptyshareholdings[]and this endpoint returnsextract_requiredfor it, so decide at purchase time. Including shareholdings does not change the price of the extract. - Top twenty members only. For each class of shares issued by a proprietary company, ASIC records the twenty members with the largest holdings, plus any other member holding the same number of shares as the twentieth. A person who holds fewer shares than the twentieth-ranked member does not appear here even though they are a member. Public companies do not report members to ASIC at all, so no public company shareholdings are ever returned.
- Ceased does not mean sold. In a historical extract, a ceased holding shows that the person stopped being ranked among the twenty recorded members. That may, but does not necessarily, mean they ceased to be a member of the company.
- Joint holdings. A joint holding is recorded once against each joint holder. The other holders are not listed on the person extract; use the company's members endpoint to see all holders of the same parcel.
- Timeliness. Members are updated when the company lodges a Form 484 change to members register, or when a company's annual review confirms them. The
sourceDocumenttells you which lodgement last touched the record, andextract.asOftells you when the snapshot was taken.
Related
Purchase a person extract
Buy the extract this endpoint reads, with includeShareholdings set.
Get a person
Roles, licences, shareholdings and documents in one person object.
List a person's roles
Directorships and other roles, including a Member role for each company here.
Share capital and members
How ASIC records share classes, members and the top-twenty rule.
Company members
The same holdings seen from the company's side.
Pagination
Cursor pagination on list responses.
List a person's company roles and directorships
List every company where a person is or was a director, secretary, liquidator or other office holder on the ASIC register, filtered by role and status.
List documents lodged in relation to a person
List the ASIC forms lodged that name a person as a director, secretary, liquidator or member, with document numbers, form codes, dates and page counts.