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

POST/api/v3/aml/screenings🔒 Auth Required1 Credit

Screen an individual or entity

Perform AML screening on a person or company.

Request Body

FieldTypeRequiredDescription
searchTypestringYesINDIVIDUAL or ENTITY
firstNamestringYes*First name (*required for individuals)
lastNamestringYes*Last name (*required for individuals)
entityNamestringYes*Company name (*required for entities)
dateOfBirthstringNoISO 8601 date (YYYY-MM-DD)
countrystringNoISO 3166-1 alpha-2 country code
categoriesarrayNoCategories to search (default: all)
matchThresholdnumberNoMatch threshold 0-100 (default: 80)
applicantIdstringNoLink to existing applicant

Search Categories

CategoryDescriptionIncluded in BasicIncluded in Comprehensive
SANCTIONSGlobal sanctions lists
PEPPolitically exposed persons
ADVERSE_MEDIANegative news
FINANCIAL_CRIMEFinancial crime mentions
LAW_ENFORCEMENTLaw 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

GET/api/v3/aml/screenings/:id🔒 Auth Required0

Retrieve 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

GET/api/v3/aml/screenings🔒 Auth Required0

List all AML screenings

Retrieve a paginated list of AML screenings.

Query Parameters

ParameterTypeDescription
limitnumberResults per page (default: 20, max: 100)
cursorstringPagination cursor
riskLevelstringFilter by risk level
hasMatchesbooleanFilter by match presence
applicantIdstringFilter by applicant
createdFromstringISO 8601 date
createdTostringISO 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

POST/api/v3/aml/screenings/:id/matches/:matchId/review🔒 Auth Required0

Mark 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 match
  • FALSE_POSITIVE - Not the same person/entity
  • UNCERTAIN - Requires further investigation

Ongoing Monitoring

POST/api/v3/aml/monitoring🔒 Auth Required1 Credit

Enable 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

DELETE/api/v3/aml/monitoring/:id🔒 Auth Required0

Disable 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

POST/api/v3/aml/templates🔒 Auth Required0

Create 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 LevelDescriptionAction
CLEARNo matches foundAccept
LOWLow-confidence matches onlyReview or accept
MEDIUMSome matches, no sanctionsManual review
HIGHStrong matches or PEPEnhanced due diligence
CRITICALSanctions matchReject

Match Scoring

Match scores (0-100) indicate confidence:

ScoreLikelihoodDescription
90-100Very HighStrong match, multiple data points
80-89HighGood match, consider true positive
70-79MediumPossible match, review needed
60-69LowWeak match, likely false positive
<60Very LowDifferent person/entity

Fuzzy Matching: Name variants, aliases, and transliterations automatically matched.

Webhooks

Receive real-time notifications for AML events:

Events:

  • aml.screening_completed - Screening finished
  • aml.match_found - Match detected
  • aml.monitoring_alert - New match in ongoing monitoring
  • aml.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

  1. Screen at Onboarding: Run AML check during customer onboarding
  2. Enable Monitoring: Use ongoing monitoring for high-risk customers
  3. Review All Matches: Don't auto-reject on low-confidence matches
  4. Document Decisions: Add notes when marking matches as false positives
  5. Re-screen Periodically: Run annual re-screening even with monitoring
  6. Use Templates: Standardise screening criteria across your organisation
  7. Monitor Sanctions: Always include sanctions category (regulatory requirement)

Error Handling

Error CodeHTTP StatusDescriptionSolution
INSUFFICIENT_CREDITS402Not enough creditsPurchase credits
INVALID_SEARCH_TYPE400Unknown search typeUse INDIVIDUAL or ENTITY
MISSING_REQUIRED_FIELD400Required field missingProvide firstName/lastName or entityName
APPLICANT_NOT_FOUND404Applicant ID invalidVerify applicant ID
MONITORING_ALREADY_ACTIVE409Monitoring already enabledUse existing monitoring

Next Steps

Ready to integrate?

Get your API key and start building in minutes.

Ready to get started?

Start with our free plan. No credit card required.

We value your privacy

We use cookies to enhance your browsing experience, serve personalized content, and analyze our traffic. By clicking "Accept All", you consent to our use of cookies. Read our Privacy Policy and Cookie Policy for more information.