asicapidocs

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.

A person's roles are the appointments ASIC has recorded against their name across every company on the register: director, secretary, alternate director, liquidator, administrator, receiver and the other office holder roles, plus a Member role for each company in which they are a recorded shareholder. This endpoint returns those roles as a paginated list with the company summary attached to each, so you can build a directorship history, check for concurrent appointments or find every company a liquidator has been appointed to. It reads from the most recent person extract you hold for the person and is free; the extract is purchased once with POST /v1/people/extracts, as explained in the purchasing guide.

GEThttps://api.asicapi.dev/v1/people/{personId}/roles

Path parameters

Prop

Type

Query parameters

Prop

Type

Example request

Request
curl "https://api.asicapi.dev/v1/people/prs_8f3k2m9q/roles?status=all&role[]=DR&role[]=SR" \
  -H "Authorization: Bearer $ASICAPI_KEY"

Example response

Response
{
  "object": "list",
  "extract": {
    "id": "ext_01J9AG8K1L4M7N2P",
    "type": "historical",
    "purchasedAt": "2026-09-04T03:12:44Z",
    "asOf": "2026-09-04T03:12:41Z"
  },
  "data": [
    {
      "object": "role",
      "role": { "code": "DR", "label": "Director" },
      "status": { "code": "C", "label": "Current" },
      "appointedAt": "2015-02-01",
      "ceasedAt": null,
      "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": "role",
      "role": { "code": "DR", "label": "Director" },
      "status": { "code": "C", "label": "Current" },
      "appointedAt": "2021-09-14",
      "ceasedAt": null,
      "company": {
        "acn": "009136109",
        "formatted": "009 136 109",
        "numberType": { "code": "ACN", "label": "Australian Company Number" },
        "name": "NORTHERN RIVERS COMMUNITY FOUNDATION LTD",
        "type": { "code": "APUB", "label": "Australian Public Company" },
        "status": { "code": "REGD", "label": "Registered" },
        "abn": "27009136109",
        "registeredCharity": true
      },
      "address": {
        "careOf": null,
        "line1": "UNIT 7",
        "street": "45 STATION STREET",
        "locality": "HAWTHORN",
        "state": "VIC",
        "postcode": "3122",
        "country": "AUSTRALIA"
      },
      "sourceDocument": { "documentNumber": "3E4455667", "qualifier": null }
    },
    {
      "object": "role",
      "role": { "code": "DR", "label": "Director" },
      "status": { "code": "E", "label": "Ceased/Former" },
      "appointedAt": "2011-03-01",
      "ceasedAt": "2018-06-30",
      "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 }
    },
    {
      "object": "role",
      "role": { "code": "SR", "label": "Secretary" },
      "status": { "code": "E", "label": "Ceased/Former" },
      "appointedAt": "2009-06-15",
      "ceasedAt": "2014-11-30",
      "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": "7E1234567", "qualifier": null }
    }
  ],
  "hasMore": false,
  "nextCursor": null,
  "totalCount": 4,
  "meta": {
    "billable": false,
    "product": null,
    "requestId": "req_01J9AD9V4X1Y7Z2A"
  }
}

Response fields

FieldTypeDescription
objectstringAlways list.
extractobjectThe extract the roles were read from: id, type (current or historical), purchasedAt, asOf.
data[]arrayRole objects matching the filters, in ASIC's order.
data[].objectstringAlways role.
data[].rolecodeOffice holder role code and label from the office holder roles table, or SH Member from the additional person roles table.
data[].statuscodeRecord status from the record status table: C current or E ceased.
data[].appointedAtdate or nullDate the person was appointed. null for Member roles and where ASIC holds no date.
data[].ceasedAtdate or nullDate the appointment ceased. null for current roles.
data[].company.acnstringACN, ARBN or ARSN of the company, 9 digits without spaces.
data[].company.formattedstringThe same number in ASIC's spaced display format.
data[].company.numberTypecodeHeading ASIC gives the number, from the number types table: ACN, ARBN, NUMBER (a registration number that is none of the others) or ARSN.
data[].company.namestringCompany name as registered, uppercase.
data[].company.typecodeOrganisation type from the organisation types table, for example APTY, APUB, FNOS.
data[].company.statuscodeOrganisation status from the organisation statuses table, for example REGD, DRGD, EXAD, SOFF.
data[].company.abnstring or nullABN from the Australian Business Register feed, when one exists.
data[].company.registeredCharitybooleantrue when the company is registered with the ACNC and the person is one of its directors. See get a person for the notice ASIC requires.
data[].addressobject or nullAddress ASIC records for the person in this role: careOf, line1, street, locality, state, postcode, country.
data[].sourceDocumentobject or nulldocumentNumber and qualifier of the document that last changed this role.
hasMorebooleanWhether another page exists.
nextCursorstring or nullCursor for the next page. See pagination.
totalCountintegerTotal roles matching the filters across all pages.
metaobjectReads are free: billable is false and product is null.

Errors

CodeHTTP statusWhen
extract_required402You hold no person extract for this person, or you asked for status=former or status=all and hold only a current extract. details.purchase carries the POST body that would satisfy the request, with history: true in the second case.
extract_not_found404The extract query parameter names an extract that does not exist, belongs to another person or is not a person extract.
extract_expired410The extract is more than 12 months old. Purchase again.
extract_owner_mismatch403The extract named by extract was purchased under a different account.
person_not_found404The person id is malformed or was never returned by a search under your account.
validation_error422status is not one of current, former, all; a role[] value is not a known role code; extract is malformed; or limit is out of range.

When you hold a current extract and ask for ceased roles, the 402 tells you a historical extract is needed:

402 Payment Required
{
  "error": {
    "type": "extract_required_error",
    "code": "extract_required",
    "message": "Ceased roles are only included in a historical person extract. Purchase one with POST /v1/people/extracts.",
    "param": "status",
    "asicCode": null,
    "requestId": "req_01J9AD9V4X1Y7Z2A",
    "docUrl": "https://asicapi.dev/docs/errors#extract_required",
    "details": {
      "purchase": {
        "method": "POST",
        "path": "/v1/people/extracts",
        "body": {
          "searchId": "psr_01J9AB3CD4EFG5HJ6KM7NP8QR",
          "personIds": ["prs_8f3k2m9q"],
          "history": true,
          "includeShareholdings": false
        },
        "product": "person_extract"
      }
    }
  }
}

Notes from the ASIC register

  • A view over the extract. This endpoint filters and pages the roles[] of the same extract that get a person returns whole. It never contacts ASIC and is never billed; see the purchasing guide.
  • Ordering. ASIC orders roles by role code in its own sequence (director and secretary first, then alternate directors, then external administration roles, then scheme and other roles), with current appointments before ceased ones and ceased appointments in reverse chronological order. Member roles come last. asicapi preserves this order; the role[] and status filters remove entries without reordering.
  • Current versus historical. ASIC only returns ceased roles in a historical extract. status=former and status=all therefore need an extract purchased with history: true; with only a current extract they return extract_required. Both kinds of extract cost the same, so buy a historical one when you expect to need cessations.
  • Member roles. When the extract was purchased with includeShareholdings, ASIC adds a Member role with code SH for each company in which the person appears on the members register. The share class, number of shares and paid-up status are in shareholdings; the Member role only tells you the company. ASIC records members for proprietary companies only, and only the twenty largest holders per share class.
  • Charity directors. registeredCharity is only populated when the person is a director of that company. The ACNC register, not ASIC, is the authoritative source for a charity's current directors.
  • Roles held through a company. Roles a company holds in other companies (local agent, trustee, ultimate holding company, responsible entity) are not personal roles and appear on company relationships instead.
  • Cessation documents and court orders. The person extract does not carry the director cessation documents or court order details that the company-side office holders endpoint returns. Use the company endpoint when you need those.

On this page