AML API
API reference for AML screening including sanctions, PEP, adverse media searches, and ongoing monitoring.
AML API
Screen individuals and entities against global sanctions lists, Politically Exposed Persons (PEP) databases, and adverse media sources for Anti-Money Laundering (AML) compliance.
Overview
AML API supports:
- Sanctions screening - OFAC, UN, EU, UK sanctions lists
- PEP screening - Politically exposed persons databases
- Adverse media - Negative news and financial crime mentions
- Ongoing monitoring - Continuous screening with alerts
1 Credit Basic search (sanctions + PEP) 3 Credits Comprehensive search (+ adverse media) 1 Credit Per person per month for monitoring
Create AML Screening
/api/v3/aml/screenings🔒 Auth Required1 CreditScreen an individual or entity
Perform AML screening on a person or company.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
searchType | string | Yes | INDIVIDUAL or ENTITY |
firstName | string | Yes* | First name (*required for individuals) |
lastName | string | Yes* | Last name (*required for individuals) |
entityName | string | Yes* | Company name (*required for entities) |
dateOfBirth | string | No | ISO 8601 date (YYYY-MM-DD) |
country | string | No | ISO 3166-1 alpha-2 country code |
categories | array | No | Categories to search (default: all) |
matchThreshold | number | No | Match threshold 0-100 (default: 80) |
applicantId | string | No | Link to existing applicant |
Search Categories
| Category | Description | Included in Basic | Included in Comprehensive |
|---|---|---|---|
SANCTIONS | Global sanctions lists | ✅ | ✅ |
PEP | Politically exposed persons | ✅ | ✅ |
ADVERSE_MEDIA | Negative news | ❌ | ✅ |
FINANCIAL_CRIME | Financial crime mentions | ❌ | ✅ |
LAW_ENFORCEMENT | Law enforcement lists | ❌ | ✅ |
Example Request
const response = await fetch('https://api.veriplus.co.uk/api/v3/aml/screenings', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
searchType: 'INDIVIDUAL',
firstName: 'John',
lastName: 'Doe',
dateOfBirth: '1990-01-15',
country: 'GB',
categories: ['SANCTIONS', 'PEP', 'ADVERSE_MEDIA'],
matchThreshold: 80,
applicantId: 'app_1234567890'
})
});
const data = await response.json();
console.log('Screening ID:', data.data.screeningId);
console.log('Matches found:', data.data.matchCount);Response
{
"success": true,
"data": {
"screeningId": "aml_abc123xyz",
"searchType": "INDIVIDUAL",
"status": "COMPLETED",
"matchCount": 2,
"riskLevel": "MEDIUM",
"creditsUsed": 3,
"matches": [
{
"matchId": "match_001",
"score": 92,
"category": "PEP",
"name": "John Michael Doe",
"dateOfBirth": "1990-01-15",
"country": "GB",
"position": "Former Member of Parliament",
"pepTier": "TIER_2",
"lastUpdated": "2024-01-10T00:00:00Z"
},
{
"matchId": "match_002",
"score": 85,
"category": "ADVERSE_MEDIA",
"name": "John Doe",
"headline": "Financial fraud investigation ongoing",
"source": "Financial Times",
"publishedAt": "2023-12-15T00:00:00Z",
"url": "https://ft.com/article/abc123"
}
],
"createdAt": "2024-01-15T10:30:00Z"
}
}Get Screening Results
/api/v3/aml/screenings/:id🔒 Auth Required0Retrieve screening results
Retrieve full screening results including all matches.
const screeningId = 'aml_abc123xyz';
const response = await fetch(
`https://api.veriplus.co.uk/api/v3/aml/screenings/${screeningId}`,
{
headers: {
'Authorization': `Bearer ${apiKey}`
}
}
);
const data = await response.json();
console.log('Risk level:', data.data.riskLevel);
console.log('Matches:', data.data.matches);List Screenings
/api/v3/aml/screenings🔒 Auth Required0List all AML screenings
Retrieve a paginated list of AML screenings.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
limit | number | Results per page (default: 20, max: 100) |
cursor | string | Pagination cursor |
riskLevel | string | Filter by risk level |
hasMatches | boolean | Filter by match presence |
applicantId | string | Filter by applicant |
createdFrom | string | ISO 8601 date |
createdTo | string | ISO 8601 date |
const params = new URLSearchParams({
riskLevel: 'HIGH',
hasMatches: 'true',
limit: '50'
});
const response = await fetch(
`https://api.veriplus.co.uk/api/v3/aml/screenings?${params}`,
{
headers: {
'Authorization': `Bearer ${apiKey}`
}
}
);
const data = await response.json();
console.log(`Found ${data.data.length} high-risk screenings`);Review Match
/api/v3/aml/screenings/:id/matches/:matchId/review🔒 Auth Required0Mark match as true/false positive
Review a match and mark as true positive, false positive, or uncertain.
const response = await fetch(
`https://api.veriplus.co.uk/api/v3/aml/screenings/${screeningId}/matches/${matchId}/review`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
decision: 'FALSE_POSITIVE',
notes: 'Different person with same name, different DOB'
})
}
);
const data = await response.json();
console.log('Match reviewed:', data.data);Decision Options:
TRUE_POSITIVE- Confirmed matchFALSE_POSITIVE- Not the same person/entityUNCERTAIN- Requires further investigation
Ongoing Monitoring
/api/v3/aml/monitoring🔒 Auth Required1 CreditEnable ongoing AML monitoring
Enable continuous monitoring for an applicant. Receive alerts when new matches appear.
1 Credit Per person per month
const response = await fetch('https://api.veriplus.co.uk/api/v3/aml/monitoring', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
applicantId: 'app_1234567890',
categories: ['SANCTIONS', 'PEP', 'ADVERSE_MEDIA'],
matchThreshold: 80,
notificationUrl: 'https://yourdomain.com/webhooks/aml'
})
});
const data = await response.json();
console.log('Monitoring ID:', data.data.monitoringId);Response
{
"success": true,
"data": {
"monitoringId": "mon_xyz789",
"applicantId": "app_1234567890",
"status": "ACTIVE",
"categories": ["SANCTIONS", "PEP", "ADVERSE_MEDIA"],
"lastChecked": "2024-01-15T10:30:00Z",
"nextCheckAt": "2024-01-16T10:30:00Z",
"creditsPerMonth": 1,
"createdAt": "2024-01-15T10:30:00Z"
}
}Monitoring Schedule: Checks run daily. Alerts sent when new matches found.
Stop Monitoring
/api/v3/aml/monitoring/:id🔒 Auth Required0Disable ongoing monitoring
Stop ongoing monitoring for an applicant.
const response = await fetch(
`https://api.veriplus.co.uk/api/v3/aml/monitoring/${monitoringId}`,
{
method: 'DELETE',
headers: {
'Authorization': `Bearer ${apiKey}`
}
}
);
if (response.ok) {
console.log('Monitoring stopped');
}Note: Credits already consumed for current month are not refunded.
Search Templates
/api/v3/aml/templates🔒 Auth Required0Create reusable search template
Create reusable search templates for consistent AML screening.
const response = await fetch('https://api.veriplus.co.uk/api/v3/aml/templates', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'High-Risk Customer',
description: 'Comprehensive screening for high-risk customers',
categories: ['SANCTIONS', 'PEP', 'ADVERSE_MEDIA', 'FINANCIAL_CRIME'],
matchThreshold: 70,
autoReviewRules: {
autoApprove: {
matchCount: 0
},
autoReject: {
sanctionsMatch: true
}
}
})
});
const data = await response.json();
console.log('Template ID:', data.data.templateId);Use Template in Screening:
const response = await fetch('https://api.veriplus.co.uk/api/v3/aml/screenings', {
method: 'POST',
body: JSON.stringify({
firstName: 'John',
lastName: 'Doe',
templateId: 'tmpl_abc123' // Use template instead of specifying categories
})
});Risk Levels
VeriPlus calculates overall risk level based on matches:
| Risk Level | Description | Action |
|---|---|---|
| CLEAR | No matches found | Accept |
| LOW | Low-confidence matches only | Review or accept |
| MEDIUM | Some matches, no sanctions | Manual review |
| HIGH | Strong matches or PEP | Enhanced due diligence |
| CRITICAL | Sanctions match | Reject |
Match Scoring
Match scores (0-100) indicate confidence:
| Score | Likelihood | Description |
|---|---|---|
| 90-100 | Very High | Strong match, multiple data points |
| 80-89 | High | Good match, consider true positive |
| 70-79 | Medium | Possible match, review needed |
| 60-69 | Low | Weak match, likely false positive |
| <60 | Very Low | Different person/entity |
Fuzzy Matching: Name variants, aliases, and transliterations automatically matched.
Webhooks
Receive real-time notifications for AML events:
Events:
aml.screening_completed- Screening finishedaml.match_found- Match detectedaml.monitoring_alert- New match in ongoing monitoringaml.sanctions_alert- Sanctions match (critical)
Webhook Payload:
{
"event": "aml.match_found",
"timestamp": "2024-01-15T10:32:14Z",
"data": {
"screeningId": "aml_abc123",
"applicantId": "app_1234567890",
"matchCount": 2,
"riskLevel": "HIGH",
"categories": ["SANCTIONS", "PEP"]
}
}See Webhooks Documentation for setup.
Data Sources
VeriPlus aggregates data from 200+ global sources:
Sanctions Lists:
- OFAC (US Treasury)
- UN Security Council
- EU Sanctions
- UK HM Treasury
- Country-specific lists (150+ countries)
PEP Databases:
- Government officials (current and former)
- Close associates and family members
- State-owned enterprise executives
- 3-tier classification (Tier 1-3)
Adverse Media:
- Financial crime mentions
- Fraud, corruption, money laundering
- Regulatory enforcement actions
- 50,000+ news sources globally
Update Frequency: Daily for sanctions, weekly for PEP/adverse media.
Best Practices
- Screen at Onboarding: Run AML check during customer onboarding
- Enable Monitoring: Use ongoing monitoring for high-risk customers
- Review All Matches: Don't auto-reject on low-confidence matches
- Document Decisions: Add notes when marking matches as false positives
- Re-screen Periodically: Run annual re-screening even with monitoring
- Use Templates: Standardise screening criteria across your organisation
- Monitor Sanctions: Always include sanctions category (regulatory requirement)
Error Handling
| Error Code | HTTP Status | Description | Solution |
|---|---|---|---|
INSUFFICIENT_CREDITS | 402 | Not enough credits | Purchase credits |
INVALID_SEARCH_TYPE | 400 | Unknown search type | Use INDIVIDUAL or ENTITY |
MISSING_REQUIRED_FIELD | 400 | Required field missing | Provide firstName/lastName or entityName |
APPLICANT_NOT_FOUND | 404 | Applicant ID invalid | Verify applicant ID |
MONITORING_ALREADY_ACTIVE | 409 | Monitoring already enabled | Use existing monitoring |
Next Steps
Ready to get started?
Start with our free plan. No credit card required.