# ASIC ID Check

`POST /asic_id_check`

- Live: `POST https://gdapi.globaldata.net.au/api/v2/asic_id_check`
- Sandbox: `POST https://sandbox-gdapi.globaldata.net.au/api/v2/asic_id_check`

Verifies a person against the ASIC officeholder and shareholder register using their name and date of birth.
Returns a small `match_results` summary indicating whether the supplied details match an ASIC record.

Use this endpoint when you need to confirm a person is on the ASIC register. If you need the actual ASIC
record (officeholdings, shareholdings, addresses, etc.) use `/asic_extract_person_search` and `/asic_extract`
instead.

## Match rules

- First name, last name and `birth_date` must all match an ASIC record for the check to pass.
- `middle_name`, when supplied, is reported on but does **not** gate the result. A check can pass with
  `middle_name: no_match`. ASIC's middle-name records are inconsistent - it is common for them to be
  missing entirely, recorded as an initial only, or only partially recorded - so we treat the middle
  name as a soft signal rather than a hard requirement.

## Name matching

Name comparisons are case-insensitive and use the following normalisation rules on both the supplied value
and the ASIC record:

- **Case.** `Smith`, `SMITH`, and `smith` are treated as the same name.
- **Accents and non-ASCII characters.** Transliterated to ASCII before comparison. `Müller` is treated as
  `Muller`, `André` as `Andre`.
- **Apostrophes.** Ignored. `O'Donnell` and `ODonnell` are treated as the same name. Both straight (`'`)
  and curly (`’`) apostrophes are normalised.
- **Hyphens.** Significant. `Smith-Jones` and `Smith Jones` (or `SmithJones`) are **not** treated as the
  same name - they should be supplied exactly as the ASIC record has them.
- **Punctuation and brackets.** Dots and parenthesised content are stripped before comparison
  (`John (Jack)` is treated as `John`, `St.` as `St`).
- **Whitespace.** Repeated whitespace is collapsed to single spaces and leading/trailing whitespace is
  trimmed.

There is no fuzzy matching - all comparisons are exact after the normalisation rules above.

## Input expectations

- Names should be provided as they appear on ASIC records. A combined maximum of three given names is
  allowed across `first_name` and `middle_name`.
- `birth_date` must be an ISO `YYYY-MM-DD` date after 1900-01-01.

## Response

The `match_results` object has two keys:

- `person`: `match` when the supplied first name, last name and date of birth match an ASIC record;
  otherwise `no_match`. `no_match` also covers the case where the search criteria are too broad to evaluate
  against a single record.
- `middle_name`: `match` when the supplied middle name matches the ASIC record, `no_match` when it does not
  (or the ASIC record has no middle name on file), or `not_provided` when no middle name was supplied.

## Sandbox environment

The sandbox dataset is deterministic. Use any of the following combinations to receive a passing match:

| First Name | Middle Name | Last Name   | Birth Date  | Notes                                             |
|:-----------|:------------|:------------|:------------|:--------------------------------------------------|
| John       | Michael     | Doe         | 1980-05-15  | Standard three-part name.                         |
| Maria      |             | Scott       | 1971-11-02  | No middle name on the ASIC record.                |
| Patrick    |             | O'Connor    | 1965-07-19  | Apostrophe in the surname (also matches `OConnor`). |
| Mary-Jane  |             | Parker      | 1983-02-28  | Hyphenated first name.                            |

## Request body

Details of the individual to check.

| Field | Type | Description |
|-------|------|-------------|
| `first_name` | string [max 100 characters] | **Required.** The person's first given name (one to three given names when combined with `middle_name`). Example: `John` |
| `middle_name` | string [max 100 characters] or null | Optional middle names. Combined with `first_name` this cannot exceed three words. Example: `Michael` |
| `last_name` | string [max 100 characters] | **Required.** The person's family name as recorded with ASIC. Example: `Doe` |
| `birth_date` | string (date) | **Required.** The person's date of birth in `YYYY-MM-DD` format (must be after 1900-01-01). Example: `1980-05-15` |

**Sample request**

```json
{
    "first_name": "John",
    "middle_name": "Michael",
    "last_name": "Doe",
    "birth_date": "1980-05-15"
}
```

## Responses

### 200 ID check completed. The `match_results` object contains the verification outcome.

Content type: `application/json`

| Field | Type | Description |
|-------|------|-------------|
| `message` | string | Always `Ok` when the request succeeds. Example: `Ok` |
| `function` | string | The API function that handled the request. Example: `asic_id_check` |
| `api_reference` | string (uuid) | Audit reference for this ID check. Example: `fe4291ca-d831-4760-96df-c9cb03b3cd95` |
| `match_results` | object | The verification outcome. Carries no PII. |
| `match_results.person` | string | `match` when the first name, last name and date of birth match an ASIC record; otherwise `no_match`. Enum: `match`, `no_match` Example: `match` |
| `match_results.middle_name` | string | `match` when the supplied middle name matches the ASIC record's middle name, `no_match` when it does not (or the ASIC record has no middle name on file), or `not_provided` when no middle name was supplied in the request. Enum: `match`, `no_match`, `not_provided` Example: `match` |

**Sample response**

```json
{
    "message": "Ok",
    "function": "asic_id_check",
    "api_reference": "fe4291ca-d831-4760-96df-c9cb03b3cd95",
    "match_results": {
        "person": "match",
        "middle_name": "match"
    }
}
```

Standard error responses: 400, 401, 402, 403, 429, 5XX (see [Common error responses](/docs/reference/general/common-error-responses.md))

