Global Data Check
/api/v2/globaldata_check
operationId: globaldata_check
Live: https://gdapi.globaldata.net.au/api/v2/globaldata_check · Sandbox: https://sandbox-gdapi.globaldata.net.au/api/v2/globaldata_check
Validates a person's identity details against the Global Data Universe and returns one or more candidate match rows with per-field outcomes.
The endpoint searches by last_name and any combination of optional identifiers - birth_date, address, up to four phone numbers, and up to four email addresses. Every supplied field is then evaluated against each candidate and reported separately. last_name is the only required field.
Match outcomes
For first_name and middle_name the response uses a graded ladder. The strongest applicable label is returned:
| Label | Meaning |
|---|---|
match |
Exact equality after normalisation (case- and diacritic-insensitive). |
alias_match |
The two names share a known nickname / alias group (for example Bob / Robert, Jenny / Jennifer, Tony / Antonio). |
partial_match |
One side is exactly a single-letter initial that matches the leading letter of the other side (for example P vs Peter). Modelled on universe records that only have a first-letter initial captured. Longer-form abbreviations like Pete vs Peter are handled by alias_match instead. |
fuzzy_match |
The two names share a phonetic (metaphone) code and the same leading letter. |
no_match |
None of the above. |
no_record |
(Middle name only.) The caller supplied a middle name but the candidate has no middle name on file. |
not_used |
The caller supplied this field but it was dropped because it failed validation and ignore_errors=true. |
Fields that the caller did not supply are omitted from each candidate row entirely. The address rollup key appears whenever any address part was supplied; individual address component keys (street_address, suburb, state, postcode) appear only when the caller actually supplied that part. When no address was supplied at all, the rollup and all four component keys are omitted together.
Which match types are accepted is controlled per name field via first_name_matching, middle_name_matching, and last_name_matching (defaults to ["exact"] for each).
For dob the outcomes are match, match_year (year matches but day/month don't), match_day_month_reversal (year matches, day and month swapped), no_record (candidate has no DOB on file), no_match, or not_used.
For phone and email, each supplied slot is evaluated independently against the candidate's full set of phones / emails. If you supply phone and phone3 (for example), the response carries a separate phone outcome and a separate phone3 outcome, each match / no_match based on whether that specific value matches any of the candidate's phones on file. Slots that the caller did not supply are omitted from the response. The same per-slot evaluation applies to email, email2, email3, and email4.
Australian phone numbers are accepted in either 0NSN form (10 digits starting with 0) or the equivalent E.164 form (+61 followed by 9 digits). The leading + on the E.164 form is optional - 61400123456 is accepted as well as +61400123456, which avoids spurious rejections of numbers that have round-tripped through Excel / CSV imports that silently strip the +. All three shapes are normalised to the 0NSN form internally before comparison.
Address matching
When an address is supplied, the response includes both an address rollup field and the four individual address component fields (street_address, suburb, state, postcode). The rollup is a single-glance summary of how well the supplied address matched the candidate; the component fields tell you exactly which parts agreed.
The rollup is derived from the components as follows:
address rollup |
Meaning |
|---|---|
match |
Every supplied address component matches the candidate (parts the caller did not supply are not considered). |
match_street |
Same street number on the same street name (street-type variations like ST vs RD are allowed) but at least one of the other supplied parts (suburb / state / postcode) does not match. |
match_locality |
The street did not match, but the state matches and at least one of the suburb or postcode also matches. State must be supplied for match_locality to fire. |
no_match |
None of the above; the supplied address did not align with the candidate at any of the levels above. |
The component fields each return match / no_match independently and are returned alongside the rollup so you can see which specific parts contributed to it. For example, address: match_street plus street_address: match and postcode: no_match tells you the candidate lives on the same street but in a different postcode area.
When the caller supplies only a subset of address parts (e.g. just postcode, or suburb + postcode), only those parts are evaluated and reported - the unsupplied address keys are omitted from the row entirely. The rollup match therefore means "every supplied part matched", not "all four parts matched".
Whichever input form was used (gnaf_id, full_address, or any combination of address parts), the supplied components are evaluated directly. With gnaf_id / full_address the address is resolved to canonical components first; with the parts form the supplied values are used as-is.
A given person may have several addresses on file (current and historical). match_results always returns one row per person - we do not duplicate the same person once per address. When evaluating, we score every address the person has against the supplied address and report the outcome for the best-matching one. Ties on rollup outcome are broken by preferring the most recently active address. For example, if a person has both an old match_locality address and a current match address against your input, you will see address: match in the response.
Best-candidate selection
Candidates are ranked in three steps, applied in order:
- Strong-discriminator hits rank first. A candidate that produces an exact match against any of
phone,email, fulldob, or the fulladdress(the rollup atmatch) outranks any candidate that does not, regardless of how well the other candidate scores on names alone.dob: match_day_month_reversalalso counts as a strong-discriminator hit, but only when the candidate also hasfirst_nameofmatch/alias_matchANDlast_nameofmatch- without name corroboration, a reversed DOB is treated as a numeric coincidence and does not gate the candidate into the strong-discriminator group. - Exact last-name wins within the strong-discriminator group. Among candidates in the same group from step 1, candidates with
last_name: matchrank above candidates withlast_name: fuzzy_match- a fuzzy last-name candidate never displaces an exact last-name candidate for the top slot. - Weighted score breaks remaining ties. Per-field weights are summed and the highest sum wins:
| Field | match | partial outcomes |
|---|---|---|
first_name |
20 | alias_match 16, partial_match 10, fuzzy_match 6 |
middle_name |
1 | alias_match 1, partial_match 1 |
last_name |
12 | fuzzy_match 8 |
dob |
10 | match_day_month_reversal 7, match_year 4 |
address |
8 | match_street 5, match_locality 3 |
each phone slot (phone / phone2 / phone3 / phone4) |
4 | - |
each email slot (email / email2 / email3 / email4) |
2 | - |
Each candidate row reports the per-field outcomes directly. Callers wanting to drive a routing rule should branch on the specific outcomes that matter for their use case (for example, last_name: match plus dob: match plus any phone match for high-confidence auto-approval) rather than on a single aggregate score.
Single vs multiple candidates
match_results is always an array, with one row per distinct person in the universe (never one row per person-and-address). By default the array contains the single best candidate (length 0 or 1). Set return_multiple_candidates: true to receive multiple candidates ordered best-first, with the same row schema.
When return_multiple_candidates: true is set, the response is capped at the top 5 candidates by score. If your search matches more than 5 records, only the strongest 5 are returned. Narrow your request (add a DOB, a phone, or an address) to lift the strongest candidates above the cap.
Two universe records that produce identical per-field outcomes against the request collapse into a single row in match_results. The count of rows therefore reflects the number of distinct outcome maps, not the number of underlying universe records considered. Adding more identifiers to the request makes candidates differ in their per-field outcomes and surface as separate rows.
ignore_errors
Useful when the data you are checking is not perfectly clean - for example, when the source system you are pulling from contains the occasional malformed phone number, invalid email, or junk date of birth.
By default, any individual field that fails validation will cause the whole request to be rejected with a 400 error, leaving you to either retry the call with the bad fields omitted or fix the data on your side first.
Setting ignore_errors: true removes that round-trip: the endpoint silently drops any individual field whose value fails validation (a malformed birth_date, an invalid phone number, an unresolvable address, etc.) and runs the match against whatever valid input remains. The dropped fields are reported back in the response as not_used so you can see exactly which inputs were ignored. Only field-level value problems are soft-ignored - the request still has to be structurally well-formed (correct types, last_name present).
include_deceased
Records marked as deceased are excluded from the candidate pool by default. Setting include_deceased: true adds them back in.
Note that the response does not include any indicator of whether a returned candidate was deceased - matched candidates are returned in the same shape regardless. Most use cases (KYC, identity verification, contact validation) should leave this off; only enable it when you have a specific need to match against deceased records and your downstream workflow handles them appropriately.
Sandbox environment
When simulating queries in the sandbox environment, the following records can be searched for:
| First Name | Middle Name | Last Name | Birth Date | Address | Phone | |
|---|---|---|---|---|---|---|
| JOHN | ANDREW | SMITH | 1998-03-21 | 20 HARDY ST, LILYDALE 3140 VIC | 0399999999, 0491222111 | jsmith1998@example.com |
| ROBERT | PATRICK | BROWN | 1971-03-18 | 8 WALTHAM ST, RICHMOND 3121 VIC | 0399998888 | |
| MARY | SALLY | JONES | 1989-08-12 | 35 YARALLA ST, CONCORD WEST 2138 NSW | 0299995000, 0491222444 | mary_jones89@example.com |
| MARION | FILEWOOD | 1955-09-07 | 375 ARGENT ST, BROKEN HILL 2880 NSW | 0412024869, 0880885999 | m47b7@rev-zone.net | |
| AARON | ALBERT | FILEWOOD | 1949-03-11 | 375 ARGENT ST, BROKEN HILL 2880 NSW | 0880885999 | |
| RUTH | WOLFE | 2000-05-20 | 375 ARGENT ST, BROKEN HILL 2880 NSW | 0455963579 | ||
| MATTHEW | SMITH | 1999-10-21 | (no address on file) | (no phone on file) | (no email on file) | |
| JOAN | EVANS | 1996-07-06 | (no address on file) | (no phone on file) | (no email on file) | |
| ROBERT | BROWN | (no DOB on file) | 6 WATERVIEW CL, PORT MACQUARIE 2444 NSW | 0491222333 | ||
| R | BROWN | (no DOB on file) | 22 BRABYN ST, WINDSOR 2756 NSW | (no phone on file) | RP_BROWN71@EXAMPLE.COM |
Useful demonstrations against the sandbox data:
- alias_match - search
first_name = "Bob",last_name = "Brown",birth_date = "1971-03-18"withfirst_name_matching = ["exact","alias"]matches Robert Brown withfirst_name: alias_match. - partial_match - search
first_name = "Robert",last_name = "Brown"withfirst_name_matching = ["exact","partial"]may match theR BROWNrecord withfirst_name: partial_match. - fuzzy_match - search
first_name = "Mathew",last_name = "Smith",birth_date = "1999-10-21"withfirst_name_matching = ["exact","fuzzy"]matches Matthew Smith withfirst_name: fuzzy_match. - address as identifier - search
last_name = "Smith"plus the full address20 HARDY ST, LILYDALE 3140 VIC(no other identifier) matches John Smith. - last-name-only - search
last_name = "Evans"withreturn_multiple_candidates = truereturns every Evans in the universe, including Joan Evans. - no_record DOB - search
first_name = "Robert",last_name = "Brown",phone = "0491222333",birth_date = "1985-06-04"matches the second Robert Brown record by phone, withdob: no_recordbecause that record has no DOB on file.
Request body
Content type application/json.
The details of the person to validate.
| Field | Description |
|---|---|
first_name |
string or null The first name of the individual. Optional - omit, leave blank, or pass |
middle_name |
string or null The middle name of the individual. |
last_namerequired |
string The last name of the individual. Required. |
birth_date |
string (date) or null The date of birth of the individual in |
gnaf_id |
string or null A GNAF address identifier (e.g. |
full_address |
string or null The address as a single free-text string. Mutually exclusive with |
street_address |
string or null The street line of the address. Any combination of |
suburb |
string or null The suburb of the address. May be supplied on its own or in combination with any other address parts. |
state |
string or null The Australian state of the address. May be supplied on its own or in combination with any other address parts. |
postcode |
string or null The postcode of the address. May be supplied on its own or in combination with any other address parts. |
phone |
string or null A phone number for the individual. Accepts either |
phone2 |
string or null An additional phone number. Same format as |
phone3 |
string or null An additional phone number. Same format as |
phone4 |
string or null An additional phone number. Same format as |
email |
string or null An email address for the individual. |
email2 |
string or null An additional email address. |
email3 |
string or null An additional email address. |
email4 |
string or null An additional email address. |
return_multiple_candidates |
boolean When |
ignore_errors |
boolean When |
include_deceased |
boolean When |
first_name_matching |
array of strings Allow-list of accepted match types for |
middle_name_matching |
array of strings Allow-list of accepted match types for |
last_name_matching |
array of strings Allow-list of accepted match types for |
Responses
Result of the validation check.
application/json
| Field | Description |
|---|---|
messagerequired |
string A message indicating the result of the request. This will be |
api_referencerequired |
string (uuid) A unique identifier for this request. This can be used to track the request in the logs. |
match_resultsrequired |
array of objects Candidate rows returned by the search, one row per matched person (never one row per person-and-address). Always an array. When When the request supplied an address and the candidate has several addresses on file, the address-component outcomes ( Each row only includes the fields that were actually evaluated. Fields that the caller did not supply are omitted from the row entirely (they are not returned as |
match_results[]. |
string First name match outcome (uses the graded ladder). Omitted when not supplied in the request. |
match_results[]. |
string Middle name match outcome. |
match_results[]. |
string Last name match outcome. |
match_results[]. |
string Birth date match outcome. |
match_results[]. |
string Roll-up address outcome derived from the four address components. |
match_results[]. |
string Street-line component of the address comparison. Omitted when no address was supplied. |
match_results[]. |
string Suburb component of the address comparison. Omitted when no address was supplied. |
match_results[]. |
string State component of the address comparison. Omitted when no address was supplied. |
match_results[]. |
string Postcode component of the address comparison. Omitted when no address was supplied. |
match_results[]. |
string Match outcome for the supplied |
match_results[]. |
string Match outcome for the supplied |
match_results[]. |
string Match outcome for the supplied |
match_results[]. |
string Match outcome for the supplied |
match_results[]. |
string Match outcome for the supplied |
match_results[]. |
string Match outcome for the supplied |
match_results[]. |
string Match outcome for the supplied |
match_results[]. |
string Match outcome for the supplied |
Unexpected error.
application/json
| Field | Description |
|---|---|
message |
string A message indicating the error. |