Developers

Organisation AUSTRAC screen

The AUSTRAC screen of an organisation answers the questions AUSTRAC's initial customer due-diligence form for a body corporate asks: what sets this customer's risk rating (A1), which ownership exemptions apply and where the trace of the structure ends (C1), who the beneficial owners are and how they exercise control (C2), and whether each representative and each beneficial owner is listed or a politically exposed person (E1.1, E1.2, E2.1, E2.2). It is sold mainly to integrators, as the AUSTRAC part of their own onboarding or remittance platform; VerityRadar supplies the screening and the register reading, and this page documents exactly what that part returns and what it still leaves to you.

The screen is deterministic. It reads the customer's own list determination from the structured screening hits, reads the register facts the pipeline holds, applies the ownership and control tests to the structure you declare, and writes one austrac_compliance module into the investigation response. No model authors any field under it, and it never decides for you whether a customer falls within an exemption or provides a designated service: it puts the facts and the citations in front of the reporting entity.

1. The request

POST /api/ai-investigate (bearer JWT or long-lived API key; rate-limited under ai-investigations-per-ip).

FieldTypeNotes
subjectTypestring"organization" (the default) to screen an organisation. A "person" uses the person AUSTRAC screen.
organizationNamestringRequired. The legal name of the customer.
countrystringISO 3166-1 alpha-2 country of the customer. Feeds the A1 country-risk factor; it does not filter screening.
additionalIdentifiersarrayOptional. The customer's registration identifiers, each { "type", "value" }, with type one of abn, acn, lei, uk_company_number or other (any case; spaces and hyphens allowed in the value). An ABN, ACN or LEI is checked against its check digits and a UK company number against its shape; a mistyped one is refused before anything is charged (invalid_organisation_identifier). The register is asked for the identifier first: the report's Subject identification says which register held it and under what name, or that none did, and a record held under a different name is listed as considered and not used. An other identifier is kept as entered and cannot be looked up. At most five may be sent. A run that carries identifiers is never served from, or added to, the shared report cache.
austracScreenbooltrue requests the AUSTRAC screen (3 credits). Required for this screen.
advancedSearchboolAdds the Advanced research evidence. Included in an AUSTRAC screen, so it adds nothing to the cost or the scope.
ownershipStructureobjectThe declared ownership and control structure: parties, links and documents. This is what lets C2 name a beneficial owner a public register does not publish; see section 2.
customerProfileobjectOptional. What the customer declared about itself: sector, purpose, funding, valueBand, charityOrNpo, and the free-text sectorOther/purposeOther. Accepted only with austracScreen: true. Its ids are the ones GET /api/austrac/customer-profile/options serves; a blank field is an absent one. See section 3.
privacyNoticeAcknowledgedboolNot required for an organisation. It is required when the declared structure names an individual.

A complete organisation AUSTRAC request:

{
  "subjectType": "organization",
  "organizationName": "Apex Capital Holdings Pty Ltd",
  "country": "AU",
  "austracScreen": true,
  "additionalIdentifiers": [ { "type": "acn", "value": "004085616" } ],
  "privacyNoticeAcknowledged": true,
  "ownershipStructure": {
    "parties": [
      { "id": "p1", "kind": "company", "name": "Apex Group Holdings Ltd", "country": "AU" },
      { "id": "p2", "kind": "individual", "name": "Alex Tan", "country": "AU", "dateOfBirth": "1981-06-14" }
    ],
    "links": [
      { "holderId": "p1", "heldId": "customer", "ownershipPct": 100 },
      { "holderId": "p2", "heldId": "p1", "ownershipPct": 60, "roles": ["director", "shareholder"] }
    ],
    "documents": [
      { "type": "ASIC company extract", "issuer": "ASIC", "date": "2026-10-01" }
    ]
  },
  "customerProfile": {
    "sector": "real_estate",
    "purpose": "buy_commercial_property",
    "funding": "mortgage",
    "valueBand": "5m_and_over",
    "charityOrNpo": "no"
  }
}

A screen costs 1 credit (Basic), 2 (Advanced) or 3 (AUSTRAC). AUSTRAC includes the Advanced research, so advancedSearch adds nothing to an AUSTRAC screen. A declared structure that names more than ten parties adds one credit for each further ten parties; the organisation being screened is not a party, so it is never counted.

400 rules

Every guard below runs ahead of the billing path, so a refused request costs nothing. organizationName is required and the declared-structure privacy_notice_required are returned without creditsCharged; every other refusal carries creditsCharged: 0.

ErrorWhenWhat to do
organizationName is requiredThe name is missing or blank.Send the customer's legal name.
trust_screening_unavailablesubjectType is "trust", or the name reads as a trust, a super fund or an SMSF and carries no company suffix. A registered company with "Trust" in its name, such as Example Pty Ltd ATF Example Family Trust, is screened as a company.Trust screening is not available yet. Screen the corporate trustee by its company name.
austrac_not_applicable_to_vesselaustracScreen is requested for subjectType: "vessel".The Act's customer obligations apply to people and organisations, not to a hull. Run a Basic or Advanced vessel screen.
invalid_date_of_birthdateOfBirth is present but is not an ISO yyyy-MM-dd date. This check runs before the person-identifier check, so it fires on an organisation request too.Resubmit in yyyy-MM-dd, or leave dateOfBirth out for an organisation.
person_identifiers_require_persondateOfBirth or citizenships are sent on an organisation request (or additionalIdentifiers on any subject type other than a person or an organisation). Put a person's date of birth and citizenship on the party in ownershipStructure instead.Submit them with "person", or leave them out.
invalid_organisation_identifierAn entry in additionalIdentifiers has a type outside abn, acn, lei, uk_company_number, other, or a value of the wrong length or with a wrong check digit. The message says which, for example that an ACN must be 9 digits or that an ABN fails its check digit, and errors[] names every bad entry by its path, for example additionalIdentifiers[1].value. More than five identifiers is refused the same way.Correct the identifier against the registration certificate, or leave it out. The response carries creditsCharged: 0.
ownership_structure_requires_organisationA declared structure is sent on a subject type other than "organization".Submit it with the organisation, or leave it out.
invalid_ownership_structureThe declaration fails validation: an unknown party kind or role, a duplicate party id, a link to an unknown party, a duplicate link, a percentage outside 0-100, a band whose minimum exceeds its maximum, a malformed citizenship or date of birth on an individual, a malformed or future document date, or a party that holds no interest reaching the customer.The response's errors[] names the JSON path, for example ownershipStructure.links[2].heldId.
privacy_notice_requiredThe declared structure names an individual and privacyNoticeAcknowledged is not true. This is checked before the structure is validated, so a structure that is also invalid returns this error first.Show the collection notice and resubmit with the acknowledgement.
customer_profile_requires_austracA non-empty customerProfile is sent without austracScreen: true.Submit it with the AUSTRAC screen, or leave it out.
invalid_customer_profileA customerProfile field carries an id the options endpoint does not serve, an entry that does not apply to an organisation, an other code with no text (or text beside a code that is not other), text over 100 characters, or a charityOrNpo value outside yes, no, unknown.The response's errors[] names the JSON path, for example customerProfile.sector.

A 402 (insufficient credits or an exhausted per-key budget) is a billing failure, not a refusal: the request was valid but could not be paid for.

2. The declared ownership structure

A public register does not publish every beneficial owner, and a private company's members are not public at all. The structure you declare is how the screen learns who holds the customer and how. The pipeline applies the AUSTRAC ownership and control tests to it and records, for every fact, whether it came from your declaration, a public register, or public sources researched for the screening.

ObjectFields
parties[]id (your own reference), kind, name, country, dateOfBirth, citizenships, additionalIdentifiers. A party is named once in the report.
links[]holderId, heldId, ownershipPct or the band ownershipPctMin and ownershipPctMax, votingPct, hasBoardControl, roles.
documents[]type, issuer, date — the documents the declaration was read from. A document date cannot be in the future.

Party kinds

individual, company, trust, partnership, government_body and listed_company. Only an individual can be a beneficial owner; every other kind is a layer the trace passes through. A listed_company or a government_body can end the trace under the Rules 6-7 deeming, which is what the C1 exemptions report.

Links and roles

A link is directed: holderId holds an interest in heldId. The reserved id "customer" is the organisation being screened and is never a party. A party is the customer's holder when a link runs from it to "customer". The roles are shareholder, director, ceo, trustee, appointor, protector, settlor, general_partner and nominee_for.

A role belongs to the link's holder. That direction decides a nominee: a nominee_for link names the nominee as the holder and the party it holds for as the held party. The nominee's holdings move onto that principal, and the moved link records the nominee by name — "who is behind this holding" is the question a nominee exists to obscure. The nominee_for link itself is not a stake.

A holder with no percentage — a director or a CEO — is declared through roles with no ownershipPct, because for many structures the office is the only evidence of control. A band (ownershipPctMin and ownershipPctMax) is recorded as a floor and a ceiling, never as a point percentage the source did not state.

3. The declared customer profile

The AUSTRAC form's A1 risk factors are questions about the customer's own circumstances, which a public screen cannot observe. customerProfile lets the reporting entity pass on what the customer declared so the screen can apply the rules, cite them, and show the reader which inputs were never answered. It is optional, and it is never a clearance: every raised factor names the starter-kit rule it rests on, and an input that was not given is listed under notAssessed rather than left silent.

The lists are versioned (2026-10) and served by GET /api/austrac/customer-profile/options (bearer JWT), which returns each entry's code, label and appliesTo — the same spelling as subjectType, so a client can match the two. A value band's minAud is exclusive and its maxAud inclusive, so a value on a boundary sits in the band below it; the labels say so ("Over $1 million to $1.5 million", "Up to $10,000", and "Over $5 million" for the open-ended top band).

FieldWhat it saysWhat the rules do with it
sectorThe sector the customer operates in, from the served list, with sectorOther required for other.Recorded as declared; under the real-estate starter kit no citable rule reads it, so it raises no factor and the response says so.
purposeThe purpose of the business relationship or transaction, with purposeOther on the same rule.Recorded as declared; a stated purpose narrows the nature-and-purpose line of cddRecord.notCovered to "beyond the purpose the customer declared". It is also what makes the high-value rule applicable: only a purchase purpose (buy_residential_property, buy_commercial_property) can raise that factor.
fundingmortgage, own_funds, third_party, other, unknown.mortgage (wholly or partly) suppresses high_value_without_mortgage; own_funds and third_party let it stand; other and unknown leave it undecided and the response says so under notAssessed. No funding answer raises a factor of its own: third-party funding is recorded as declared, because the starter kit's third-party item is a non-enrolled party acting for the customer, not a statement about who pays.
valueBandA band, never an amount: under_10k through 5m_and_over, or unknown.1_5m_to_5m or 5m_and_over — the bands above $1.5 million — raises high_value_without_mortgage on a purchase purpose when funding is not a mortgage. Exactly $1.5 million is in the band below, because the kit reads "over $1.5 million". A missing, other or unknown purpose or funding is reported under notAssessed instead of guessed.
charityOrNpoyes, no or unknown.yes raises charity_or_npo when the ACNC data in this run holds no record. A register record is the source of that factor and is never repeated; a declared no never clears one.

Each factor the declaration raises appears in riskFactors and in customerProfile.raisedFactors with its starter-kit citation, and counts toward indicativeRating exactly as an evidence-raised factor does. The citations name the source page: AUSTRAC's real estate program starter kit, step 2, A1 risk factors. The report prints the declaration as declared, the raised factors with their citations, and the not-assessed lines, so nothing the customer left blank reads as clear.

4. The response

The response is the v2 investigation envelope. The screen is the austrac_compliance module in modules[] (moduleId: "austrac_compliance", category: "compliance", displayOrder: 190, tier: "free"). Its status is one of listed, possible_match, found, not_found or inconclusive; its severity is derived by the same rules as every other module. A body-corporate screen is marked by data.reportForm: "body_corporate", which is what the report renderers read to print the form's sections rather than the person layout.

The module's data object:

FieldMeaning
reportFormAlways body_corporate on this screen. Tells a renderer which form's layout applies.
sanctionsAuthorityThe list the customer's own determination is read from — always the DFAT Consolidated List.
dfatDeterminationThe customer's own determination: listed, not_listed, possible_match or inconclusive.
dfatDeterminationReasonWhy the customer's determination is what it is.
dfatListUpdatedThe date of the DFAT list row read for the customer, for the CDD record; null when no DFAT row was read.
dfatComparisonsPer-record DFAT comparison for the customer: recordId, name, recordBirthDates, recordNationalities, listedOn, lastUpdated, outcome.
foreignListingsListings under a foreign regime only: authority, program, sourceUrl. Risk information, never the Australian determination.
comparisonsEvery same-name record weighed for the customer, in the shared RecordComparison shape.
pepDeterminationAlways not_applicable for the customer itself: a body corporate holds no public office, so the form's PEP questions are asked of its representatives and beneficial owners.
pepDeterminationReasonWhy the customer's PEP question does not apply.
personsOne row per representative and beneficial owner: name, capacity, group (representative or beneficial_owner), dfatDetermination, dfatDeterminationReason, dfatComparisons, pepDetermination, pepPosition, pepSourceUrl, pepCurrentOrFormer, pepEndDate, pepNotDetermined. This is the evidence behind E1 and E2.
beneficialOwnersThe C2 table: name, basis, ownershipPct, votingPct, howControlExercised, countryOfResidence, countryRiskBand, hasVeto, and facts[] — each fact's field, value and source.
exemptionsThe C1 candidates. note states the decision is the reporting entity's; rules[] carry id, label, applied, decided, part, register, asAt, status, citation and reason; undeterminedRegisters[] name the registers that could not be read, each with its id, label and reason. A rule that could not be decided is reported as not applied with its reason, never omitted.
designatedServiceThe s 6 question from register facts: determined, answer (provides_designated_service or not_determined), reason and basis.
designatedPersonControlWhether a designated party was found among the customer's owners or officers, including an officer who holds no equity. It raises the module's severity to high; whether a designated owner controls the customer is the separate designated_party_control obligation in triggeredObligations.
designatedPartiesEvery designated owner or officer the screen found: name, kind (owner or officer), detail, ownershipPct (null for an officer, who holds no equity) and sourceUrl.
countryRiskMethodHow country risk is assessed (FATF lists and DFAT sanctions; the Basel AML Index is deliberately excluded).
countryRiskOne row per country of the customer and of each person's residence: country, band, reason, callForAction.
riskFactorsThe A1 factors present: id, label, level — complex ownership, a foreign or domestic/international-organisation PEP related party, a charity or NPO, and country risk.
complexityReasonsWhy the structure was read as unusually complex, in words a reader can act on. Empty when it was not.
indicativeRatinglow, medium or high, derived from the A1 factors.
indicativeRatingNoteThe fixed statement that the rating is indicative and the statutory risk assessment is the reporting entity's own decision.
triggeredObligationsThe AML/CTF obligations the findings trigger: id, label, citation.
cddRecordWhat was screened and when: searchTerms, screenedAt, lists[] (each name and date), registerFacts[] (flag, register, status, asAt, source), registerLookupCompleted, registerLookupFailure, sourcesReviewed and notCovered.
customerProfileThe declaration as the customer made it, or null when none was sent: source (declared_by_customer), listVersion, declared[] (per answered input, field, code, label, other and the printed text), raisedFactors[] (id, label, level, citation) and notAssessed[] (per unanswered input, field, or per undecided factor, factorId, each with a stable reason and the printed text). For an input the reason is not_asked, not_stated or other_not_evaluated; for the high-value factor it is purpose_not_given, purpose_not_stated, purpose_other, value_not_given, value_not_stated, funding_not_given, funding_not_stated or funding_other, the first input the rule could not read. See section 3.
reviewRequiredWhether a reviewer must look at the screen: anything other than a clean DFAT not_listed, a designated party, or a person's PEP question no evidence answered.

5. Mapping to AUSTRAC's Initial CDD form for a body corporate

The screen is organised in the order AUSTRAC's initial-CDD form for a body corporate asks its questions.

Form itemModule field(s) it answers
A1 — Risk assessmentriskFactors, complexityReasons, indicativeRating, indicativeRatingNote, countryRiskMethod, countryRisk, triggeredObligations, customerProfile
C1 — Exemptionsexemptions.note, exemptions.rules[] (each with its part, register, asAt, status, citation and reason), exemptions.undeterminedRegisters[]
C2 — Beneficial owners and controlbeneficialOwners[] and the facts[] that carry the source of each field
E1.1 — Representatives: sanctionspersons[] where group: "representative": dfatDetermination, dfatDeterminationReason, dfatComparisons
E1.2 — Representatives: PEPpersons[] where group: "representative": pepDetermination, pepPosition, pepSourceUrl, pepCurrentOrFormer, pepEndDate, pepNotDetermined
E2.1 — Beneficial owners: sanctionspersons[] where group: "beneficial_owner": the same DFAT fields
E2.2 — Beneficial owners: PEPpersons[] where group: "beneficial_owner": the same PEP fields
Designated service (s 6)designatedService
Sanctions controldesignatedPersonControl, designatedParties[], and the sanctions obligations in triggeredObligations
Customer determinationsanctionsAuthority, dfatDetermination, dfatDeterminationReason, dfatListUpdated, dfatComparisons, foreignListings, comparisons, pepDetermination, pepDeterminationReason
CDD recordcddRecord

Two readings are deliberate. The customer's own PEP question is not_applicable, never none: a body corporate holds no office, and "none" would read as a clearance nobody made. And a person's PEP question is inconclusive with pepNotDetermined when no source that tags PEPs answered for them — an unanswered check is never presented as a clearance.

The C1 candidates are listed_with_disclosure (a listed company that discloses its beneficial owners, r 6-7(1)(a)), government_body (r 6-7(1)(b)), regulated_and_low_risk (an APRA-regulated body or an ASIC AFS or credit licensee) and strata. Each either applies and names the party, or the customer itself, that the exemption attaches to, or is reported not applied with its reason. strata is always reported not applied, because no public register decides it. A register that could not be read and a register that answered "no row" are different renderings, and neither is reported as "the entity does not exist".

What the screen does not cover

cddRecord.notCovered names what remains the reporting entity's responsibility and is not part of this screen:

6. Sample response and sample report

A fictional sample is published alongside this guide and kept in sync with the live schema by the report-sample tests.

7. Data coverage

What this screen can find is bounded by the data the crawler ingests. The Screening Data Coverage Statement is the authoritative record of that; it is available on request from VerityRadar while its public host is prepared. The screen itself draws on three dated lists, recorded in cddRecord.lists:

Register facts come from the public registers cddRecord.registerFacts names, each with its own as-at date. The AUSTRAC registers of remitters and of virtual asset service providers are not among them: AUSTRAC publishes those only through a CAPTCHA-gated interactive search, so the screen reports them under exemptions.undeterminedRegisters, and where no other source answers, it leaves the s 6 answer not_determined rather than guessing.