Skip to main content

Overview

iDenfy introduced AML Monitoring v3 with an upgraded screening engine. Existing v2 integrations continue to work — the API automatically handles backward compatibility and your webhooks will look exactly as they always have.
There is no announced shutdown date for v2 compatibility. However, the mapping layer exists for continuity, not as a permanent solution. We recommend planning migration to v3 to ensure long-term stability and access to the full capabilities of the screening engine.
This guide covers:
  • What changed between v2 and v3
  • Request body field changes with examples
  • The complete webhook payload reference
  • The recommended migration path and a complete migration checklist

What Changed

Status Field Names

v3 introduced a new status field with updated values. The existing alertStatus field continues to return v2 values for all integrations. Both fields are present in all webhook payloads. If you are on v2, use alertStatus and ignore status.

Request Body Fields

When migrating to v3 endpoints, the request body structure changes. v3 uses a nested structure — a top-level object wrapping an amlCheck object with separate input (who to screen) and filter (what to screen for) sub-objects. Person monitoring: Company monitoring:
The name + surnamefullName change is the most common cause of silent failures. If you send name and surname separately to a v3 endpoint, the fields are ignored and the check runs with no name.
Example v3 request body (person):

Datasets

v3 lets you control which screening databases to check via the amlCheck.filter.datasets array. This replaces the implicit fixed set from v2, where adverse media was a separate boolean toggle.
datasets is required. Omitting it will result in a validation error. Specify at least one dataset value from the table above.

False Positive Handling

v2 and v3 handle false positives differently — there is no direct 1:1 equivalent endpoint.
  • v2 (POST /api/v2/add-whitelist) marked an entire monitoring subject as whitelisted using their monitoringId.
  • v3 (DELETE /aml/monitorings/{id}/profiles/{profileId}/) removes a specific matched profile from the results, leaving the monitoring record and any other matches intact.
The v3 approach is more granular — you dismiss individual matches rather than the whole subject. The profileId is returned inside each match entry in the monitoring response and webhook payload. Store or pass through this ID in your integration to support false positive dismissal.

Webhook Reference

Both v2 and v3 send the same webhook payload structure. v3 adds the status field and an optional amlCheck object — both can be safely ignored if you have not yet migrated.

Headers

Payload Fields

If you are on v3, use the amlCheck object from the webhook payload for all screening results. The top-level fields below exist only for backward compatibility with v2 integrations and should not be relied on in new or migrated integrations.
Top-level (v2 compatibility fields): amlCheck — v3 screening results (use this on v3): The amlCheck object contains the full World-Check screening output broken down by dataset, with per-finding profileId values used for false positive dismissal. Refer to the API Reference for the complete schema. results[] — v2 compatibility, per-category check: data[] — matched profile:

Migrating to v3

AML Single Check Flow

Use POST /aml/checks/ to screen a subject once without ongoing monitoring.
1

Create an AML Check

Submit a person or company for screening. The response includes a check ID and any matched profiles.

Create AML Check

POST /aml/checks/ — Screen a subject against sanctions, PEPs, and adverse media.
The response body includes a profiles array. Each entry contains a profileId you can use in the next step.
2

Retrieve a Matched Profile

Use the check ID and profile ID from the previous response to fetch the complete profile record — all sanctions entries, PEP tiers, and adverse media sources, regardless of the filters applied during the check.

Retrieve AML Profile

GET /aml/checks/{id}/profiles/{profileId}/ — Fetch full profile detail for a specific match.
Profile data is not filtered by the check’s configured datasets. Retrieve the full profile to see all available information for a matched entity.

AML Monitoring Flow

Monitoring is continuous screening — the system re-screens the entity daily and sends webhooks whenever status changes.
1

Create a Monitoring Record

Register a person or company for ongoing daily screening. The response returns a monitoringId used in all subsequent calls.

Create AML Monitoring

POST /aml/monitorings/ — Start ongoing screening with automatic status change alerts.
Use PATCH /aml/monitorings/{id}/ to extend the monitoring period or attach organizational tags.
2

Receive Webhook Alerts

The system fires an AML_MONITORING webhook each time the screening status changes. See the Webhook Reference above for the full payload and delivery details.
3

Retrieve Monitoring Status

Poll the monitoring record at any time to get the current status and latest results — useful for reconciling state if a webhook was missed.

Retrieve Monitoring

GET /aml/monitorings/{id}/ — Fetch a single monitoring record.

List All Monitored Entities

GET /aml/monitorings/ — List all monitoring records.
4

Manage the Monitoring Lifecycle

Pause, resume, or remove monitoring records as your compliance requirements change.

Start / Stop Monitoring

POST /aml/monitorings/{id}/stop/ or /start/ — Pause or resume without deleting.

Delete Monitoring

DELETE /aml/monitorings/{id}/ — Permanently remove a monitoring record.
To dismiss a specific false positive match without stopping monitoring, use DELETE /aml/monitorings/{id}/profiles/{profileId}/. See False Positive Handling above for details.
5

Generate a Compliance PDF (Optional)

Export the full screening history for a monitoring record as a PDF for audit trails and compliance records.

Generate Monitoring PDF

POST /aml/monitorings/{id}/pdf/ — Download a full-history PDF report.

Complete Migration Checklist

Use this as a final review before cutting over to v3. API endpoints: Request body — persons:
  • Combine name + surnameamlCheck.input.fullName
  • Rename type: "PERSON"userType: "PERSON"
  • Move nationalityamlCheck.input.nationality
  • Move dateOfBirthamlCheck.input.dateOfBirth
  • Remove monitorAdverseMedia — adverse media is not supported in v3
  • Rename autoExpirationExtensionisSubscribed
Request body — companies:
  • Rename nameamlCheck.input.companyName
  • Rename type: "COMPANY"userType: "COMPANY"
  • Rename nationalityamlCheck.input.country
Webhook handler:
  • Read status instead of (or alongside) alertStatus
  • Update status value comparisons: ACCEPTEDACTIVE, DECLINEDSTOPPED
  • Store profileId from match entries if you support false positive dismissal
Existing monitoring records created via v2 remain accessible. v2 and v3 records coexist in the system — your historical data is not affected by migration.