> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# AML screening warnings

> Understand AML warning codes: POSSIBLE_MATCH_FOUND and COULD_NOT_PERFORM_AML_SCREENING. Configure thresholds and re-run behavior when KYC data is missing.

export const WarningTypes = () => <div style={{
  display: "flex",
  flexDirection: "column",
  gap: "12px",
  margin: "16px 0"
}}>
    {WARNING_TYPES.map(w => <div key={w.type} style={{
  display: "flex",
  alignItems: "flex-start",
  gap: "12px",
  padding: "12px 16px",
  borderRadius: "8px",
  background: w.bg
}}>
        <span style={{
  fontSize: "16px",
  lineHeight: "24px"
}}>{w.icon}</span>
        <div>
          <div style={{
  fontWeight: 600,
  color: w.color,
  marginBottom: "2px"
}}>
            <code style={{
  background: "transparent",
  color: w.color,
  fontWeight: 600,
  padding: 0
}}>
              {w.type}
            </code>
          </div>
          <div style={{
  fontSize: "14px",
  lineHeight: "20px",
  color: "#374151"
}}>
            {w.description}
          </div>
        </div>
      </div>)}
  </div>;

## Overview

AML screening emits a small set of warning tags on the `warnings[]` array of each entry in `aml_screenings[]`. The two tags below are the **only** AML warnings Didit produces — everything else you see on a hit is encoded in the hit's own fields (`risk_view`, `match_score`, `risk_score`, `sanction_matches[]`, …) rather than as a warning. Both workflow sessions and the standalone AML API emit `POSSIBLE_MATCH_FOUND` the same way.

The status returned on the AML record (`Approved`, `In Review`, `Declined`) is derived from the aggregate `score` and your thresholds — the warnings tag the same conditions so you can react to them programmatically. See [AML risk score](/core-technology/aml-screening/aml-risk-score) for how thresholds map to status.

## Warnings produced

| Risk                              | Cause                                                                                                                                                                                                                                      | `log_type`                                                                                                    | Affects status                                                                                               | Recommended remediation                                                                                                                                                                                                                                                               |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `POSSIBLE_MATCH_FOUND`            | The aggregate `score` is non-zero and above the `aml_score_approve_threshold` (default `80`) — at least one possible-match hit crosses your risk band. (The standalone AML API also emits it when the score exactly equals the threshold.) | `warning`; escalates to `error` when the score also exceeds the `aml_score_review_threshold` (default `100`). | `In Review` when the score is above the approve threshold; `Declined` when it is above the review threshold. | Review each hit in `hits[]`. Use the AML hit-status endpoint to mark hits `Confirmed Match`, `False Positive`, or `Inconclusive`. Hit updates fire a `data.updated` webhook but do not recompute the AML status — set the final status via the AML status endpoint or console review. |
| `COULD_NOT_PERFORM_AML_SCREENING` | The KYC record is missing one or more of `full_name`, `date_of_birth`, or `issuing_state`. No billable screening call is made.                                                                                                             | `warning`                                                                                                     | Forces `In Review`.                                                                                          | Populate the missing fields on the KYC record. AML re-runs automatically once all three are present — the stale warning log is removed and no manual retrigger is needed.                                                                                                             |

Warnings are stored with `feature: "AML"` and follow the standard [warning object](/reference/data-models#warning-object) shape.

## Configurable settings

Per-workflow-node AML controls (also accepted as options on the standalone AML API):

* **`aml_score_approve_threshold`** — default `80`. A non-zero score above it produces `POSSIBLE_MATCH_FOUND` and routes the AML check to `In Review`. Scores at or below it do **not** produce the warning in session workflows, regardless of hit count.
* **`aml_score_review_threshold`** — default `100`. A score above it auto-declines the AML check (with the default of `100` this never triggers until you lower it).
* **`aml_match_score_threshold`** — default `93`. Per-hit classification: hits with `match_score` below it start as `False Positive` and are excluded from the aggregate score; at or above it they start as `Unreviewed`.
* **Match-score weights** — `aml_name_weight` / `aml_dob_weight` / `aml_country_weight`, defaults `60` / `25` / `15` (must sum to 100). See [AML match score](/core-technology/aml-screening/aml-match-score).
* **Ongoing monitoring** — when enabled, AML re-screens the subject as datasets change and re-emits the report plus a `status.updated` (status changed) or `data.updated` (hits changed) webhook.

<Note>
  When `COULD_NOT_PERFORM_AML_SCREENING` fires, the AML check sits at `In Review` until the missing identity fields are supplied. Once Didit has the full name, date of birth, and issuing state, AML re-runs automatically and the warning clears — there is no manual retrigger.
</Note>

## Examples

### `POSSIBLE_MATCH_FOUND` (score above approve threshold)

```json theme={null}
{
  "warnings": [
    {
      "feature": "AML",
      "risk": "POSSIBLE_MATCH_FOUND",
      "additional_data": null,
      "log_type": "warning",
      "short_description": "Possible match found in AML screening",
      "long_description": "The Anti-Money Laundering (AML) screening process identified potential matches with watchlists or high-risk databases, requiring further review.",
      "node_id": "aml-1"
    }
  ]
}
```

### `COULD_NOT_PERFORM_AML_SCREENING` (missing KYC fields)

```json theme={null}
{
  "warnings": [
    {
      "feature": "AML",
      "risk": "COULD_NOT_PERFORM_AML_SCREENING",
      "additional_data": null,
      "log_type": "warning",
      "short_description": "Could not retrieve data from KYC for performing AML Screening",
      "long_description": "The system encountered issues accessing or processing Know Your Customer (KYC) data necessary for conducting the Anti-Money Laundering (AML) screening. please fill the KYC full name, birth date, issuing state and document number to automatically proceed with AML screening.",
      "node_id": "aml-1"
    }
  ]
}
```

## Related

* [AML report](/core-technology/aml-screening/report-aml-screening) — full response shape, hit fields, status semantics
* [AML risk score](/core-technology/aml-screening/aml-risk-score) — how the aggregate score is calculated
* [AML match score](/core-technology/aml-screening/aml-match-score) — per-hit confidence
* [Continuous AML monitoring](/core-technology/aml-screening/continuous-monitoring-aml-screening) — monitoring lifecycle
* [Data models — AML screening](/reference/data-models#aml-screening) — canonical schema, including the [Warning object](/reference/data-models#warning-object)

### Warning types

<WarningTypes />
