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

# Reference

> Operations, events, and error mappings for the ComplyAdvantage Connector

export const VendorApiVersionTag = ({versions, label = "Supports"}) => {
  useEffect(() => {
    if (!versions || versions.length === 0) {
      return undefined;
    }
    const findAndSegmentStart = (reference, target) => {
      let i = 0;
      while (i < reference.length && i < target.length && reference[i] === target[i]) {
        i += 1;
      }
      let start = i;
      while (start > 0 && (/[0-9.vR]/).test(target[start - 1])) {
        start -= 1;
      }
      return start;
    };
    const formatText = () => {
      const suffix = " operations";
      if (versions.length === 1) {
        return `${label} ${versions[0]}${suffix}`;
      }
      const [first, ...rest] = versions;
      const last = rest[rest.length - 1];
      const andStart = findAndSegmentStart(first, last);
      const lead = first.slice(0, andStart);
      if (versions.length === 2) {
        return `${label} ${first} and ${last.slice(andStart)}${suffix}`;
      }
      const stems = versions.map(version => version.slice(andStart));
      return `${label} ${lead}${stems.slice(0, -1).join(", ")}, and ${stems[stems.length - 1]}${suffix}`;
    };
    const text = formatText();
    const mountCallout = () => {
      const titleRow = document.querySelector("#page-title")?.parentElement;
      if (!titleRow) {
        return null;
      }
      let callout = titleRow.querySelector("[data-vendor-api-version-callout='true']");
      if (!callout) {
        callout = document.createElement("div");
        callout.dataset.vendorApiVersionCallout = "true";
        callout.className = "vendor-api-version-callout vendor-api-version-callout--in-title";
        titleRow.appendChild(callout);
      }
      callout.replaceChildren();
      const textEl = document.createElement("span");
      textEl.className = "vendor-api-version-text";
      textEl.textContent = text;
      callout.appendChild(textEl);
      return callout;
    };
    let callout = mountCallout();
    if (callout) {
      return () => {
        callout?.remove();
      };
    }
    const observer = new MutationObserver(() => {
      callout = mountCallout();
      if (callout) {
        observer.disconnect();
      }
    });
    observer.observe(document.body, {
      childList: true,
      subtree: true
    });
    return () => {
      observer.disconnect();
      callout?.remove();
    };
  }, [versions, label]);
  return null;
};

export const vendorApiVersions = ["ComplyAdvantage Mesh API v2.0"];

<VendorApiVersionTag versions={vendorApiVersions} />

The ComplyAdvantage integration screens customers against global watchlists for KYC compliance and supports ongoing monitoring, remediation, and alert delivery to downstream consumers. This connector supports KYC customer screening only; it does not support KYB business screening. For setup steps, see [Get started](/connectors/kyc-kyb/complyadvantage/get-started).

## Supported operations

### Customer screening

* Screens a customer against global watchlists for KYC compliance. Returns whether the subject appears in Sanctions, Warnings, Fitness and Probity lists, Watchlists, Politically Exposed Persons (PEPs) registers, or Adverse Media lists.
* When Mesh returns profiles, the connector hydrates `screeningAlerts[]` using `GET /v2/alerts/{alert_identifier}/risks`.
* Response includes `caseReference`, `caseIdentifier`, `screeningCaseReference` (when available), and per-alert `alertReference`, `riskReference`, `riskCategories`, `matchStrength`, and `matchedPartyDetails`.

### Ongoing monitoring (at screening)

* Request monitoring for a customer as part of the instant screening request. When monitoring is active and the subject starts appearing on any list, ComplyAdvantage raises monitoring events that the connector processes and publishes to Sync Hub.

### Configure party monitoring

* Enable or disable ongoing monitoring for a party you already screened (identified by `caseReference` from the screening response).
* Set `identityProofingTaskDescription.monitoringFlag` to `Y` or `N` (the connector also accepts boolean `true` or `false`).
* To use a specific monitoring profile, include `identityProofingTaskDescription.monitoringProfileId` in the request.
* **Unified API:** `POST {partyLifecycleBaseURL}/customer-screening/config-monitoring`
* **ComplyAdvantage Mesh:** Update customer monitoring configuration

### External status update (risk decision)

* Record an analyst disposition from the consuming app so ComplyAdvantage Mesh reflects the same risk status on the vendor side.
* **Unified API:** `POST {partyLifecycleBaseURL}/screening-assessment/match-profiles/dispositions`
* **Request body:** `disposition` (one of `NOT_REVIEWED`, `IN_REVIEW`, `FALSE_POSITIVE`, `TRUE_POSITIVE`), plus `alertReference` and `riskIdentifier`
* **ComplyAdvantage Mesh:** `POST /v2/alerts/{alert_identifier}/risks/{risk_identifier}/decision` (connector maps `disposition` to Mesh `decision`)
* On success, the API returns confirmation that Mesh accepted the decision.

### Mute screening alerts

* Suppress future alerts for a profile remediated as a false positive. Typically invoke this immediately after a successful `FALSE_POSITIVE` disposition (sequential call, not a combined API).
* **Unified API:** `POST {partyLifecycleBaseURL}/screening-assessment/match-profiles/suppression`
* **Request body:** `caseReference`, `riskIdentifier`, and `riskProfileIdentifier` (required); optional `caseReferenceId`, `suppressionReason`, and `customFields`
* **ComplyAdvantage Mesh:** `POST /v2/alerts/mutes`

## Events

Synchronous operations (screening, monitoring configuration, disposition, mute) return their result in the API response.

ComplyAdvantage Mesh raises ongoing monitoring alerts asynchronously. The connector does not expose a Grand Central polling API for these. When Mesh sends inbound webhook events (`CASE_CREATED`, `CASE_ALERT_LIST_UPDATED`), the inbound connector hydrates alert detail where required and **publishes unified monitoring events to Sync Hub** for downstream consumers.

| `data.eventType`          | ComplyAdvantage inbound webhook | Connector action                                                                                      |
| :------------------------ | :------------------------------ | :---------------------------------------------------------------------------------------------------- |
| `CASE_CREATED`            | `CASE_CREATED`                  | Publish unified monitoring event to Sync Hub (`screeningAlerts` may be empty)                         |
| `CASE_ALERT_LIST_UPDATED` | `CASE_ALERT_LIST_UPDATED`       | Hydrate alerts using GET risks; refresh `screeningAlerts[]` per alert identifier; publish to Sync Hub |

The `data` payload aligns with the `customer-screening-response` schema where fields overlap. `CASE_ALERT_LIST_UPDATED` events include enriched risk profile detail under `vendorSpecificFieldsAml.complyAdvantage.riskProfile`.

Consumers receive these events by subscribing to the Sync Hub topic configured for your environment. For setup, see [Sync Hub overview](/platform/sync-hub/overview) and [Get started](/connectors/kyc-kyb/complyadvantage/get-started).

## Error mapping

The following table maps each ComplyAdvantage error code to its Grand Central counterpart:

| ComplyAdvantage code    | Grand Central code |
| :---------------------- | :----------------- |
| `Unauthorized`          | `GC002`            |
| `Conflict`              | `GC003`            |
| `Forbidden`             | `GC004`            |
| `Invalid workflow_type` | `GC025`            |
| `Validation error`      | `GC025`            |
| `Generic Error`         | `GC027`            |
| `Too many requests`     | `GC031`            |
| `Not found`             | `GC054`            |

<Info>
  For a complete list of Grand Central error codes and their descriptions, see [Status codes, errors, and responses](/connectors/reference/error-codes).
</Info>
