extra.identity_aml
Screening results from the AML provider, present on any flow with a screening step bound to its Decision Flow.
Structure
Section titled “Structure”comply_advantage appears twice, nested inside itself. The outer array is one
entry per screening pass; the inner is one entry per search within it.
extra.identity_aml└── comply_advantage[] one screening pass ├── input what was screened ├── result ← AGGREGATE verdict, read this ├── timestamp ├── values_list flags the Decision Flow acts on └── output └── comply_advantage[] one search ├── input ├── result ← PER-SEARCH verdict └── output ├── code provider HTTP status ├── status └── content.data ← raw provider response ├── hits[] ├── total_hits ├── match_status └── filtersWhich path to read
Section titled “Which path to read”| What you want | Path |
|---|---|
| Verdict across all searches | extra.identity_aml.comply_advantage[0].result |
| Verdict for one search | …comply_advantage[0].output.comply_advantage[0].result |
| Raw provider hits | …output.comply_advantage[0].output.content.data.hits |
| What was screened | extra.identity_aml.comply_advantage[0].input |
Read the aggregate result. The raw path is seven levels deep and its shape is
the provider’s, not ours — treat it as evidence to archive, not as an interface.
The aggregate verdict
Section titled “The aggregate verdict”| Field | Type | Notes |
|---|---|---|
is_any_found | boolean | Any list match at all. |
is_all_found | boolean | True when every search matched. Equivalent to is_any_found on a single-applicant flow. |
is_any_in_sanctions | boolean | Matched a sanctions list. |
is_all_in_sanctions | boolean | True when every search matched a sanctions list. |
is_any_in_pep | boolean | Matched a politically-exposed-person list. |
is_all_in_pep | boolean | True when every search matched a PEP list. |
is_any_in_warnings | boolean | Matched a regulator or law-enforcement warning list. |
is_all_in_warnings | boolean | True when every search matched a warning list. |
is_any_in_adverse_media | boolean | Matched adverse media. |
is_all_in_adverse_media | boolean | True when every search matched adverse media. |
is_any_in_fitness_probity | boolean | Matched a fitness-and-probity list. |
is_all_in_fitness_probity | boolean | True when every search matched a fitness-and-probity register. |
Five signals, each as an is_any_* and an is_all_* twin. For a single-applicant
flow the two are equivalent — use is_any_*.
{ "is_all_found": true, "is_any_found": true, "is_all_in_pep": true, "is_any_in_pep": true, "is_all_in_warnings": false, "is_any_in_warnings": false, "is_all_in_sanctions": true, "is_any_in_sanctions": true, "is_all_in_adverse_media": false, "is_any_in_adverse_media": false, "is_all_in_fitness_probity": false, "is_any_in_fitness_probity": false}{ "is_all_found": false, "is_any_found": false, "is_all_in_pep": false, "is_any_in_pep": false, "is_all_in_warnings": false, "is_any_in_warnings": false, "is_all_in_sanctions": false, "is_any_in_sanctions": false, "is_all_in_adverse_media": false, "is_any_in_adverse_media": false, "is_all_in_fitness_probity": false, "is_any_in_fitness_probity": false}What each signal means
Section titled “What each signal means”| Flag | Matched against |
|---|---|
is_any_in_sanctions |
Sanctions lists — UN, OFAC, HM Treasury, EU and national equivalents |
is_any_in_pep |
Politically exposed persons |
is_any_in_warnings |
Regulator and law-enforcement warning lists |
is_any_in_adverse_media |
Adverse media |
is_any_in_fitness_probity |
Fitness-and-probity registers |
is_any_found |
Any of the above |
The mapping to your own decision is a policy matter, not an API one. UpPass reports; you decide.
What was screened
Section titled “What was screened”| Field | Type | Notes |
|---|---|---|
first_name | string | Given name that was screened, taken from answers.full_name_first_name — the
applicant-editable field, not the read-only OCR field. |
last_name | string | Family name that was screened, taken from answers.full_name_last_name. |
date_of_birth | stringdate | Only the year is used as a search filter. |
{ "last_name": "Example", "first_name": "Anucha", "date_of_birth": "1970-01-01"}The per-search verdict
Section titled “The per-search verdict”| Field | Type | Notes |
|---|---|---|
is_found | boolean | Any list match at all for this search. |
total_hits | integer | Number of matching records. |
is_in_sanctions | boolean | Matched a sanctions list — UN, OFAC, HM Treasury, EU or a national equivalent. |
is_in_pep | boolean | Matched a politically-exposed-person list. |
is_in_warnings | boolean | Matched a regulator or law-enforcement warning list. |
is_in_adverse_media | boolean | Matched an adverse-media record. |
is_in_fitness_probity | boolean | Matched a fitness-and-probity register. |
Same signals without the any/all distinction, plus total_hits.
Screening limits
Section titled “Screening limits”| Field | Type | Notes |
|---|---|---|
fuzziness | number | Provider fuzzy-matching tolerance, 0–1. 0 means exact matching only — a
different transliteration of the same name will not match. |
exact_match | boolean | Whether every query term had to match exactly. |
birth_year | integer | Year extracted from the applicant's date of birth. Only the year is filtered on, so a same-name match in the same year surfaces even when day and month differ. |
types | array<string> | List categories searched. Empty means all categories. |
country_codes | array<string> | Country filter applied. Empty means no country restriction. |
remove_deceased | integer | 1 excludes records marked deceased; 0 keeps them. |
{ "types": [], "fuzziness": 0, "birth_year": 1970, "exact_match": true, "country_codes": [], "remove_deceased": 0}The raw provider response
Section titled “The raw provider response”| Field | Type | Notes |
|---|---|---|
id | integer | Provider search ID. |
ref | string | Provider search reference. |
search_term | string | The name string the provider searched, as normalised by the provider. |
submitted_term | string | The name string as submitted, before provider normalisation. |
match_status | string |
|
risk_level | string | Provider risk banding. unknown on an automated search that no one has
adjudicated — do not treat it as a risk assessment. |
total_hits | integer | Number of matching records in hits, before any adjudication. |
total_matches | integer | Number of records the provider counts as matches. Equals total_hits on a fresh search. |
total_blacklist_hits | integer | Matches against your own uploaded blacklist, if the workspace maintains one. |
filters | object | Search parameters actually used. fuzziness: 0 with exact_match: true
means no fuzzy matching, and only the birth year is filtered on. |
hits | array<AmlHit> | Matching records. Empty when match_status is no_match. |
blacklist_hits | array<object> | Matches against your own uploaded blacklist. |
tags | array<object> | Provider-side tags applied to this search. |
labels | array<string> | Provider-side labels applied to this search. |
limit | integer | Provider result cap for this search. |
offset | integer | Pagination offset used for this search. |
client_ref | stringnullable | Provider-side client reference. Not populated by UpPass. |
assignee_id | integer | Provider account identifiers. Internal to the screening provider. |
searcher_id | integer | Provider account that ran the search. Internal to the screening provider. |
created_at | string | Provider timestamp. Space-separated, not ISO-8601. |
updated_at | string | When the provider last updated this search record. Space-separated, not ISO-8601. |
match_status is the provider’s triage state:
| Value | Meaning |
|---|---|
no_match |
Nothing found |
potential_match |
Found, not yet adjudicated |
false_positive |
Adjudicated as not the applicant |
true_positive |
Adjudicated as the applicant |
unknown |
Not set |
A fresh automated search returns no_match or potential_match. The adjudicated
values appear after a human review in the Portal.
One hit
Section titled “One hit”| Field | Type | Notes |
|---|---|---|
score | numberfloat | Provider match score. Higher is a stronger match. |
match_types | array<string> | Why this record matched. |
match_types_details | array<object> | Per-source breakdown of which query terms matched. |
doc | object | The matched record. |
id | string | Provider's stable identifier for this record. Use it to deduplicate across searches. |
name | string | Primary name on the matched record. |
entity_type | string |
|
types | array<string> | Categories this record belongs to — for example sanction, pep,
pep-class-1, warning, fitness-probity, or one of the
adverse-media-* families. |
sources | array<string> | Source lists carrying this record. |
aka | array<object> | Known aliases. Can run to several hundred entries. |
fields | array<object> | Attributes per source — nationality, date of birth, passport numbers, addresses, designation acts, programme names. |
media | array<object> | Adverse-media articles. Present on adverse-media matches only. |
associates | array<object> | Related entities named by the source lists. |
keywords | array<string> | Provider-assigned keywords for the record. |
assets | array<object> | Provider-hosted documents and images for this record. |
source_notes | object | Provenance for each entry in sources. |
created_utc | stringdate-time | When the provider first created this record. |
last_updated_utc | stringdate-time | When the provider last updated the record. Useful for judging how current a match is. |
{ "doc": { "id": "EXAMPLEDOCID000", "name": "Anucha Example", "entity_type": "person", "types": [ "sanction" ], "aka": [ { "name": "A. Example" }, { "name": "Anucha Exampl" }, { "name": "__TRIMMED__ a real record can carry several hundred aliases" } ], "fields": [ { "name": "Nationality", "value": "Exampleland", "source": "un-consolidated" }, { "tag": "date_of_birth", "name": "Date of Birth", "value": "1970-01-01", "source": "un-consolidated" }, { "tag": "passport", "name": "Passport", "value": "Passport: X0000000 Exampleland", "source": "un-consolidated" }, { "name": "Program", "value": "Example sanctions programme", "source": "un-consolidated" }, { "name": "Un Listing Id", "value": "EXi.000", "source": "un-consolidated" }, { "name": "__TRIMMED__", "value": "a real record carries ~120 field entries across a dozen sources" } ], "sources": [ "un-consolidated", "hm-treasury-list", "dfat-australia-list", "swiss-seco-list", "__TRIMMED__ source list truncated" ], "source_notes": { "un-consolidated": { "url": "https://scsanctions.un.org/consolidated/", "name": "United Nations Consolidated", "aml_types": [ "sanction" ], "country_codes": [ "XX" ], "listing_started_utc": "2001-01-01T00:00:00Z" } }, "associates": [], "keywords": [], "media": [], "created_utc": "2020-01-01T00:00:00Z", "last_updated_utc": "2026-01-01T00:00:00Z" }, "score": 1.9, "match_types": [ "aka_exact", "year_of_birth" ], "match_types_details": [ { "sources": [ "United Nations Consolidated" ], "aml_types": [ "sanction" ], "matching_name": "Anucha Example", "name_matches": [ { "query_term": "anucha", "match_types": [ "exact_match" ] }, { "query_term": "example", "match_types": [ "exact_match" ] } ], "secondary_matches": [ { "query_term": "1970", "match_types": [ "exact_birth_year_match" ] } ] } ]}doc.types is the categorisation to branch on — sanction, pep, pep-class-1,
warning, fitness-probity, or one of the adverse-media-* families. doc.sources
names the lists carrying the record, using the provider’s stable identifiers
(un-consolidated, hm-treasury-list, and so on).
When this object is absent
Section titled “When this object is absent”extra.identity_aml is present only when a Decision Flow with a screening step ran.
It is omitted — not empty — on flows without one, and on applications that were
never submitted.
Guard every access:
extra?.identity_aml?.comply_advantage?.[0]?.result?.is_any_in_sanctionsAn absent object means screening did not run, which is not the same as a clean result. Treat it as a review signal rather than a pass.