curl -X POST https://verification.didit.me/v3/aml/ \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: aml-user-1234-2026-08-20' \
-d '{
"full_name": "Antonio Ejemplo Modelo",
"entity_type": "person",
"date_of_birth": "1972-02-29",
"nationality": "ES",
"include_adverse_media": false,
"vendor_data": "user-1234"
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.aml.screen(
full_name="Antonio Ejemplo Modelo",
entity_type="person",
date_of_birth="1972-02-29",
nationality="ES",
include_adverse_media=False,
vendor_data="user-1234",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.aml.screen({
full_name: "Antonio Ejemplo Modelo",
entity_type: "person",
date_of_birth: "1972-02-29",
nationality: "ES",
include_adverse_media: false,
vendor_data: "user-1234",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.AML.Screen(ctx, didit.AMLScreenParams{
FullName: "Antonio Ejemplo Modelo",
EntityType: didit.Some(didit.AMLScreenParamsEntityType("person")),
DateOfBirth: didit.String("1972-02-29"),
Nationality: didit.String("ES"),
IncludeAdverseMedia: didit.Bool(false),
VendorData: didit.String("user-1234"),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.time.LocalDate;
import me.didit.Didit;
import me.didit.types.AmlScreenParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.aml().screen(AmlScreenParams.builder()
.fullName("Antonio Ejemplo Modelo")
.entityType(AmlScreenParams.EntityType.of("person"))
.dateOfBirth(LocalDate.parse("1972-02-29"))
.nationality("ES")
.includeAdverseMedia(false)
.vendorData("user-1234")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->aml->screen([
'full_name' => 'Antonio Ejemplo Modelo',
'entity_type' => 'person',
'date_of_birth' => '1972-02-29',
'nationality' => 'ES',
'include_adverse_media' => false,
'vendor_data' => 'user-1234',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.aml.screen(
full_name: "Antonio Ejemplo Modelo",
entity_type: "person",
date_of_birth: "1972-02-29",
nationality: "ES",
include_adverse_media: false,
vendor_data: "user-1234"
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Aml.ScreenAsync(new AmlScreenParams
{
FullName = "Antonio Ejemplo Modelo",
EntityType = new AmlScreenParamsEntityType("person"),
DateOfBirth = "1972-02-29",
Nationality = "ES",
IncludeAdverseMedia = false,
VendorData = "user-1234",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "d27c5509-7a66-45a9-b05e-d69d9f4c336a",
"aml": {
"status": "Approved",
"total_hits": 0,
"entity_type": "person",
"hits": [],
"score": 0,
"screened_data": {
"full_name": "Maximilian Mustermann-Doe",
"date_of_birth": "1992-03-14",
"nationality": "DE",
"document_number": null
},
"warnings": []
},
"vendor_data": "user-1234",
"metadata": {
"internal_ref": "abc-123"
},
"created_at": "2026-06-11T10:21:07.013938+00:00"
}AML Screening API: Sanctions, PEP & Watchlists
Real-time AML screening against 1,300+ global watchlists. Sanctions, PEP, adverse media. Two-score risk system, $0.20/check, no monthly minimums.
curl -X POST https://verification.didit.me/v3/aml/ \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: aml-user-1234-2026-08-20' \
-d '{
"full_name": "Antonio Ejemplo Modelo",
"entity_type": "person",
"date_of_birth": "1972-02-29",
"nationality": "ES",
"include_adverse_media": false,
"vendor_data": "user-1234"
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.aml.screen(
full_name="Antonio Ejemplo Modelo",
entity_type="person",
date_of_birth="1972-02-29",
nationality="ES",
include_adverse_media=False,
vendor_data="user-1234",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.aml.screen({
full_name: "Antonio Ejemplo Modelo",
entity_type: "person",
date_of_birth: "1972-02-29",
nationality: "ES",
include_adverse_media: false,
vendor_data: "user-1234",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.AML.Screen(ctx, didit.AMLScreenParams{
FullName: "Antonio Ejemplo Modelo",
EntityType: didit.Some(didit.AMLScreenParamsEntityType("person")),
DateOfBirth: didit.String("1972-02-29"),
Nationality: didit.String("ES"),
IncludeAdverseMedia: didit.Bool(false),
VendorData: didit.String("user-1234"),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.time.LocalDate;
import me.didit.Didit;
import me.didit.types.AmlScreenParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.aml().screen(AmlScreenParams.builder()
.fullName("Antonio Ejemplo Modelo")
.entityType(AmlScreenParams.EntityType.of("person"))
.dateOfBirth(LocalDate.parse("1972-02-29"))
.nationality("ES")
.includeAdverseMedia(false)
.vendorData("user-1234")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->aml->screen([
'full_name' => 'Antonio Ejemplo Modelo',
'entity_type' => 'person',
'date_of_birth' => '1972-02-29',
'nationality' => 'ES',
'include_adverse_media' => false,
'vendor_data' => 'user-1234',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.aml.screen(
full_name: "Antonio Ejemplo Modelo",
entity_type: "person",
date_of_birth: "1972-02-29",
nationality: "ES",
include_adverse_media: false,
vendor_data: "user-1234"
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Aml.ScreenAsync(new AmlScreenParams
{
FullName = "Antonio Ejemplo Modelo",
EntityType = new AmlScreenParamsEntityType("person"),
DateOfBirth = "1972-02-29",
Nationality = "ES",
IncludeAdverseMedia = false,
VendorData = "user-1234",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "d27c5509-7a66-45a9-b05e-d69d9f4c336a",
"aml": {
"status": "Approved",
"total_hits": 0,
"entity_type": "person",
"hits": [],
"score": 0,
"screened_data": {
"full_name": "Maximilian Mustermann-Doe",
"date_of_birth": "1992-03-14",
"nationality": "DE",
"document_number": null
},
"warnings": []
},
"vendor_data": "user-1234",
"metadata": {
"internal_ref": "abc-123"
},
"created_at": "2026-06-11T10:21:07.013938+00:00"
}Authorizations
Your application's API key, from Developers -> API keys in the Business Console. The primary key has full access. A named key can be scoped: none, read or write per resource, limited to some workflows or to approved sessions, to a list of IP addresses, and to an expiry date. 401 means the key is wrong, revoked or expired; 403 means no key was sent, the key has no access to this resource or action, or the request came from an address outside its IP list; 404 on a session route means the session is outside the key's workflows or statuses. A key without media access receives image, video and PDF URLs as null, and a key without sessions write receives session links and tokens as null. See https://docs.didit.me/console/api-keys.
Headers
Body
Identity document number. Not weighted — acts as a golden key: an exact match overrides the hit's match_score to 100, a hard mismatch penalizes it. Sent to the screening provider as a search filter only when it is 2-50 characters; a value outside that range is accepted and stored, and the screening still runs and is billed, just not narrowed by document number.
Sandbox-only scenario slug. Only accepted when the API key belongs to a sandbox-mode application; rejected on live applications. A standalone screening has no session to arm, so the slug goes on the screening request itself: decline_aml_hit returns one production-shaped hit and settles the screening as Declined, review_aml_possible_match settles it In Review, and a scenario that arms no AML outcome leaves the screening clean. See the scenario catalog at GET /v1/sandbox/scenarios/ or Sandbox & Test Data.
"decline_aml_hit"
Response
Screening completed. aml.status reflects your thresholds; every hit at or above the internal inclusion floor is listed in aml.hits with its identity match_score, entity risk_score, and a score_breakdown explaining the match.